Guest User

Untitled

a guest
Jul 17th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. ## dummytserver.rb
  2. require 'tserver'
  3.  
  4. TelephonyServer.connect('120.0.0.1', 12345) do |msg|
  5.  
  6. end
  7.  
  8. ## dummyvserver.rb
  9. require 'vserver'
  10.  
  11. VsiteServer.listen(12345) do |msg|
  12.  
  13. end
  14.  
  15. ## tserver.rb
  16. require 'socket'
  17. require 'mongo/util/bson'
  18.  
  19. class TelephonyServer
  20.  
  21. def connect(address, port)
  22. @address = address
  23. @port = port.to_i
  24. @socket = TCPSocket.open(@server, @port)
  25. @socket.send "TBSON"
  26. @socket.send [1].pack 'c'
  27. Thread.start(self) { |tserver|
  28.  
  29. }
  30. end
  31.  
  32. def send(h)
  33. @socket.send(BSON.new.serialize h)
  34. end
  35.  
  36. end
  37.  
  38. class TelephonyCall
  39.  
  40. def initialize(server)
  41. @server = server
  42. @id = XGen::Mongo::Driver::ObjectID.new
  43. end
  44.  
  45. def send(action, h={})
  46. h.delete "action"
  47. h[:action] = action
  48. h.delete "call"
  49. h[:call] = @id
  50. @server.send h
  51. end
  52.  
  53. end
  54.  
  55. ## vserver.rb
  56. require 'socket'
  57.  
  58. trap("INT") do
  59. Kernel.exit 0
  60. end
  61.  
  62. class VsiteServer
  63.  
  64. def listen(port, &block)
  65. @port = port.to_i
  66. @server = TCPServer.open(@port)
  67.  
  68. # while true
  69. # Thread.start(@server.accept) do |socket|
  70. #
  71. # socket.close
  72. # end
  73. # end
  74.  
  75. begin
  76. @socket = @server.accept_nonblock
  77. IO.select @socket
  78. Kernel.die "Did not read protocol" unless @socket.readbytes(5) == "TBSON"
  79. IO.select @socket
  80. Kernel.die "Unsupported protocol format version" unless @socket.getc == 1
  81. run(&block)
  82. rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR
  83. IO.select([@server])
  84. retry
  85. end
  86. end
  87.  
  88. def run(&block)
  89. while true
  90. IO.select @socket
  91. buf = @socket.readbytes(5)
  92. sizeof = buf.unpack('V')[0]
  93. buf << readbytes(sizeof-5)
  94. block.call buf
  95. end
  96. end
  97.  
  98. end
Add Comment
Please, Sign In to add comment