xmpp4r-simple 0.8.1 → 0.8.4
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/CHANGELOG +26 -0
- data/Rakefile +1 -1
- data/lib/xmpp4r-simple.rb +59 -8
- data/test/test_xmpp4r_simple.rb +4 -3
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
+
xmpp4r-simple (0.8.3)
|
2
|
+
|
3
|
+
[ Blaine Cook ]
|
4
|
+
* Catch broken connections and attempt to reconnect 3 times.
|
5
|
+
|
6
|
+
-- Blaine Cook <blaine@obvious.com> Fri, 23 Dec 2006 00:12:09 -0800
|
7
|
+
|
8
|
+
|
9
|
+
xmpp4r-simple (0.8.3)
|
10
|
+
|
11
|
+
[ Blaine Cook ]
|
12
|
+
* Update presence_updates to only store one presence_update per user.
|
13
|
+
Changes methods, will break code that uses presence_updates if not updated
|
14
|
+
correspondingly, check the documenation for the new semantics.
|
15
|
+
|
16
|
+
-- Blaine Cook <blaine@obvious.com> Thu, 07 Dec 2006 12:45:52 -0800
|
17
|
+
|
18
|
+
|
19
|
+
xmpp4r-simple (0.8.2)
|
20
|
+
|
21
|
+
[ Blaine Cook ]
|
22
|
+
* Add presence_updates?, received_messages?, and new_subscriptions? methods.
|
23
|
+
|
24
|
+
-- Blaine Cook <blaine@obvious.com> Wed, 06 Dec 2006 09:40:28 -0800
|
25
|
+
|
26
|
+
|
1
27
|
xmpp4r-simple (0.8.1)
|
2
28
|
|
3
29
|
[ Blaine Cook ]
|
data/Rakefile
CHANGED
@@ -25,7 +25,7 @@ require 'rcov/rcovtask'
|
|
25
25
|
spec = Gem::Specification.new do |s|
|
26
26
|
s.add_dependency('xmpp4r', '>= 0.3.0')
|
27
27
|
s.name = "xmpp4r-simple"
|
28
|
-
s.version = "0.8.
|
28
|
+
s.version = "0.8.4"
|
29
29
|
s.author = "Blaine Cook"
|
30
30
|
s.email = "romeda@gmail.com"
|
31
31
|
s.homepage = "http://xmpp4r-simple.rubyforge.org/"
|
data/lib/xmpp4r-simple.rb
CHANGED
@@ -212,6 +212,12 @@ module Jabber
|
|
212
212
|
dequeue(:received_messages, &block)
|
213
213
|
end
|
214
214
|
|
215
|
+
# Returns true if there are unprocessed received messages waiting in the
|
216
|
+
# queue, false otherwise.
|
217
|
+
def received_messages?
|
218
|
+
!queue(:received_messages).empty?
|
219
|
+
end
|
220
|
+
|
215
221
|
# Returns an array of presence updates received since the last time
|
216
222
|
# presence_updates was called. Passing a block will yield each update in
|
217
223
|
# turn, allowing you to break part-way through processing (especially
|
@@ -220,11 +226,28 @@ module Jabber
|
|
220
226
|
#
|
221
227
|
# e.g.:
|
222
228
|
#
|
223
|
-
# jabber.presence_updates do |friend,
|
224
|
-
# puts "Received presence update from #{friend
|
229
|
+
# jabber.presence_updates do |friend, new_presence|
|
230
|
+
# puts "Received presence update from #{friend}: #{new_presence}"
|
225
231
|
# end
|
226
232
|
def presence_updates(&block)
|
227
|
-
|
233
|
+
updates = []
|
234
|
+
@presence_mutex.synchronize do
|
235
|
+
dequeue(:presence_updates) do |friend|
|
236
|
+
presence = @presence_updates[friend]
|
237
|
+
next unless presence
|
238
|
+
new_update = [friend, presence[0], presence[1]]
|
239
|
+
yield new_update if block_given?
|
240
|
+
updates << new_update
|
241
|
+
@presence_updates.delete(friend)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
return updates
|
245
|
+
end
|
246
|
+
|
247
|
+
# Returns true if there are unprocessed presence updates waiting in the
|
248
|
+
# queue, false otherwise.
|
249
|
+
def presence_updates?
|
250
|
+
!queue(:presence_updates).empty?
|
228
251
|
end
|
229
252
|
|
230
253
|
# Returns an array of subscription notifications received since the last
|
@@ -242,6 +265,12 @@ module Jabber
|
|
242
265
|
dequeue(:new_subscriptions, &block)
|
243
266
|
end
|
244
267
|
|
268
|
+
# Returns true if there are unprocessed presence updates waiting in the
|
269
|
+
# queue, false otherwise.
|
270
|
+
def new_subscriptions?
|
271
|
+
!queue(:new_subscriptions).empty?
|
272
|
+
end
|
273
|
+
|
245
274
|
# Returns an array of subscription notifications received since the last
|
246
275
|
# time subscription_requests was called. Passing a block will yield each update
|
247
276
|
# in turn, allowing you to break part-way through processing (especially
|
@@ -256,7 +285,6 @@ module Jabber
|
|
256
285
|
def subscription_requests(&block)
|
257
286
|
dequeue(:subscription_requests, &block)
|
258
287
|
end
|
259
|
-
|
260
288
|
|
261
289
|
# Returns true if auto-accept subscriptions (friend requests) is enabled
|
262
290
|
# (default), false otherwise.
|
@@ -284,7 +312,17 @@ module Jabber
|
|
284
312
|
|
285
313
|
# Send a Jabber stanza over-the-wire.
|
286
314
|
def send!(msg)
|
287
|
-
|
315
|
+
attempts = 0
|
316
|
+
begin
|
317
|
+
attempts += 1
|
318
|
+
client.send(msg)
|
319
|
+
rescue Errno::EPIPE, IOError => e
|
320
|
+
sleep 0.33
|
321
|
+
disconnect
|
322
|
+
reconnect
|
323
|
+
retry unless attempts > 3
|
324
|
+
raise e
|
325
|
+
end
|
288
326
|
end
|
289
327
|
|
290
328
|
# Use this to force the client to reconnect after a force_disconnect.
|
@@ -367,8 +405,21 @@ module Jabber
|
|
367
405
|
end
|
368
406
|
end
|
369
407
|
|
408
|
+
@presence_updates = {}
|
409
|
+
@presence_mutex = Mutex.new
|
370
410
|
roster.add_presence_callback do |roster_item, old_presence, new_presence|
|
371
|
-
|
411
|
+
simple_jid = roster_item.jid.strip.to_s
|
412
|
+
presence = case new_presence.type
|
413
|
+
when nil: new_presence.show || :online
|
414
|
+
when :unavailable: :unavailable
|
415
|
+
else
|
416
|
+
nil
|
417
|
+
end
|
418
|
+
|
419
|
+
if presence && @presence_updates[simple_jid] != presence
|
420
|
+
queue(:presence_updates) << simple_jid
|
421
|
+
@presence_mutex.synchronize { @presence_updates[simple_jid] = [presence, new_presence.status] }
|
422
|
+
end
|
372
423
|
end
|
373
424
|
end
|
374
425
|
|
@@ -397,9 +448,9 @@ module Jabber
|
|
397
448
|
@queues[queue]
|
398
449
|
end
|
399
450
|
|
400
|
-
def dequeue(queue, non_blocking = true, &block)
|
451
|
+
def dequeue(queue, non_blocking = true, max_items = 100, &block)
|
401
452
|
queue_items = []
|
402
|
-
|
453
|
+
max_items.times do
|
403
454
|
queue_item = queue(queue).pop(non_blocking) rescue nil
|
404
455
|
break if queue_item.nil?
|
405
456
|
queue_items << queue_item
|
data/test/test_xmpp4r_simple.rb
CHANGED
@@ -145,6 +145,7 @@ class JabberSimpleTest < Test::Unit::TestCase
|
|
145
145
|
def test_presence_updates_should_be_received
|
146
146
|
|
147
147
|
@client2.add(@client1)
|
148
|
+
@client1.add(@client2)
|
148
149
|
|
149
150
|
assert_before(60) { assert @client2.subscribed_to?(@jid1) }
|
150
151
|
assert_before(60) { assert_equal 0, @client2.presence_updates.size }
|
@@ -158,9 +159,9 @@ class JabberSimpleTest < Test::Unit::TestCase
|
|
158
159
|
end
|
159
160
|
|
160
161
|
new_status = new_statuses.first
|
161
|
-
assert_equal @jid1, new_status[0]
|
162
|
-
assert_equal "Doing something else.", new_status[2]
|
163
|
-
assert_equal :away, new_status[
|
162
|
+
assert_equal @jid1, new_status[0]
|
163
|
+
assert_equal "Doing something else.", new_status[2]
|
164
|
+
assert_equal :away, new_status[1]
|
164
165
|
end
|
165
166
|
|
166
167
|
def test_disable_auto_accept_subscription_requests
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: xmpp4r-simple
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.8.
|
7
|
-
date: 2006-12-
|
6
|
+
version: 0.8.4
|
7
|
+
date: 2006-12-23 00:00:00 -08:00
|
8
8
|
summary: A simplified Jabber client library.
|
9
9
|
require_paths:
|
10
10
|
- lib
|