class Sockeye::Client
Attributes
auth_token[RW]
on_close[RW]
on_error[RW]
on_message[RW]
server_address[RW]
Public Class Methods
new(server_address:, auth_token:, on_message: nil, on_error: nil, on_close: nil)
click to toggle source
# File lib/sockeye/client.rb, line 9 def initialize(server_address:, auth_token:, on_message: nil, on_error: nil, on_close: nil) self.server_address = server_address self.auth_token = auth_token self.on_message = on_message || Proc.new { |payload| nil } self.on_error = on_error || Proc.new { |payload| nil } self.on_close = on_close || Proc.new { nil } end
Public Instance Methods
close()
click to toggle source
# File lib/sockeye/client.rb, line 19 def close @raw_socket.close EM.stop end
connect()
click to toggle source
# File lib/sockeye/client.rb, line 24 def connect EM.run do @raw_socket = WebSocket::EventMachine::Client.connect(uri: self.server_address) @raw_socket.onopen do @raw_socket.send({action: :authenticate, payload: self.auth_token}.to_json) end # When a message is received, ensure the server sent a valid payload # then handle it based on status code. # @raw_socket.onmessage do |msg, type| message = json_try_parse(msg) if message.nil? || message[:payload].nil? || message[:status].nil? puts "Invalid message" self.on_error.call ws.close elsif message[:status].to_i >= 400 || message[:status].to_i == 0 self.on_error.call(message) else self.on_message.call(message) end end @raw_socket.onclose do self.on_close.call EM.stop end @raw_socket.onerror do self.on_error.call(0) @raw_socket.close EM.stop end end end
Private Instance Methods
json_try_parse(data)
click to toggle source
# File lib/sockeye/client.rb, line 67 def json_try_parse(data) begin return JSON.parse(data, symbolize_names: true) rescue JSON::ParserError => e return nil end end