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