Module: Isono::NodeModules::RpcChannel::RequestContext::RequestSynchronize

Defined in:
lib/isono/node_modules/rpc_channel.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(mod) ⇒ Object

Raises:

  • (TypeError)


397
398
399
400
401
402
403
404
405
406
407
408
409
410
# File 'lib/isono/node_modules/rpc_channel.rb', line 397

def self.extended(mod)
  raise TypeError, "This module is applicable only for RequestContext" unless mod.is_a?(RequestContext)
  # overwrite callbacks
  mod.instance_eval {
    @q = ::Queue.new
    
    on_success { |r|
      @q << [:success, r]
    }
    on_error { |r|
      @q << [:error, r]
    }
  }
end

Instance Method Details

#waitObject



413
414
415
416
417
418
419
420
421
422
423
424
425
# File 'lib/isono/node_modules/rpc_channel.rb', line 413

def wait()
  raise "response was received already." if state == :done
  raise "wait() has to be called at outside of the EventMachine's main loop." if EventMachine.reactor_thread?
  
  r = @q.deq
  
  case r[0]
  when :success
    r[1]
  when :error
    raise RpcError, r[1]
  end
end