class OskieRpc::Request

Attributes

command[RW]
params[RW]
timeout[RW]

Public Class Methods

new(command = '', params = {}) click to toggle source
# File lib/oskie_rpc/request.rb, line 7
def initialize(command = '', params = {})
  @command = command
  @params = params
  @timeout = 60
  @message_id = SecureRandom.uuid
  @callbacks = {}
  @state = :initialized
end

Public Instance Methods

<=>(request) click to toggle source
# File lib/oskie_rpc/request.rb, line 16
def <=>(request)
  timeout_at <=> request.timeout_at
end
__request_received(processor) click to toggle source
# File lib/oskie_rpc/request.rb, line 81
def __request_received(processor)
  @state = :received
  @processor = processor
end
__request_sent() click to toggle source

Private API for use by Processor only.

# File lib/oskie_rpc/request.rb, line 76
def __request_sent
  @state = :sent
  @sent_at = Time.now.utc
end
__response_failed() click to toggle source
# File lib/oskie_rpc/request.rb, line 91
def __response_failed
  @state = :failed
  @callbacks[:failure].call if @callbacks[:failure]
end
__response_received(response) click to toggle source
# File lib/oskie_rpc/request.rb, line 86
def __response_received(response)
  @state = :responded
  @callbacks[:response].call(response) if @callbacks[:response]
end
dump() click to toggle source
# File lib/oskie_rpc/request.rb, line 30
def dump
  validate!

  {
    'type' => 'rpcRequest',
    'request' => {
      'command' => @command,
      'params' => @params,
      'messageId' => @message_id
    }
  }
end
load(payload) click to toggle source
# File lib/oskie_rpc/request.rb, line 20
def load(payload)
  @command = payload['request']['command']
  @params = payload['request']['params']
  @message_id = payload['request']['messageId']

  validate!

  self
end
on(name, &block) click to toggle source
# File lib/oskie_rpc/request.rb, line 43
def on(name, &block)
  @callbacks[name.to_sym] = block
end
respond() { || ... } click to toggle source
# File lib/oskie_rpc/request.rb, line 55
def respond
  raise InvalidStateError unless @state == :received
  response = Response.new(message_id)
  response.result = yield
  @processor.deliver(response)

  nil
end
timed_out?() click to toggle source
# File lib/oskie_rpc/request.rb, line 47
def timed_out?
  Time.now.utc > timeout_at
end
timeout_at() click to toggle source
# File lib/oskie_rpc/request.rb, line 51
def timeout_at
  @sent_at + timeout
end
validate!() click to toggle source
# File lib/oskie_rpc/request.rb, line 64
def validate!
  @command.is_a?(String) || raise(ValidationError, "Command is not a string.")
  @params.is_a?(Hash) || raise(ValidationError, "Params is not a hash.")
  @message_id.is_a?(String) || raise(ValidationError, "Message ID is not a string.")

  nil
end