Class: Vizcore::Server::WebSocketHandler
- Inherits:
-
Object
- Object
- Vizcore::Server::WebSocketHandler
- Defined in:
- lib/vizcore/server/websocket_handler.rb
Overview
Stateless WebSocket endpoint manager for frame broadcast transport.
Constant Summary collapse
- PROTOCOL_VERSION =
"vizcore.frame.v1"- MAX_BUFFERED_FRAME_BYTES =
1_000_000- DROPPABLE_MESSAGE_TYPES =
Set["audio_frame"].freeze
Class Method Summary collapse
-
.broadcast(type:, payload:) ⇒ Boolean
Broadcast one typed payload to all active websocket clients.
-
.call(env) ⇒ Array
Rack endpoint for WebSocket upgrade handling.
-
.clear_message_handler ⇒ void
Clear inbound message handler.
- .connection_count ⇒ Integer
- .dropped_frame_count ⇒ Integer
- .last_error ⇒ StandardError?
-
.on_message {|message| ... } ⇒ void
Register one inbound message handler for client -> server control messages.
-
.send_to(socket, type:, payload:) ⇒ Boolean
Send one typed payload to a single websocket client.
Class Method Details
.broadcast(type:, payload:) ⇒ Boolean
Broadcast one typed payload to all active websocket clients.
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/vizcore/server/websocket_handler.rb', line 40 def broadcast(type:, payload:) return false unless faye_websocket_class = JSON.generate(protocol: PROTOCOL_VERSION, type: type, payload: payload) each_socket do |socket| (socket, , type: type) end true end |
.call(env) ⇒ Array
Rack endpoint for WebSocket upgrade handling.
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/vizcore/server/websocket_handler.rb', line 21 def call(env) websocket_klass = faye_websocket_class return dependency_error_response unless websocket_klass return [426, text_headers, ["WebSocket upgrade required"]] unless websocket_klass.websocket?(env) socket = websocket_klass.new(env, nil, ping: 15) socket.on(:open) { register(socket) } socket.on(:close) { unregister(socket) } socket.on(:message) { |event| (socket, event.data) } socket.rack_response end |
.clear_message_handler ⇒ void
This method returns an undefined value.
Clear inbound message handler.
92 93 94 |
# File 'lib/vizcore/server/websocket_handler.rb', line 92 def mutex.synchronize { @message_handler = nil } end |
.connection_count ⇒ Integer
67 68 69 |
# File 'lib/vizcore/server/websocket_handler.rb', line 67 def connection_count mutex.synchronize { sockets.size } end |
.dropped_frame_count ⇒ Integer
77 78 79 |
# File 'lib/vizcore/server/websocket_handler.rb', line 77 def dropped_frame_count mutex.synchronize { @dropped_frame_count || 0 } end |
.last_error ⇒ StandardError?
72 73 74 |
# File 'lib/vizcore/server/websocket_handler.rb', line 72 def last_error mutex.synchronize { @last_error } end |
.on_message {|message| ... } ⇒ void
This method returns an undefined value.
Register one inbound message handler for client -> server control messages.
85 86 87 |
# File 'lib/vizcore/server/websocket_handler.rb', line 85 def (&block) mutex.synchronize { @message_handler = block } end |
.send_to(socket, type:, payload:) ⇒ Boolean
Send one typed payload to a single websocket client.
58 59 60 61 62 63 64 |
# File 'lib/vizcore/server/websocket_handler.rb', line 58 def send_to(socket, type:, payload:) return false unless faye_websocket_class = JSON.generate(protocol: PROTOCOL_VERSION, type: type, payload: payload) (socket, , type: type) true end |