journeta 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|