lib/msgpack/rpc.rb in msgpack-rpc-0.1.2 vs lib/msgpack/rpc.rb in msgpack-rpc-0.1.4

- old
+ new

@@ -163,22 +163,17 @@ class ClientSession class BasicRequest def initialize(session, loop) - @error = nil - @result = nil @session = session @timeout = session.timeout @loop = loop end attr_reader :loop - attr_accessor :result, :error def call(err, res) - @error = err - @result = res @session = nil end def join while @session @@ -195,11 +190,37 @@ false end end end + class AsyncRequest < BasicRequest + def initialize(session, loop) + super(session, loop) + @error = nil + @result = nil + end + attr_accessor :result, :error + def call(err, res) + @error = err + @result = res + @session = nil + end + end + + class CallbackRequest < BasicRequest + def initialize(session, loop, block) + super(session, loop) + @block = block + end + + def call(err, res) + @block.call(err, res) + end + end + + def initialize(loop) @sock = nil @reqtable = {} @seqid = 0 @loop = loop @@ -210,15 +231,15 @@ def add_socket(sock) @sock = sock end def send(method, *args) - send_real(method, args, BasicRequest.new(self,@loop)) + send_real(method, args, AsyncRequest.new(self,@loop)) end def callback(method, *args, &block) - send_real(method, args, block) + send_real(method, args, CallbackRequest.new(self,@loop,block)) end def call(method, *args) req = send(method, *args) req.join @@ -318,11 +339,11 @@ class ServerSession def initialize(obj, accept = obj.public_methods) @obj = obj - @accept = accept.map {|m| m.to_s } + @accept = accept.map {|m| m.is_a?(Integer) ? m : m.to_s} end def add_socket(sock) # do nothing end @@ -387,12 +408,12 @@ @loop.run end def stop @loop.stop - # attach/detach dummy timer - @loop.attach(Rev::TimerWatcher.new(0, false)).detach + # attach dummy timer + @loop.attach Rev::TimerWatcher.new(0, false) nil end end @@ -409,12 +430,12 @@ loop.attach(@timer) end attr_reader :host, :port def close - @timer.detach - @rsock.detach + @timer.detach if @timer.attached? + @rsock.detach if @rsock.attached? @s.close nil end def send(method, *args) @@ -466,10 +487,10 @@ @loop.attach(lsock) end def close @socks.reject! {|lsock| - lsock.detach + lsock.detach if lsock.attached? lsock.close true } nil end