Class: Arcp::Transport::WebSocketTransport
- Defined in:
- lib/arcp/transport/websocket_transport.rb
Overview
WebSocket transport built on ‘async-websocket`. The `connection` argument is an open `Async::WebSocket::Connection`.
Instance Method Summary collapse
- #close(reason: nil) ⇒ Object
- #closed? ⇒ Boolean
-
#initialize(connection:) ⇒ WebSocketTransport
constructor
A new instance of WebSocketTransport.
- #receive ⇒ Object
- #send(envelope) ⇒ Object
Constructor Details
#initialize(connection:) ⇒ WebSocketTransport
Returns a new instance of WebSocketTransport.
10 11 12 13 14 |
# File 'lib/arcp/transport/websocket_transport.rb', line 10 def initialize(connection:) super() @connection = connection @closed = false end |
Instance Method Details
#close(reason: nil) ⇒ Object
35 36 37 38 39 40 41 42 |
# File 'lib/arcp/transport/websocket_transport.rb', line 35 def close(reason: nil) return if @closed @closed = true @connection.close if @connection.respond_to?(:close) rescue StandardError nil end |
#closed? ⇒ Boolean
44 |
# File 'lib/arcp/transport/websocket_transport.rb', line 44 def closed? = @closed |
#receive ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/arcp/transport/websocket_transport.rb', line 24 def receive = @connection.read return nil if .nil? bytes = .respond_to?(:buffer) ? .buffer : .to_s Arcp::Envelope.from_json(bytes) rescue EOFError @closed = true nil end |
#send(envelope) ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/arcp/transport/websocket_transport.rb', line 16 def send(envelope) raise IOError, 'transport closed' if @closed @connection.write(envelope.to_json) @connection.flush if @connection.respond_to?(:flush) nil end |