Class: Clacky::Server::HttpServer::WebSocketConnection
- Inherits:
-
Object
- Object
- Clacky::Server::HttpServer::WebSocketConnection
- Defined in:
- lib/clacky/server/http_server.rb
Overview
Wraps a raw TCP socket, providing thread-safe WebSocket frame sending.
Instance Attribute Summary collapse
-
#session_id ⇒ Object
Returns the value of attribute session_id.
Instance Method Summary collapse
-
#closed? ⇒ Boolean
Returns true if the underlying socket has been detected as dead.
-
#initialize(socket, version) ⇒ WebSocketConnection
constructor
A new instance of WebSocketConnection.
-
#send_json(data) ⇒ Object
Send a JSON-serializable object over the WebSocket.
-
#send_raw(type, data) ⇒ Object
Send a raw WebSocket frame.
Constructor Details
#initialize(socket, version) ⇒ WebSocketConnection
Returns a new instance of WebSocketConnection.
2638 2639 2640 2641 2642 2643 |
# File 'lib/clacky/server/http_server.rb', line 2638 def initialize(socket, version) @socket = socket @version = version @send_mutex = Mutex.new @closed = false end |
Instance Attribute Details
#session_id ⇒ Object
Returns the value of attribute session_id.
2636 2637 2638 |
# File 'lib/clacky/server/http_server.rb', line 2636 def session_id @session_id end |
Instance Method Details
#closed? ⇒ Boolean
Returns true if the underlying socket has been detected as dead.
2646 2647 2648 |
# File 'lib/clacky/server/http_server.rb', line 2646 def closed? @closed end |
#send_json(data) ⇒ Object
Send a JSON-serializable object over the WebSocket. Returns true on success, false if the connection is dead.
2652 2653 2654 2655 2656 2657 |
# File 'lib/clacky/server/http_server.rb', line 2652 def send_json(data) send_raw(:text, JSON.generate(data)) rescue => e Clacky::Logger.debug("WS send error (connection dead): #{e.}") false end |
#send_raw(type, data) ⇒ Object
Send a raw WebSocket frame. Returns true on success, false on broken/closed socket.
2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 |
# File 'lib/clacky/server/http_server.rb', line 2661 def send_raw(type, data) @send_mutex.synchronize do return false if @closed outgoing = WebSocket::Frame::Outgoing::Server.new( version: @version, data: data, type: type ) @socket.write(outgoing.to_s) end true rescue Errno::EPIPE, Errno::ECONNRESET, IOError, Errno::EBADF => e @closed = true Clacky::Logger.debug("WS send_raw error (client disconnected): #{e.}") false rescue => e @closed = true Clacky::Logger.debug("WS send_raw unexpected error: #{e.}") false end |