class Gossiperl::Client::OverlayWorker

Public Class Methods

new(supervisor, options, block) click to toggle source
# File lib/gossiperl_client/overlay_worker.rb, line 14
def initialize supervisor, options, block
  raise ArgumentError.new('Supervisor must be of type Supervisor.') unless supervisor.is_a?(::Gossiperl::Client::Supervisor)
  raise ArgumentError.new('Callback must be a Proc / block.') unless block.nil? or block.is_a?(Proc)
  ::Gossiperl::Client::Util::Validation.validate_connect( options )
  self.supervisor = supervisor
  self.options = options
  self.working = true
  @callback_block = block
  if options.has_key?(:logger)
    self.logger - options[:logger]
  else
    self.logger = Logger.new(STDOUT)
    self.logger.level = Logger::DEBUG
  end
end

Public Instance Methods

current_state() click to toggle source
# File lib/gossiperl_client/overlay_worker.rb, line 45
def current_state
  return :connected if self.state.connected
  return :disconnected
end
process_event(event) click to toggle source
# File lib/gossiperl_client/overlay_worker.rb, line 50
def process_event event
  unless @callback_block.nil?
    self.instance_exec event.merge( { :options => self.options } ), &@callback_block
  else
    self.logger.info("[#{self.options[:client_name]}] Processing event: #{event}.")
  end
end
send(digest_type, digest_data) click to toggle source
# File lib/gossiperl_client/overlay_worker.rb, line 66
def send digest_type, digest_data
  begin
    serialized = self.messaging.transport.serializer.serialize_arbitrary( digest_type, digest_data )
    self.messaging.send serialized
  rescue ArgumentError => e
    process_event( { :event => :failed,
                     :error => { :serialize_arbitrary => e } } )
  rescue StandardError => e2
    process_event( { :event => :failed,
                     :error => { :serialize_arbitrary => e2 } } )
  end
end
start() click to toggle source
# File lib/gossiperl_client/overlay_worker.rb, line 30
def start
  self.messaging = Gossiperl::Client::Messaging.new(self)
  self.state     = Gossiperl::Client::State.new(self)
  [self.messaging.start, self.state.start].each {|worker|
    worker.join
  }
end
stop() click to toggle source
# File lib/gossiperl_client/overlay_worker.rb, line 38
def stop
  self.messaging.digest_exit
  while self.state.connected
    sleep 0.1
  end
end
subscribe(event_types) click to toggle source
# File lib/gossiperl_client/overlay_worker.rb, line 58
def subscribe event_types
  self.state.subscribe event_types
end
unsubscribe(event_types) click to toggle source
# File lib/gossiperl_client/overlay_worker.rb, line 62
def unsubscribe event_types
  self.state.unsubscribe event_types
end