Class: ESM::Connection::ConnectionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/esm/connection/connection_manager.rb

Instance Method Summary collapse

Constructor Details

#initialize(lobby_timeout: 3, heartbeat_timeout: 3, execution_interval: 0.5) ⇒ ConnectionManager

Returns a new instance of ConnectionManager.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/esm/connection/connection_manager.rb', line 6

def initialize(lobby_timeout: 3, heartbeat_timeout: 3, execution_interval: 0.5)
  @lobby_timeout = lobby_timeout
  @heartbeat_timeout = heartbeat_timeout

  @lobby = Concurrent::Array.new
  @ids_to_check = Concurrent::Array.new
  @connections = Concurrent::Map.new
  @pool = Concurrent::CachedThreadPool.new

  @lobby_task = Concurrent::TimerTask.execute(execution_interval:) { check_lobby }
  @lobby_task.add_observer(ErrorHandler.new)

  @heartbeat = Concurrent::TimerTask.execute(execution_interval:) { check_connections }
  @heartbeat.add_observer(ErrorHandler.new)
end

Instance Method Details

#find(id) ⇒ Object



30
31
32
# File 'lib/esm/connection/connection_manager.rb', line 30

def find(id)
  @connections[id]
end

#on_connect(socket) ⇒ Object



34
35
36
# File 'lib/esm/connection/connection_manager.rb', line 34

def on_connect(socket)
  @lobby << Client.new(socket)
end

#on_disconnect(client) ⇒ Object



45
46
47
48
49
50
# File 'lib/esm/connection/connection_manager.rb', line 45

def on_disconnect(client)
  @ids_to_check.delete(client.public_id)

  @lobby.delete(client)
  @connections.delete(client.public_id)
end

#on_initialize(client) ⇒ Object



38
39
40
41
42
43
# File 'lib/esm/connection/connection_manager.rb', line 38

def on_initialize(client)
  @ids_to_check << client.public_id

  @lobby.delete(client)
  @connections[client.public_id] = client
end

#stopObject



22
23
24
25
26
27
28
# File 'lib/esm/connection/connection_manager.rb', line 22

def stop
  @lobby_task.shutdown
  @heartbeat.shutdown

  @connections.each { |_public_id, client| client.close }
  @lobby.each { |client| client.close }
end