Class: Arcp::Transport::WebSocketTransport

Inherits:
Base
  • Object
show all
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

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

Returns:

  • (Boolean)


44
# File 'lib/arcp/transport/websocket_transport.rb', line 44

def closed? = @closed

#receiveObject



24
25
26
27
28
29
30
31
32
33
# File 'lib/arcp/transport/websocket_transport.rb', line 24

def receive
  message = @connection.read
  return nil if message.nil?

  bytes = message.respond_to?(:buffer) ? message.buffer : message.to_s
  Arcp::Envelope.from_json(bytes)
rescue EOFError
  @closed = true
  nil
end

#send(envelope) ⇒ Object

Raises:

  • (IOError)


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