class ActionCable::Server::Worker

:nodoc:
Worker used by Server.send_async to do connection work in threads.

def async_exec(receiver, *args, connection:, &block)

def async_exec(receiver, *args, connection:, &block)
  async_invoke receiver, :instance_exec, *args, connection: connection, &block
end

def async_invoke(receiver, method, *args, connection: receiver, &block)

def async_invoke(receiver, method, *args, connection: receiver, &block)
  @executor.post do
    invoke(receiver, method, *args, connection: connection, &block)
  end
end

def halt

running will be discarded from the queue
Stop processing work: any work that has not already started
def halt
  @executor.shutdown
end

def initialize(max_size: 5)

def initialize(max_size: 5)
  @executor = Concurrent::ThreadPoolExecutor.new(
    min_threads: 1,
    max_threads: max_size,
    max_queue: 0,
  )
end

def invoke(receiver, method, *args, connection:, &block)

def invoke(receiver, method, *args, connection:, &block)
  work(connection) do
    receiver.send method, *args, &block
  rescue Exception => e
    logger.error "There was an exception - #{e.class}(#{e.message})"
    logger.error e.backtrace.join("\n")
    receiver.handle_exception if receiver.respond_to?(:handle_exception)
  end
end

def logger

def logger
  ActionCable.server.logger
end

def stopping?

def stopping?
  @executor.shuttingdown?
end

def work(connection)

def work(connection)
  self.connection = connection
  run_callbacks :work do
    yield
  end
ensure
  self.connection = nil
end