module Slack::RealTime::Config

def concurrency

def concurrency
  (val = @concurrency).respond_to?(:call) ? val.call : val
end

def detect_concurrency

def detect_concurrency
  %i[Async Eventmachine Celluloid].each do |concurrency|
    begin
      return Slack::RealTime::Concurrency.const_get(concurrency)
    rescue LoadError, NameError
      false # could not be loaded, missing dependencies
    end
  end
  raise(
    NoConcurrencyError,
    'Missing concurrency. Add async-websocket, faye-websocket ' \
    'or celluloid-io to your Gemfile.'
  )
end

def reset

def reset
  self.websocket_ping = 30
  self.websocket_proxy = nil
  self.token = nil
  self.concurrency = method(:detect_concurrency)
  self.start_method = nil
  self.start_options = { request: { timeout: 180 } }
  self.store_class = Slack::RealTime::Store
  self.logger = nil
end