class Wamp::Client::Request::Base

The request base class is used to abstract all of the requests that will go to the broker/dealer. The model supports a request followed by a response that is either a “success” or an error

Attributes

on_success[R]
requests[R]
send_message_callback[R]
session[R]

Public Class Methods

new(session, send_message, &on_success) click to toggle source

Constructor

@param session [Wamp::Client::Session] - The session @param send_message [lambda] - A lambda to send the message @param success [Block] - A block to run when the request was successful

# File lib/wamp/client/request/base.rb, line 22
def initialize(session, send_message, &on_success)
  @requests = {}
  @session = session
  @send_message_callback = send_message
  @on_success = on_success
end

Public Instance Methods

create_request(*args) click to toggle source

region Override Methods

# File lib/wamp/client/request/base.rb, line 104
def create_request(*args)
end
error(message) click to toggle source
# File lib/wamp/client/request/base.rb, line 81
def error(message)
  # Get the request_id
  request_id = message.request_id

  # Get the lookup
  lookup = self.requests.delete(request_id)

  # Parse the result
  callback, details = self.process_error(message, lookup)

  if callback and details
    # Add items to details
    details[:session] = self.session

    # Create the error
    error = Response::CallError.from_message(message)

    # Call the callback
    callback.call(nil, error.to_hash, details) if callback
  end
end
generate_id() click to toggle source

Generates a new ID for the request according to the specification (Section 5.1.2)

@param [Int] - A new ID

# File lib/wamp/client/request/base.rb, line 33
def generate_id
  rand(0..9007199254740992)
end
process_error(message, lookup) click to toggle source
# File lib/wamp/client/request/base.rb, line 110
def process_error(message, lookup)
end
process_success(message, lookup) click to toggle source
# File lib/wamp/client/request/base.rb, line 107
def process_success(message, lookup)
end
request(*args, &callback) click to toggle source

Makes the request to the broker/dealer

@return [Int] - request_id

# File lib/wamp/client/request/base.rb, line 40
def request(*args, &callback)

  # Generate an ID
  request_id = self.generate_id

  # Get the unique lookup/message for the request
  lookup, message = self.create_request(request_id, *args, &callback)

  # Store in the pending requests
  self.requests[request_id] = lookup if lookup

  # Send the message
  send_message(message)

  request_id
end
success(message) click to toggle source

Called when the response was a success

# File lib/wamp/client/request/base.rb, line 59
def success(message)
  # Get the request_id
  request_id = message.request_id

  # Get the lookup
  lookup = self.requests[request_id]

  # Parse the result
  callback, result, details, should_keep = self.process_success(message, lookup)

  if callback and details
    # Add items to details
    details[:session] = self.session

    # Call the callback
    callback.call(result, nil, details) if callback
  end

  # Delete if "should_keep" if false
  self.requests.delete(request_id) unless should_keep
end

Private Instance Methods

send_message(message) click to toggle source

Sends a message

# File lib/wamp/client/request/base.rb, line 118
def send_message(message)
  self.send_message_callback.call(message) if self.send_message_callback
end