Class: SpiderGazelle::Websocket
- Inherits:
-
Libuv::Q::DeferredPromise
- Object
- Libuv::Q::DeferredPromise
- SpiderGazelle::Websocket
- 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
-
#env ⇒ Object
readonly
Returns the value of attribute env.
-
#reactor ⇒ Object
readonly
Returns the value of attribute reactor.
-
#socket ⇒ Object
readonly
Returns the value of attribute socket.
-
#url ⇒ Object
readonly
Returns the value of attribute url.
Instance Method Summary collapse
-
#binary(array) ⇒ Object
Write some binary data to the websocket connection.
-
#initialize(tcp, env) ⇒ Websocket
constructor
A new instance of Websocket.
-
#on_open(callback = nil, &blk) ⇒ Object
Used to define a callback when the websocket connection is established Data sent before this callback is buffered.
-
#progress(callback = nil, &blk) ⇒ Object
Used to define a callback when data is received from the client.
-
#text(string) ⇒ Object
Write some text to the websocket connection.
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
#env ⇒ Object (readonly)
Returns the value of attribute env.
8 9 10 |
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 8 def env @env end |
#reactor ⇒ Object (readonly)
Returns the value of attribute reactor.
8 9 10 |
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 8 def reactor @reactor end |
#socket ⇒ Object (readonly)
Returns the value of attribute socket.
8 9 10 |
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 8 def socket @socket end |
#url ⇒ Object (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
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.
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
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
46 47 48 |
# File 'lib/spider-gazelle/upgrades/websocket.rb', line 46 def text(string) @reactor.schedule { @driver.text(string.to_s) } end |