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