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