Class: LiteCable::Server::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/lite_cable/server/middleware.rb

Overview

Rack middleware to hijack the socket

Defined Under Namespace

Classes: HijackNotAvailable

Instance Method Summary collapse

Constructor Details

#initialize(_app, connection_class:) ⇒ Middleware

Returns a new instance of Middleware.



8
9
10
11
# File 'lib/lite_cable/server/middleware.rb', line 8

def initialize(_app, connection_class:)
  @connection_class = connection_class
  @heart_beat = HeartBeat.new
end

Instance Method Details

#call(env) ⇒ Object

Raises:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/lite_cable/server/middleware.rb', line 13

def call(env)
  return [404, { 'Content-Type' => 'text/plain' }, ['Not Found']] unless
    env["HTTP_UPGRADE"] == 'websocket'

  raise HijackNotAvailable unless env['rack.hijack']

  env['rack.hijack'].call
  handshake = send_handshake(env)

  socket = ClientSocket::Base.new env, env['rack.hijack_io'], handshake.version
  init_connection socket
  init_heartbeat socket
  socket.listen
  [-1, {}, []]
end