Class: Gossiperl::Client::State
- Inherits:
-
Resolution
show all
- Defined in:
- lib/gossiperl_client/state.rb,
lib/gossiperl_client/headers.rb
Constant Summary
Constants inherited
from Resolution
Resolution::UNDEFINED_VALUE
Instance Method Summary
collapse
Methods inherited from Resolution
field
Constructor Details
#initialize(worker) ⇒ State
Returns a new instance of State.
12
13
14
|
# File 'lib/gossiperl_client/state.rb', line 12
def initialize worker
self.worker = worker
end
|
Instance Method Details
#receive(digest_ack) ⇒ Object
37
38
39
40
41
42
43
44
45
|
# File 'lib/gossiperl_client/state.rb', line 37
def receive digest_ack
unless self.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 ⇒ Object
47
48
49
50
51
52
53
54
55
|
# 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 ⇒ Object
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# 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
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) ⇒ Object
57
58
59
60
61
62
|
# 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) ⇒ Object
64
65
66
67
68
69
|
# 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
|