class Telegram::Rabbit::ClientAdapter

Attributes

client[RW]

Public Class Methods

new(opts={}) click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 13
def initialize opts={}
  @options      = default_options.merge(opts)
  @logger       = get_option :logger_instance
  @logger.level = get_option :log_level
end

Public Instance Methods

start() click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 20
def start
  logger.debug "Starting ClientAdapter"
  @connection = Bunny.new(get_option :bunny).start
  at_exit { @connection.close }

  #queues
  send_queue_name    = "#{queue_prefix}.messages"
  receive_queue_name = "#{queue_prefix}.commands"

  @channel       = @connection.create_channel
  @send_queue    = @channel.queue send_queue_name
  @receive_queue = @channel.queue receive_queue_name

  logger.debug "Created queues:"
  logger.debug "  send:    #{send_queue_name}"
  logger.debug "  receive: #{receive_queue_name}"

  @receive_queue.subscribe do |info,metadata,raw_data|
    data = Marshal.load(raw_data)
    command, payload = extract_command(data)
    logger.debug "Received command: #{command}"
    logger.debug payload.inspect
    exec_api_command command, payload
  end

  logger.debug "Starting bot client"

  @client = client || Telegram::Bot::Client.new(get_option :bot, :token)
  @client.run do |bot|
    logger.debug "Bot client started"
    bot.listen do |message|
      logger.debug "Received message:"
      logger.debug message.inspect
      send_to_app message
    end
  end

end

Private Instance Methods

default_options() click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 94
def default_options
  {
    log_level:       Logger::DEBUG,
    logger_instance: Logger.new(STDOUT)
  }
end
exec_api_command(command, payload) click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 78
def exec_api_command command, payload
  # WIP error handling - send errors back
  @client.api.send command, payload
end
extract_command(payload) click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 73
def extract_command payload
  [ payload[:command], payload[:payload] ]
end
get_option(*args) click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 89
def get_option *args
  (@options || {}).dig *args
end
logger() click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 68
def logger
  @logger
end
queue_prefix() click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 84
def queue_prefix
  "#{get_option :queue_namespace}.#{get_option :bot, :name}"
end
send_to_app(message) click to toggle source
# File lib/telegram/rabbit/client_adapter.rb, line 62
def send_to_app message
  payload = Marshal.dump(message)
  @channel.default_exchange.publish payload, routing_key: @send_queue.name
end