journeta 0.1.4 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +9 -0
- data/examples/instant_messenger.rb +0 -0
- data/lib/journeta/journeta_engine.rb +12 -0
- data/lib/journeta/peer_handler.rb +24 -1
- data/lib/journeta/peer_listener.rb +4 -3
- data/lib/journeta/peer_registry.rb +22 -0
- data/lib/journeta/version.rb +1 -1
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
== 0.1.6 2008-10-21
|
4
|
+
|
5
|
+
* CRITICAL LIVELOCK FIX. DO NOT USE 0.1.4 AND 0.1.3.
|
6
|
+
* Added support for :peer_registered_handler.
|
7
|
+
* Added support for :peer_unregistered_handler.
|
8
|
+
* Added support for :peer_updated_handler.
|
9
|
+
|
1
10
|
== 0.1.2 2008-09-08
|
2
11
|
|
3
12
|
* Preemptive peer reaping. Peers now automatically "expire" from the local registry when they haven't been heard from in a while.
|
File without changes
|
@@ -47,6 +47,15 @@ module Journeta
|
|
47
47
|
# Application logic which processes session data.
|
48
48
|
attr_reader :peer_handler
|
49
49
|
|
50
|
+
# Application logic which gets notified when a peer comes online.
|
51
|
+
attr_reader :peer_registered_handler
|
52
|
+
|
53
|
+
# Application logic which gets notified when a peer comes online.
|
54
|
+
attr_reader :peer_updated_handler
|
55
|
+
|
56
|
+
# Application logic which gets notified when a peer goes offline.
|
57
|
+
attr_reader :peer_unregistered_handler
|
58
|
+
|
50
59
|
# The TCP port used to receive direct peer messages.
|
51
60
|
attr_reader :peer_port
|
52
61
|
|
@@ -79,6 +88,9 @@ module Journeta
|
|
79
88
|
|
80
89
|
@peer_port = configuration[:peer_port] || DEFAULT_PEER_PORT
|
81
90
|
@peer_handler = configuration[:peer_handler] || DefaultPeerHandler.new
|
91
|
+
@peer_registered_handler = configuration[:peer_registered_handler] || DefaultPeerRegisteredHandler.new
|
92
|
+
@peer_updated_handler = configuration[:peer_updated_handler] || DefaultPeerUpdatedHandler.new
|
93
|
+
@peer_unregistered_handler = configuration[:peer_unregistered_handler] || DefaultPeerUnregisteredHandler.new
|
82
94
|
|
83
95
|
@presence_port = configuration[:presence_port] || DEFAULT_PRESENCE_PORT
|
84
96
|
@presence_address = configuration[:presence_address] || DEFAULT_PRESENCE_NETWORK
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Journeta
|
2
2
|
|
3
3
|
class DefaultPeerHandler
|
4
|
-
|
5
4
|
include Logger
|
6
5
|
|
7
6
|
def call(message)
|
@@ -10,4 +9,28 @@ module Journeta
|
|
10
9
|
|
11
10
|
end
|
12
11
|
|
12
|
+
class DefaultPeerRegisteredHandler
|
13
|
+
include Logger
|
14
|
+
def call(peer)
|
15
|
+
return if peer.nil? or peer.uuid.nil?
|
16
|
+
putsd("Peer registration event handled! #{peer.uuid}")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class DefaultPeerUpdatedHandler
|
21
|
+
include Logger
|
22
|
+
def call(peer)
|
23
|
+
return if peer.nil? or peer.uuid.nil?
|
24
|
+
putsd("Peer update event handled! #{peer.uuid}")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class DefaultPeerUnregisteredHandler
|
29
|
+
include Logger
|
30
|
+
def call(peer)
|
31
|
+
return if peer.nil? or peer.uuid.nil?
|
32
|
+
putsd("Peer unregistration event handled! #{peer.uuid}")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
13
36
|
end
|
@@ -19,11 +19,12 @@ module Journeta
|
|
19
19
|
putsd "Listening on port #{port}"
|
20
20
|
|
21
21
|
begin
|
22
|
-
loop do
|
22
|
+
loop do
|
23
|
+
|
24
|
+
session = socket.accept
|
23
25
|
# We'll put the actual handling of the new session in the background so we
|
24
26
|
# can continue listening for new connections as soon as possible.
|
25
|
-
Thread.new(
|
26
|
-
session = socket.accept
|
27
|
+
Thread.new(session) do |session|
|
27
28
|
data = ''
|
28
29
|
# Read every last bit from the socket before passing off to the handler.
|
29
30
|
while more = session.gets
|
@@ -8,6 +8,7 @@ module Journeta
|
|
8
8
|
include Logger
|
9
9
|
|
10
10
|
# {<:uuid> => PeerConnection}
|
11
|
+
# Disabled to prevent non-thread-safe access, since this is a synchronized object.
|
11
12
|
# attr_reader :peers
|
12
13
|
|
13
14
|
|
@@ -46,6 +47,7 @@ module Journeta
|
|
46
47
|
to_reap.each do |peer|
|
47
48
|
peer.stop
|
48
49
|
@peers.delete peer.uuid
|
50
|
+
send_peer_unregistered(peer)
|
49
51
|
end
|
50
52
|
end
|
51
53
|
sleep @reaper_period
|
@@ -73,12 +75,14 @@ module Journeta
|
|
73
75
|
putsd "Adding peer #{peer.uuid}."
|
74
76
|
peer.start
|
75
77
|
@peers[peer.uuid] = peer
|
78
|
+
send_peer_registered(peer)
|
76
79
|
else
|
77
80
|
putsd "Updating peer #{peer.uuid}."
|
78
81
|
peer.stop
|
79
82
|
# Make sure we're not overriding the creation date of the original entry.
|
80
83
|
peer.created_at = nil
|
81
84
|
existing.update_settings peer
|
85
|
+
send_peer_updated(existing)
|
82
86
|
end
|
83
87
|
|
84
88
|
end
|
@@ -130,6 +134,24 @@ module Journeta
|
|
130
134
|
end
|
131
135
|
end
|
132
136
|
|
137
|
+
def send_peer_registered(peer)
|
138
|
+
return if peer.nil?
|
139
|
+
handler = @engine.peer_registered_handler
|
140
|
+
Thread.new(handler, peer) {|h, peer| h.call(peer)}
|
141
|
+
end
|
142
|
+
|
143
|
+
def send_peer_updated(peer)
|
144
|
+
return if peer.nil?
|
145
|
+
handler = @engine.peer_updated_handler
|
146
|
+
Thread.new(handler, peer) {|h, peer| h.call(peer)}
|
147
|
+
end
|
148
|
+
|
149
|
+
def send_peer_unregistered(peer)
|
150
|
+
return if peer.nil?
|
151
|
+
handler = @engine.peer_unregistered_handler
|
152
|
+
Thread.new(handler, peer) {|h, peer| h.call(peer)}
|
153
|
+
end
|
154
|
+
|
133
155
|
protected
|
134
156
|
|
135
157
|
def all_do(all_groups = false)
|
data/lib/journeta/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: journeta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Preston Lee
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-10-
|
12
|
+
date: 2008-10-21 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|