Class: Wands::WebSocketServer
- Inherits:
-
Object
- Object
- Wands::WebSocketServer
- Extended by:
- Forwardable
- Includes:
- Protocol::WebSocket::Headers
- Defined in:
- lib/wands/web_socket_server.rb
Overview
The WebSocketServer class is responsible for accepting WebSocket connections. This class has the same interface as TCPServer.
Example usage:
server = WebSocketServer.new(‘localhost’, 2345) loop do
begin
socket = server.accept
next unless socket
puts "Accepted connection from #{socket.remote_address.ip_address} #{socket.remote_address.ip_port}"
received_message = socket.gets
puts "Received: #{received_message}"
socket.write received_message
socket.close
rescue WEBrick::HTTPStatus::EOFError => e
STDERR.puts e.message
rescue Errno::ECONNRESET => e
STDERR.puts "#{e.message} #{socket.remote_address.ip_address} #{socket.remote_address.ip_port}"
rescue EOFError => e
STDERR.puts "#{e.message} #{socket.remote_address.ip_address} #{socket.remote_address.ip_port}"
end
end
Class Method Summary collapse
Instance Method Summary collapse
- #accept ⇒ Object
- #close ⇒ Object
-
#initialize(hostname, port) ⇒ WebSocketServer
constructor
A new instance of WebSocketServer.
Constructor Details
#initialize(hostname, port) ⇒ WebSocketServer
Returns a new instance of WebSocketServer.
45 46 47 |
# File 'lib/wands/web_socket_server.rb', line 45 def initialize(hostname, port) @tcp_server = TCPServer.new hostname, port end |
Class Method Details
.open(hostname, port) ⇒ Object
41 42 43 |
# File 'lib/wands/web_socket_server.rb', line 41 def self.open(hostname, port) new(hostname, port) end |
Instance Method Details
#accept ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/wands/web_socket_server.rb', line 49 def accept socket = @tcp_server.accept request = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP) headers = read_headers_from request, socket unless headers["upgrade"].include? PROTOCOL socket.close raise "Not a websocket request" end response = response_to headers response.send_response socket WebSocket.new socket rescue WEBrick::HTTPStatus::BadRequest => e warn "WEBRick error message: #{e.}" warn "HTTP request string: #{request}" if request if socket socket.write "HTTP/1.1 400 Bad Request\r\n\r\n" socket.close end end |
#close ⇒ Object
72 73 74 75 |
# File 'lib/wands/web_socket_server.rb', line 72 def close @tcp_server.close @tcp_server = nil end |