Class: Discordrb::WebSocket

Inherits:
Object
  • Object
show all
Defined in:
lib/discordrb/websocket.rb

Overview

Utility wrapper class that abstracts an instance of WSCS. Useful should we decide that WSCS isn't good either - in that case we can just switch to something else

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(endpoint, open_handler, message_handler, close_handler, error_handler) ⇒ WebSocket

Create a new WebSocket and connect to the given endpoint.


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/discordrb/websocket.rb', line 31

def initialize(endpoint, open_handler, message_handler, close_handler, error_handler)
  Discordrb::LOGGER.debug "Using WSCS version: #{::WebSocket::Client::Simple::VERSION}"

  @open_handler = open_handler
  @message_handler = message_handler
  @close_handler = close_handler
  @error_handler = error_handler

  instance = self # to work around WSCS's weird way of handling blocks

  @client = ::WebSocket::Client::Simple.connect(endpoint) do |ws|
    ws.on(:open) { instance.open_handler.call }
    ws.on(:message) do |msg|
      # If the message has a code attribute, it is in reality a close message
      if msg.code
        instance.close_handler.call(msg)
      else
        instance.message_handler.call(msg.data)
      end
    end
    ws.on(:close) { |err| instance.close_handler.call(err) }
    ws.on(:error) { |err| instance.error_handler.call(err) }
  end
end

Instance Attribute Details

#close_handlerObject (readonly)

Returns the value of attribute close_handler


19
20
21
# File 'lib/discordrb/websocket.rb', line 19

def close_handler
  @close_handler
end

#error_handlerObject (readonly)

Returns the value of attribute error_handler


19
20
21
# File 'lib/discordrb/websocket.rb', line 19

def error_handler
  @error_handler
end

#message_handlerObject (readonly)

Returns the value of attribute message_handler


19
20
21
# File 'lib/discordrb/websocket.rb', line 19

def message_handler
  @message_handler
end

#open_handlerObject (readonly)

Returns the value of attribute open_handler


19
20
21
# File 'lib/discordrb/websocket.rb', line 19

def open_handler
  @open_handler
end

Instance Method Details

#closeObject

Close the WebSocket connection


63
64
65
# File 'lib/discordrb/websocket.rb', line 63

def close
  @client.close
end

#send(data) ⇒ Object

Send data over this WebSocket


58
59
60
# File 'lib/discordrb/websocket.rb', line 58

def send(data)
  @client.send(data)
end

#threadThread


68
69
70
# File 'lib/discordrb/websocket.rb', line 68

def thread
  @client.thread
end