Class: ESM::Connection::ConnectionManager
- Inherits:
-
Object
- Object
- ESM::Connection::ConnectionManager
- Defined in:
- lib/esm/connection/connection_manager.rb
Instance Method Summary collapse
- #find(id) ⇒ Object
-
#initialize(lobby_timeout: 3, heartbeat_timeout: 3, execution_interval: 0.5) ⇒ ConnectionManager
constructor
A new instance of ConnectionManager.
- #on_connect(socket) ⇒ Object
- #on_disconnect(client) ⇒ Object
- #on_initialize(client) ⇒ Object
- #stop ⇒ Object
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 |
#stop ⇒ Object
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 |