Class: WebSocket::EventMachine::Client

Inherits:
Base
  • Object
show all
Defined in:
lib/websocket/eventmachine/client.rb,
lib/websocket/eventmachine/client/version.rb

Overview

WebSocket Client (using EventMachine)

Examples:

ws = WebSocket::EventMachine::Client.connect(:host => "0.0.0.0", :port => 8080)
ws.onmessage { |msg| ws.send "Pong: #{msg}" }
ws.send "data"

Constant Summary collapse

VERSION =
'1.3.0'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Client

Initialize connection

Parameters:

  • args (Hash)

    Arguments for connection

Options Hash (args):

  • :host (String)

    The host IP/DNS name

  • :port (Integer)

    The port to connect too(default = 80)

  • :version (Integer)

    Version of protocol to use(default = 13)

  • :headers (Hash)

    HTTP headers to use in the handshake

  • :ssl (Boolean)

    Force SSL/TLS connection



67
68
69
# File 'lib/websocket/eventmachine/client.rb', line 67

def initialize(args)
  @args = args
end

Class Method Details

.connect(args = {}) ⇒ Object

Connect to websocket server

Parameters:

  • args (Hash) (defaults to: {})

    The request arguments

Options Hash (args):

  • :host (String)

    The host IP/DNS name

  • :port (Integer)

    The port to connect too(default = 80)

  • :uri (String)

    Full URI for server(optional - use instead of host/port combination)

  • :version (Integer)

    Version of protocol to use(default = 13)

  • :headers (Hash)

    HTTP headers to use in the handshake

  • :ssl (Boolean)

    Force SSL/TLS connection

  • :tls (Hash)

    TLS options hash to be passed to EM start_tls



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/websocket/eventmachine/client.rb', line 27

def self.connect(args = {})
  host = nil
  port = nil
  if args[:uri]
    uri = URI.parse(args[:uri])
    host = uri.host
    port = uri.port
    args[:ssl] = true if uri.scheme == 'wss'
  end
  host = args[:host] if args[:host]
  port = args[:port] if args[:port]
  if args[:ssl]
    args[:tls] ||= {}
    args[:tls][:sni_hostname] ||= host
    port ||= 443
  else
    port ||= 80
  end

  ::EventMachine.connect host, port, self, args
end

.connect_unix_domain(socketname, args = {}) ⇒ Object

Make a websocket connection to a UNIX-domain socket.

Parameters:

  • socketname (String)

    Unix domain socket (local fully-qualified path)

  • args (Hash) (defaults to: {})

    Arguments for connection

Options Hash (args):

  • :version (Integer)

    Version of protocol to use(default = 13)

  • :headers (Hash)

    HTTP headers to use in the handshake



54
55
56
57
58
# File 'lib/websocket/eventmachine/client.rb', line 54

def self.connect_unix_domain(socketname, args = {})
  fail ArgumentError, 'invalid socket' unless File.socket?(socketname)
  args[:host] ||= 'localhost'
  ::EventMachine.connect_unix_domain socketname, self, args
end

Instance Method Details

#close(code = 1000, data = nil) ⇒ Boolean

Close connection

Returns:

  • (Boolean)

    true if connection is closed immediately, false if waiting for other side to close connection



158
# File 'lib/websocket/eventmachine/client.rb', line 158

def close(code = 1000, data = nil); super; end

#connection_completedObject

Called by EventMachine after connecting. Sends handshake to server or starts SSL/TLS Eventmachine internal



87
88
89
90
91
92
93
# File 'lib/websocket/eventmachine/client.rb', line 87

def connection_completed
  if @args[:ssl]
    start_tls @args[:tls]
  else
    send(@handshake.to_s, :type => :plain)
  end
end

#onclose(&blk) ⇒ Object

Called when connection is closed. No parameters are passed to block



125
# File 'lib/websocket/eventmachine/client.rb', line 125

def onclose(&blk); super; end

#onerror(&blk) ⇒ Object

Called when error occurs. One parameter passed to block:

error - string with error message


130
# File 'lib/websocket/eventmachine/client.rb', line 130

def onerror(&blk); super; end

#onmessage(&blk) ⇒ Object

Called when message is received. Two parameters passed to block:

message - string with received message
type - type of message. Valid values are :text and :binary


136
# File 'lib/websocket/eventmachine/client.rb', line 136

def onmessage(&blk); super; end

#onopen(&blk) ⇒ Object

Called when connection is opened. No parameters are passed to block



121
# File 'lib/websocket/eventmachine/client.rb', line 121

def onopen(&blk); super; end

#onping(&blk) ⇒ Object

Called when ping message is received One parameter passed to block:

message - string with ping message


141
# File 'lib/websocket/eventmachine/client.rb', line 141

def onping(&blk); super; end

#onpong(&blk) ⇒ Object

Called when pong message is received One parameter passed to block:

message - string with pong message


146
# File 'lib/websocket/eventmachine/client.rb', line 146

def onpong(&blk); super; end

#ping(data = '') ⇒ Boolean

Send ping message

Returns:

  • (Boolean)

    false if protocol version is not supporting ping requests



162
# File 'lib/websocket/eventmachine/client.rb', line 162

def ping(data = ''); super; end

#pong(data = '') ⇒ Boolean

Send pong message

Returns:

  • (Boolean)

    false if protocol version is not supporting pong requests



166
# File 'lib/websocket/eventmachine/client.rb', line 166

def pong(data = ''); super; end

#post_initObject

Called after initialize of connection, but before connecting to server Eventmachine internal



78
79
80
81
# File 'lib/websocket/eventmachine/client.rb', line 78

def post_init
  @state = :connecting
  @handshake = ::WebSocket::Handshake::Client.new(@args)
end

#send(data, args = {}) ⇒ Boolean

Send data

Parameters:

  • data (String)

    Data to send

  • args (Hash) (defaults to: {})

    Arguments for send

Options Hash (args):

  • :type (String)

    Type of frame to send - available types are “text”, “binary”, “ping”, “pong” and “close”

  • :code (Integer)

    Code for close frame

Returns:

  • (Boolean)

    true if data was send, otherwise call on_error if needed



154
# File 'lib/websocket/eventmachine/client.rb', line 154

def send(data, args = {}); super; end

#ssl_handshake_completedObject

Called by EventMachine after SSL/TLS handshake. Sends websocket handshake Eventmachine internal



99
100
101
# File 'lib/websocket/eventmachine/client.rb', line 99

def ssl_handshake_completed
  send(@handshake.to_s, :type => :plain)
end