Module: AnyCable::RackServer

Defined in:
lib/anycable/rack-server/connection.rb,
lib/anycable/rack-server.rb,
lib/anycable/rack-server/hub.rb,
lib/anycable/rack-server/errors.rb,
lib/anycable/rack-server/pinger.rb,
lib/anycable/rack-server/socket.rb,
lib/anycable/rack-server/logging.rb,
lib/anycable/rack-server/version.rb,
lib/anycable/rack-server/middleware.rb,
lib/anycable/rack-server/rpc/client.rb,
lib/anycable/rack-server/coders/json.rb,
lib/anycable/rack-server/broadcast_subscribers/redis_subscriber.rb

Overview

rubocop:disable Metrics/LineLength

Defined Under Namespace

Modules: BroadcastSubscribers, Coders, Errors, Logging, RPC Classes: Connection, Hub, Middleware, Pinger, Socket

Constant Summary collapse

DEFAULT_OPTIONS =
{
  headers:  ['cookie', 'x-api-token']
}.freeze
VERSION =
'0.0.1'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.broadcast_subscriberObject (readonly)

Returns the value of attribute broadcast_subscriber.



22
23
24
# File 'lib/anycable/rack-server.rb', line 22

def broadcast_subscriber
  @broadcast_subscriber
end

.coderObject (readonly)

Returns the value of attribute coder.



22
23
24
# File 'lib/anycable/rack-server.rb', line 22

def coder
  @coder
end

.hubObject (readonly)

Returns the value of attribute hub.



22
23
24
# File 'lib/anycable/rack-server.rb', line 22

def hub
  @hub
end

.middlewareObject (readonly)

Returns the value of attribute middleware.



22
23
24
# File 'lib/anycable/rack-server.rb', line 22

def middleware
  @middleware
end

.pingerObject (readonly)

Returns the value of attribute pinger.



22
23
24
# File 'lib/anycable/rack-server.rb', line 22

def pinger
  @pinger
end

.server_idObject (readonly)

Returns the value of attribute server_id.



22
23
24
# File 'lib/anycable/rack-server.rb', line 22

def server_id
  @server_id
end

Class Method Details

.start(options = {}) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/anycable/rack-server.rb', line 29

def start(options = {})
  options  = DEFAULT_OPTIONS.merge(options)
  @hub     = Hub.new
  @pinger  = Pinger.new
  @coder   = Coders::JSON

  rpc_host = unpack_host(AnyCable.config.rpc_host)
  headers  = parse_env_headers || options[:headers]

  @server_id = "anycable-rack-server-#{SecureRandom.hex}"
  @middleware = Middleware.new(
    nil,
    pinger:    pinger,
    hub:       hub,
    coder:     coder,
    rpc_host:  rpc_host,
    headers:   headers,
    server_id: server_id
  )

  broadcast_subscribe

  @_started = true
end

.started?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/anycable/rack-server.rb', line 54

def started?
  @_started == true
end

.stopObject



58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/anycable/rack-server.rb', line 58

def stop
  return unless started?

  @_started = false
  broadcast_subscriber.unsubscribe(@_redis_channel)
  pinger.stop

  hub.sockets.each do |socket|
    hub.remove_socket(socket)
    socket.close
  end
end