class PackServ::Client
Attributes
handler[RW]
Public Class Methods
new(proto = nil)
click to toggle source
# File lib/packserv/client.rb, line 5 def initialize(proto = nil) @proto = proto || DefaultProtocol @handler = ->(_) {} @event_queue = Queue.new @response_queue = Queue.new @outgoing_queue = Queue.new @threads = ThreadGroup.new end
Public Instance Methods
connect(host, port)
click to toggle source
# File lib/packserv/client.rb, line 16 def connect(host, port) @server = TCPSocket.new(host, port) @threads.add(Thread.new { _connect(@server) }) @threads.add(Thread.new { dispatch_events }) self end
disconnect()
click to toggle source
# File lib/packserv/client.rb, line 25 def disconnect @threads.list.map(&:exit) @server.close end
send(obj)
click to toggle source
# File lib/packserv/client.rb, line 30 def send(obj) @outgoing_queue.push(obj) @response_queue.pop end
Private Instance Methods
_connect(server)
click to toggle source
# File lib/packserv/client.rb, line 49 def _connect(server) setup_mailbox(server) IOUnpacker.each_from(server, @proto) do |msg| case msg['type'] when 'event' @event_queue else @response_queue end.push(@proto.extract(msg)) end end
dispatch_events()
click to toggle source
# File lib/packserv/client.rb, line 38 def dispatch_events loop { handler.(@event_queue.pop) } end
setup_mailbox(server)
click to toggle source
# File lib/packserv/client.rb, line 42 def setup_mailbox(server) packer = IOPacker.new(server, @proto) @threads.add(Thread.new do loop { packer.pack(@proto.create(@outgoing_queue.pop)) } end) end