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 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(socket) do |socket|
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)
@@ -2,7 +2,7 @@ module Journeta #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- TINY = 4
5
+ TINY = 6
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
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
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-18 00:00:00 -07:00
12
+ date: 2008-10-21 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency