class OBS::WebSocket::ResponseDispatcher

Public Class Methods

new() click to toggle source
# File lib/obs/websocket.rb, line 164
def initialize
  @ongoing_requests = {}
end

Public Instance Methods

dispatch(message_id, payload) click to toggle source
# File lib/obs/websocket.rb, line 180
def dispatch(message_id, payload)
  if h = @ongoing_requests.delete(message_id)
    request = h[:request]
    future = h[:future]

    case payload['status']
    when 'ok'
      response_class = request.class.const_get(:Response)
      future.fulfill(response_class.new(payload))
    when 'error'
      future.reject(RequestError.new(payload['error']))
    else
      fail 'Unknown status'
    end
  end
end
register(executor, request) click to toggle source
# File lib/obs/websocket.rb, line 168
def register(executor, request)
  message_id = new_message_id
  future = Concurrent::Promises.resolvable_future_on(executor)

  @ongoing_requests[message_id] = {
    request: request,
    future: future,
  }

  [message_id, future.with_hidden_resolvable]
end

Private Instance Methods

new_message_id() click to toggle source
# File lib/obs/websocket.rb, line 199
def new_message_id
  SecureRandom.uuid
end