class IMP::Client
Public Class Methods
new()
click to toggle source
# File lib/client/initialize.rb, line 4 def initialize @sock = TCPSocket.new('localhost', PORT) # identification # todo separate version error buff = JSON.parse(@sock.gets) raise if buff['imp'].nil? raise if buff['version'] != IMP::VERSION # now just receive responses @requests = Hash.new Thread.new do listener end end
Public Instance Methods
close()
click to toggle source
# File lib/client/close.rb, line 4 def close @sock&.close @sock = nil end
listener()
click to toggle source
# File lib/client/listener.rb, line 4 def listener loop do buff = @sock&.gets raise IOError if buff.nil? buff = JSON.parse(buff) uuid = buff['uuid'] data = buff['data'] responded(uuid, data) rescue IOError @requests.each_key do |uuid| responded(uuid, nil) end @requests = nil close break rescue end end
request(event, data, &hook)
click to toggle source
# File lib/client/request.rb, line 4 def request(event, data, &hook) raise if @requests.nil? uuid = Random.uuid buff = { 'uuid' => uuid, 'event' => event, 'data' => data, } if hook.nil? response = :waiting hook = Proc.new do |data| response = data end end @requests[uuid] = hook @sock.puts buff.to_json unless block_given? while response == :waiting sleep 0.1 end return response end end
responded(uuid, data)
click to toggle source
# File lib/client/responded.rb, line 4 def responded(uuid, data) todo = @requests[uuid] Thread.new { todo.call(data) } @requests.delete(uuid) end