Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## dummytserver.rb
- require 'tserver'
- TelephonyServer.connect('120.0.0.1', 12345) do |msg|
- end
- ## dummyvserver.rb
- require 'vserver'
- VsiteServer.listen(12345) do |msg|
- end
- ## tserver.rb
- require 'socket'
- require 'mongo/util/bson'
- class TelephonyServer
- def connect(address, port)
- @address = address
- @port = port.to_i
- @socket = TCPSocket.open(@server, @port)
- @socket.send "TBSON"
- @socket.send [1].pack 'c'
- Thread.start(self) { |tserver|
- }
- end
- def send(h)
- @socket.send(BSON.new.serialize h)
- end
- end
- class TelephonyCall
- def initialize(server)
- @server = server
- @id = XGen::Mongo::Driver::ObjectID.new
- end
- def send(action, h={})
- h.delete "action"
- h[:action] = action
- h.delete "call"
- h[:call] = @id
- @server.send h
- end
- end
- ## vserver.rb
- require 'socket'
- trap("INT") do
- Kernel.exit 0
- end
- class VsiteServer
- def listen(port, &block)
- @port = port.to_i
- @server = TCPServer.open(@port)
- # while true
- # Thread.start(@server.accept) do |socket|
- #
- # socket.close
- # end
- # end
- begin
- @socket = @server.accept_nonblock
- IO.select @socket
- Kernel.die "Did not read protocol" unless @socket.readbytes(5) == "TBSON"
- IO.select @socket
- Kernel.die "Unsupported protocol format version" unless @socket.getc == 1
- run(&block)
- rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR
- IO.select([@server])
- retry
- end
- end
- def run(&block)
- while true
- IO.select @socket
- buf = @socket.readbytes(5)
- sizeof = buf.unpack('V')[0]
- buf << readbytes(sizeof-5)
- block.call buf
- end
- end
- end
Add Comment
Please, Sign In to add comment