Class: DRb::DRbWebSocket::SocketPool

Inherits:
Object
  • Object
show all
Defined in:
lib/drb/drb_websocket.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri, ws) ⇒ SocketPool

Returns a new instance of SocketPool.



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/drb/drb_websocket.rb', line 10

def initialize(uri, ws)
  @uri = uri
  @ws = ws
  @handlers = {}

  ws.onmessage do |event|
    message_data = event.data.to_s
    sender_id = message_data.slice(0, 36)
    message = message_data.slice(36, message_data.length - 36)
    @handlers.delete(sender_id).call(message)
  end
end

Instance Attribute Details

#uriObject (readonly)

Returns the value of attribute uri.



8
9
10
# File 'lib/drb/drb_websocket.rb', line 8

def uri
  @uri
end

#wsObject (readonly)

Returns the value of attribute ws.



8
9
10
# File 'lib/drb/drb_websocket.rb', line 8

def ws
  @ws
end

Class Method Details

.new_connection(uri) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/drb/drb_websocket.rb', line 28

def self.new_connection(uri)
  ws = WasmDRb::WebSocket.new(uri)

  ws.onclose do
    @sockets[uri] = new_connection(uri)
  end

  self.new(uri, ws)
end

.open(uri) ⇒ Object



23
24
25
26
# File 'lib/drb/drb_websocket.rb', line 23

def self.open(uri)
  @sockets ||= {}
  @sockets[uri] ||= new_connection(uri)
end

Instance Method Details

#[](uri) ⇒ Object



53
54
55
# File 'lib/drb/drb_websocket.rb', line 53

def [](uri)
  @sockets[uri].ws
end

#send(data, &block) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/drb/drb_websocket.rb', line 38

def send(data, &block)
  sender_id = SecureRandom.uuid
  @handlers[sender_id] = block
  byte_data = sender_id.bytes + data.bytes

  if @ws.connecting?
    listener = @ws.onopen do
      @ws.send(WasmDRb::ArrayBuffer.new(byte_data))
      @ws.remove_event_listener('open', &listener)
    end
  else
    @ws.send(WasmDRb::ArrayBuffer.new(byte_data))
  end
end