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 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