Class: MessagePack::RPC::Future
- Inherits:
-
Object
- Object
- MessagePack::RPC::Future
- Defined in:
- lib/msgpack/rpc/future.rb
Overview
Future describes result of remote procedure call that is initially not known, because it is not yet received. You can wait and get the result with get method.
Instance Attribute Summary collapse
-
#error ⇒ Object
Returns the value of attribute error.
-
#loop ⇒ Object
readonly
Returns the value of attribute loop.
-
#result ⇒ Object
Returns the value of attribute result.
Instance Method Summary collapse
-
#attach_callback(proc = nil, &block) ⇒ Object
call-seq: attach_callback {|future| }.
-
#attach_error_handler(proc = nil, &block) ⇒ Object
For IDL.
-
#attach_result_handler(proc = nil, &block) ⇒ Object
For IDL.
-
#get ⇒ Object
Wait for receiving result of remote procedure call and returns its result.
-
#initialize(session, loop, callback = nil) ⇒ Future
constructor
:nodoc:.
-
#join ⇒ Object
Wait for receiving result of remote procedure call.
-
#set_result(err, res) ⇒ Object
:nodoc:.
-
#step_timeout ⇒ Object
:nodoc:.
Constructor Details
#initialize(session, loop, callback = nil) ⇒ Future
:nodoc:
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/msgpack/rpc/future.rb', line 26 def initialize(session, loop, callback = nil) #:nodoc: @timeout = session.timeout @loop = loop @callback_handler = callback @error_handler = nil @result_handler = nil @set = false @error = nil @result = nil end |
Instance Attribute Details
#error ⇒ Object
Returns the value of attribute error.
37 38 39 |
# File 'lib/msgpack/rpc/future.rb', line 37 def error @error end |
#loop ⇒ Object (readonly)
Returns the value of attribute loop.
36 37 38 |
# File 'lib/msgpack/rpc/future.rb', line 36 def loop @loop end |
#result ⇒ Object
Returns the value of attribute result.
37 38 39 |
# File 'lib/msgpack/rpc/future.rb', line 37 def result @result end |
Instance Method Details
#attach_callback(proc = nil, &block) ⇒ Object
call-seq:
attach_callback {|future| }
Attaches a callback method that is called when the result of remote method is received.
76 77 78 |
# File 'lib/msgpack/rpc/future.rb', line 76 def attach_callback(proc = nil, &block) @callback_handler = proc || block end |
#attach_error_handler(proc = nil, &block) ⇒ Object
For IDL
81 82 83 |
# File 'lib/msgpack/rpc/future.rb', line 81 def attach_error_handler(proc = nil, &block) #:nodoc: @error_handler = proc || block end |
#attach_result_handler(proc = nil, &block) ⇒ Object
For IDL
86 87 88 |
# File 'lib/msgpack/rpc/future.rb', line 86 def attach_result_handler(proc = nil, &block) #:nodoc: @result_handler = proc || block end |
#get ⇒ Object
Wait for receiving result of remote procedure call and returns its result. If the remote method raises error, then this method raises RemoteError. If the remote procedure call failed with timeout, this method raises TimeoutError. Otherwise this method returns the result of remote method.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/msgpack/rpc/future.rb', line 43 def get join if error.nil? if @result_handler return @result_handler.call(@result) else return @result end end if @result.nil? # compatible error raise RuntimeError.new(@error) end if @error_handler @error_handler.call(@error, @result) end raise RPCError.create(@error, @result) end |
#join ⇒ Object
Wait for receiving result of remote procedure call. This method returns self. If a callback method is attached, it will be called.
65 66 67 68 69 70 |
# File 'lib/msgpack/rpc/future.rb', line 65 def join until @set @loop.run_once end self end |
#set_result(err, res) ⇒ Object
:nodoc:
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/msgpack/rpc/future.rb', line 90 def set_result(err, res) #:nodoc: @error = err @result = res @set = true if @callback_handler if @callback_handler.arity == 2 # FIXME backward compatibility @callback_handler.call(error, result) else @callback_handler.call(self) end end self rescue self end |
#step_timeout ⇒ Object
:nodoc:
107 108 109 110 111 112 113 114 |
# File 'lib/msgpack/rpc/future.rb', line 107 def step_timeout #:nodoc: if @timeout < 1 true else @timeout -= 1 false end end |