Class: SpiderGazelle::Websocket

Inherits:
Libuv::Q::DeferredPromise
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/spider-gazelle/upgrades/websocket.rb

Constant Summary collapse

RACK_URL_SCHEME =
'rack.url_scheme'
HTTP_HOST =
'HTTP_HOST'
REQUEST_URI =
'REQUEST_URI'
HTTPS =
'https'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(tcp, env) ⇒ Websocket

Returns a new instance of Websocket.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 21

def initialize(tcp, env)
    @socket, @env = tcp, env

    # Initialise the promise
    super tcp.reactor, tcp.reactor.defer

    scheme = env[RACK_URL_SCHEME] == HTTPS ? 'wss://' : 'ws://'
    @url = scheme + env[HTTP_HOST] + env[REQUEST_URI]
    @driver = ::WebSocket::Driver.rack self

    # Pass data from the socket to the driver
    @socket.progress &method(:socket_read)
    @socket.finally &method(:socket_close)


    # Driver has indicated that it is closing
    # We'll close the socket after writing any remaining data
    @driver.on :close, &method(:on_close)
    @driver.on :message, &method(:on_message)
    @driver.on :error, &method(:on_error)
end

Instance Attribute Details

#envObject (readonly)

Returns the value of attribute env.



8
9
10
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 8

def env
  @env
end

#reactorObject (readonly)

Returns the value of attribute reactor.



8
9
10
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 8

def reactor
  @reactor
end

#socketObject (readonly)

Returns the value of attribute socket.



8
9
10
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 8

def socket
  @socket
end

#urlObject (readonly)

Returns the value of attribute url.



8
9
10
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 8

def url
  @url
end

Instance Method Details

#binary(array) ⇒ Object

Write some binary data to the websocket connection

Parameters:

  • array (Array)

    an array of bytes to be sent to the far end



53
54
55
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 53

def binary(array)
    @reactor.schedule { @driver.binary(array.to_a) }
end

#on_open(callback = nil, &blk) ⇒ Object

Used to define a callback when the websocket connection is established Data sent before this callback is buffered.

Parameters:

  • callback (Proc) (defaults to: nil)

    the callback to be triggered on establishment



68
69
70
71
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 68

def on_open(callback = nil, &blk)
    callback ||= blk
    @driver.on :open, &callback
end

#progress(callback = nil, &blk) ⇒ Object

Used to define a callback when data is received from the client

Parameters:

  • callback (Proc) (defaults to: nil)

    the callback to be called when data is received



60
61
62
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 60

def progress(callback = nil, &blk)
    @progress = callback || blk
end

#text(string) ⇒ Object

Write some text to the websocket connection

Parameters:

  • string (String)

    a string of data to be sent to the far end



46
47
48
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 46

def text(string)
    @reactor.schedule { @driver.text(string.to_s) }
end