class Gossiperl::Client::State

Public Class Methods

new(worker) click to toggle source
# File lib/gossiperl_client/state.rb, line 12
def initialize worker
  self.worker = worker
end

Public Instance Methods

receive(digest_ack) click to toggle source
# File lib/gossiperl_client/state.rb, line 37
def receive digest_ack
  unless self.connected
    # Announce connected
    self.worker.process_event( { :event => :connected } )
    self.worker.messaging.digest_subscribe( self.subscriptions ) if self.subscriptions.length > 0
  end
  self.connected = true
  self.last_ts = digest_ack.heartbeat
end
send_digest() click to toggle source
# File lib/gossiperl_client/state.rb, line 47
def send_digest
  digest = Gossiperl::Client::Thrift::Digest.new
  digest.name = self.worker.options[:client_name].to_s
  digest.port = self.worker.options[:client_port]
  digest.heartbeat = Time.now.to_i
  digest.id = SecureRandom.uuid.to_s
  digest.secret = self.worker.options[:client_secret].to_s
  self.worker.messaging.send digest
end
start() click to toggle source
# File lib/gossiperl_client/state.rb, line 16
def start
  sleep 1
  self.last_ts = Time.now.to_i
  Thread.new(self) do |state|
    while state.worker.working
      state.send_digest
      sleep 2
      if Time.now.to_i - state.last_ts > 5
        if self.connected
          # Announce disconnected
          state.worker.process_event( { :event => :disconnected } )
          self.connected = false
        end
      end
    end
    state.worker.process_event( { :event => :disconnected } )
    self.connected = false
    state.worker.logger.info("Stopping state service for client #{state.worker.options[:client_name]}.")
  end
end
subscribe(event_types) click to toggle source
# File lib/gossiperl_client/state.rb, line 57
def subscribe event_types
  ::Gossiperl::Client::Util::Validation.validate_event_types( event_types )
  self.subscriptions = self.subscriptions + event_types
  self.worker.messaging.digest_subscribe(event_types) if self.connected
  return self.subscriptions
end
unsubscribe(event_types) click to toggle source
# File lib/gossiperl_client/state.rb, line 64
def unsubscribe event_types
  ::Gossiperl::Client::Util::Validation.validate_event_types( event_types )
  self.subscriptions = self.subscriptions - event_types
  self.worker.messaging.digest_unsubscribe(event_types) if self.connected
  return self.subscriptions
end