lib/msgpack/rpc/future.rb in msgpack-rpc-0.4.0 vs lib/msgpack/rpc/future.rb in msgpack-rpc-0.4.1
- old
+ new
@@ -47,16 +47,18 @@
return @result_handler.call(@result)
else
return @result
end
end
+ if @result.nil?
+ # compatible error
+ raise RuntimeError.new(@error)
+ end
if @error_handler
- return @error_handler.call(self)
- else
- raise @error if @error.is_a?(Error)
- raise RemoteError.new(@error, @result)
+ @error_handler.call(@error, @result)
end
+ raise RPCError.create(@error, @result)
end
# Wait for receiving result of remote procedure call.
# This method returns self.
# If a callback method is attached, it will be called.
@@ -71,17 +73,10 @@
# attach_callback {|future| }
#
# Attaches a callback method that is called when the result of remote method is received.
def attach_callback(proc = nil, &block)
@callback_handler = proc || block
- if @callback_handler.arity == 2
- # FIXME backward compatibility
- handler = @callback_handler
- @callback_handler = Proc.new {|future|
- handler.call(future.error, future.result)
- }
- end
end
# For IDL
def attach_error_handler(proc = nil, &block) #:nodoc:
@error_handler = proc || block
@@ -93,13 +88,21 @@
end
def set_result(err, res) #:nodoc:
@error = err
@result = res
+ @set = true
if @callback_handler
- @callback_handler.call(self)
+ if @callback_handler.arity == 2
+ # FIXME backward compatibility
+ @callback_handler.call(error, result)
+ else
+ @callback_handler.call(self)
+ end
end
- @set = true
+ self
+ rescue
+ self
end
def step_timeout #:nodoc:
if @timeout < 1
true