class Aggro::Subscriber

Public: Subscribes to topics at a given endpoint.

Constants

RAW_HANDLER

Public Class Methods

new(endpoint, callable = nil, &block) click to toggle source
# File lib/aggro/subscriber.rb, line 6
def initialize(endpoint, callable = nil, &block)
  if callable
    @callback = callable
  elsif block_given?
    @callback = block
  else
    fail ArgumentError
  end

  @transport_sub = Aggro.transport.subscriber endpoint, method(RAW_HANDLER)
  @subscribed_topics = Set.new
end

Public Instance Methods

bind() click to toggle source
# File lib/aggro/subscriber.rb, line 19
def bind
  @transport_sub.start
end
handle_message(message) click to toggle source
# File lib/aggro/subscriber.rb, line 23
def handle_message(message)
  @callback.call message.id, message.events if message.is_a? Message::Events
end
stop() click to toggle source
# File lib/aggro/subscriber.rb, line 27
def stop
  @transport_sub.stop
end
subscribe_to_topic(topic) click to toggle source
# File lib/aggro/subscriber.rb, line 31
def subscribe_to_topic(topic)
  return if @subscribed_topics.include? topic

  @subscribed_topics << topic
  @transport_sub.add_subscription message_prefix_for_topic(topic)
end

Private Instance Methods

handle_raw(raw) click to toggle source
# File lib/aggro/subscriber.rb, line 40
def handle_raw(raw)
  handle_message MessageParser.parse raw
end
message_prefix_for_topic(topic) click to toggle source
# File lib/aggro/subscriber.rb, line 44
def message_prefix_for_topic(topic)
  Message::Events::TYPE_CODE + topic
end