Class: Teamd::Discover::Peer
- Inherits:
-
Object
- Object
- Teamd::Discover::Peer
- Defined in:
- lib/teamd/discover/peer.rb
Defined Under Namespace
Classes: Timeout
Class Method Summary collapse
Instance Method Summary collapse
- #announce(token = nil) ⇒ Object
- #discover(timeout = 3) ⇒ Object
-
#initialize ⇒ Peer
constructor
A new instance of Peer.
- #serve ⇒ Object
Constructor Details
Class Method Details
.domain ⇒ Object
13 14 15 |
# File 'lib/teamd/discover/peer.rb', line 13 def domain Socket.gethostname.split(".",2).last rescue "local" end |
.tid ⇒ Object
10 11 12 |
# File 'lib/teamd/discover/peer.rb', line 10 def tid @tid ||= SecureRandom.hex(8) end |
Instance Method Details
#announce(token = nil) ⇒ Object
55 56 57 58 |
# File 'lib/teamd/discover/peer.rb', line 55 def announce token=nil @registry.add(Cluster.new(token: token,name:Peer.domain)) if token @transport.transmit Message::ClusterAnnouncement.new clusters: @registry.pack end |
#discover(timeout = 3) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/teamd/discover/peer.rb', line 29 def discover timeout=3 input = QueueWithTimeout.new Thread.new do begin = @transport.receive if .is_a? Message::ClusterAnnouncement input.push .clusters.first.token Thread.kill end raise Exception rescue retry end end Thread.new do loop do @transport.transmit Message.build("discovery" => true) sleep 1 end end begin input.pop_with_timeout timeout rescue ThreadError nil end end |
#serve ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/teamd/discover/peer.rb', line 21 def serve keep_alive loop do = @transport.receive process_discovery() if .is_a? Message::DiscoveryRequest process_announcement() if .is_a? Message::ClusterAnnouncement end end |