Class: Async::WebSocket::Server
- Inherits:
-
Connection
- Object
- Connection
- Async::WebSocket::Server
- Defined in:
- lib/async/websocket/server.rb
Constant Summary collapse
- HIJACK_RESPONSE =
[-1, {}, []].freeze
Constants inherited from Connection
Connection::BLOCK_SIZE, Connection::EVENTS
Instance Attribute Summary collapse
-
#env ⇒ Object
readonly
Returns the value of attribute env.
-
#url ⇒ Object
readonly
Returns the value of attribute url.
Attributes inherited from Connection
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(env, socket) ⇒ Server
constructor
A new instance of Server.
Methods inherited from Connection
#close, #next_event, #next_message, #send_message, #send_text, #write
Constructor Details
#initialize(env, socket) ⇒ Server
Returns a new instance of Server.
26 27 28 29 30 31 32 33 |
# File 'lib/async/websocket/server.rb', line 26 def initialize(env, socket) scheme = env['rack.url_scheme'] == 'https' ? 'wss' : 'ws' @url = "#{scheme}://#{env['HTTP_HOST']}#{env['REQUEST_URI']}" @env = env super socket, ::WebSocket::Driver.rack(self) end |
Instance Attribute Details
#env ⇒ Object (readonly)
Returns the value of attribute env.
35 36 37 |
# File 'lib/async/websocket/server.rb', line 35 def env @env end |
#url ⇒ Object (readonly)
Returns the value of attribute url.
36 37 38 |
# File 'lib/async/websocket/server.rb', line 36 def url @url end |
Class Method Details
.open(env) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/async/websocket/server.rb', line 40 def self.open(env) if ::WebSocket::Driver.websocket?(env) return nil unless env['rack.hijack?'] # https://github.com/rack/rack/blob/master/SPEC#L89-L93 peer = Async::IO.try_convert( env['rack.hijack'].call ) connection = self.new(env, peer) return connection unless block_given? begin yield(connection) return HIJACK_RESPONSE ensure connection.close peer.close end end end |