Class: DRb::DRbWebSocket::SocketPool
- Inherits:
-
Object
- Object
- DRb::DRbWebSocket::SocketPool
- Defined in:
- lib/drb/drb_websocket.rb
Instance Attribute Summary collapse
-
#uri ⇒ Object
readonly
Returns the value of attribute uri.
-
#ws ⇒ Object
readonly
Returns the value of attribute ws.
Class Method Summary collapse
Instance Method Summary collapse
- #[](uri) ⇒ Object
-
#initialize(uri, ws) ⇒ SocketPool
constructor
A new instance of SocketPool.
- #send(data, &block) ⇒ Object
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. do |event| = event.data.to_s sender_id = .slice(0, 36) = .slice(36, .length - 36) @handlers.delete(sender_id).call() end end |
Instance Attribute Details
#uri ⇒ Object (readonly)
Returns the value of attribute uri.
8 9 10 |
# File 'lib/drb/drb_websocket.rb', line 8 def uri @uri end |
#ws ⇒ Object (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 |