Sha256: 7fbd4823a9ecc0907c1e09f3c2a61c02314d5baedeecd9dc4e719612a983178b

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true

module Tamashii
  module Manager
    # :nodoc:
    module ClientManager
      # rubocop:disable Metrics/MethodLength
      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
      # rubocop:enable Metrics/MethodLength
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tamashii-manager-0.3.0 lib/tamashii/manager/client_manager.rb
tamashii-manager-0.2.7 lib/tamashii/manager/client_manager.rb
tamashii-manager-0.2.6 lib/tamashii/manager/client_manager.rb