-
Notifications
You must be signed in to change notification settings - Fork 0
/
peer_handler.rb
41 lines (35 loc) · 1.11 KB
/
peer_handler.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
module Barnacle
class PeerHandler < EventMachine::Connection
def initialize(node)
@node = node
super
end
def post_init
# TODO: make sure it's actually connected FFS
m = Message.new({
:type => :node_identification,
:key => @node.server.uuid,
:value => nil # Since it's the initial handshake, they should use the IP they used to find us, which should be our public interface.
})
@node.connection = self
@node.send_message(m)
end
def receive_data(data)
m = Message.new(data)
case m.type
when :node_identification
# The server just told us who they were.
if @node.server.peers[m.key] or m.key == @node.server.uuid then
else
@node.uuid = m.key
@node.server.peers[m.key] = @node
end
when :node_request
# They asked for more nodes, let's give them some.
when :app_message
# Pass it to the App, and pass it on to other nodes if needed.
@node.server.rebroadcast_message(m, @node.uuid)
end
end
end
end