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)


429
430
431
432
433
434
435
436
437
438
439
440
441
442
# File 'lib/isono/node_modules/rpc_channel.rb', line 429

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



445
446
447
448
449
450
451
452
453
454
455
456
457
# File 'lib/isono/node_modules/rpc_channel.rb', line 445

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