Module: Tamashii::Manager::ClientManager

Included in:
Client
Defined in:
lib/tamashii/manager/client_manager.rb

Overview

:nodoc:

Class Method Summary collapse

Class Method Details

.included(other) ⇒ Object

rubocop:disable Metrics/MethodLength



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/tamashii/manager/client_manager.rb', line 8

def self.included(other)
  other.class_eval do
    class << self
      def accepted_clients
        @accepted_clients ||= Concurrent::Hash.new
      end

      def [](name)
        accepted_clients[name.to_s]
      end

      # TODO: Fix duplicate name
      def []=(name, client)
        return unless client.is_a?(Client)
        accepted_clients[name.to_s] = client
      end

      def remove_client(name)
        accepted_clients.delete(name)
      end

      def send_to(id, packet)
        Manager.server.pubsub.send_to(id, packet)
      end

      def ensure_heartbeat_enabled(event_loop)
        @heartbeat_timer = event_loop.timer(Config.heartbeat_interval) do
          event_loop.post { accepted_clients.values.map(&:beat) }
        end
      end
    end
  end
end