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