xmpp4r-observable 0.5.3 → 0.5.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/lib/observable_thing.rb +1 -1
- data/lib/xmpp4r-observable.rb +53 -11
- metadata +5 -7
data/lib/observable_thing.rb
CHANGED
@@ -15,7 +15,7 @@ module ObservableThing
|
|
15
15
|
unless observer.respond_to? func
|
16
16
|
raise NoMethodError, "observer does not respond to `#{func.to_s}'"
|
17
17
|
end
|
18
|
-
@things[thing][observer] = func
|
18
|
+
@things[thing][observer] = func unless @things[thing].include?(observer)
|
19
19
|
end
|
20
20
|
|
21
21
|
# Deletes an observer for some "thing".
|
data/lib/xmpp4r-observable.rb
CHANGED
@@ -101,6 +101,11 @@ module Jabber
|
|
101
101
|
@observable = observable
|
102
102
|
|
103
103
|
@helper = @service_jid = nil
|
104
|
+
@disco = Jabber::Discovery::Helper.new(@observable.client)
|
105
|
+
attach!
|
106
|
+
end
|
107
|
+
|
108
|
+
def attach!
|
104
109
|
begin
|
105
110
|
domain = Jabber::JID.new(@observable.jid).domain
|
106
111
|
@service_jid = "pubsub." + domain
|
@@ -108,6 +113,7 @@ module Jabber
|
|
108
113
|
rescue
|
109
114
|
@helper = @service_jid = nil
|
110
115
|
end
|
116
|
+
return has_service?
|
111
117
|
end
|
112
118
|
|
113
119
|
def inspect #:nodoc:
|
@@ -123,23 +129,27 @@ module Jabber
|
|
123
129
|
! @helper.nil?
|
124
130
|
end
|
125
131
|
|
126
|
-
# Sets the PubSub service. Just one service is allowed.
|
132
|
+
# Sets the PubSub service. Just one service is allowed. If nil, reset.
|
127
133
|
def set_service(service)
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
@
|
135
|
-
|
134
|
+
if service.nil?
|
135
|
+
@helper = @service_jid = nil
|
136
|
+
else
|
137
|
+
raise NotConnected, "You are not connected" if ! @observable.connected?
|
138
|
+
raise AlreadySet, "You already have a PubSub service (#{@service_jid})." if has_service?
|
139
|
+
@helper = Jabber::PubSub::ServiceHelper.new(@observable.client, service)
|
140
|
+
@service_jid = service
|
141
|
+
|
142
|
+
@helper.add_event_callback do |event|
|
143
|
+
@observable.changed(:event)
|
144
|
+
@observable.notify_observers(:event, event)
|
145
|
+
end
|
136
146
|
end
|
137
147
|
end
|
138
148
|
|
139
149
|
# Subscribe to a node.
|
140
150
|
def subscribe_to(node)
|
141
151
|
raise_noservice if ! has_service?
|
142
|
-
@helper.subscribe_to(node)
|
152
|
+
@helper.subscribe_to(node) unless is_subscribed_to?(node)
|
143
153
|
end
|
144
154
|
|
145
155
|
# Unsubscribe from a node.
|
@@ -190,7 +200,7 @@ module Jabber
|
|
190
200
|
node
|
191
201
|
end
|
192
202
|
|
193
|
-
# Return an array of
|
203
|
+
# Return an array of nodes I own
|
194
204
|
def my_nodes
|
195
205
|
if ! defined? @my_nodes
|
196
206
|
ret = []
|
@@ -202,6 +212,30 @@ module Jabber
|
|
202
212
|
return @my_nodes
|
203
213
|
end
|
204
214
|
|
215
|
+
# Return true if a given node exists
|
216
|
+
def node_exists?(node)
|
217
|
+
ret = []
|
218
|
+
if ! defined? @existing_nodes or ! @existing_nodes.include?(node)
|
219
|
+
# We'll renew @existing_nodes if we haven't got it the first time
|
220
|
+
reply = @disco.get_items_for(@service_jid)
|
221
|
+
reply.items.each do |item|
|
222
|
+
ret << item.node
|
223
|
+
end
|
224
|
+
@existing_nodes = ret
|
225
|
+
end
|
226
|
+
return @existing_nodes.include?(node)
|
227
|
+
end
|
228
|
+
|
229
|
+
# Returns an array of nodes I am subscribed to
|
230
|
+
def subscribed_nodes
|
231
|
+
ret = []
|
232
|
+
subscriptions.each do |sub|
|
233
|
+
next if sub.node.nil?
|
234
|
+
ret << sub.node if sub.attributes['subscription'] == 'subscribed' and ! my_nodes.include?(sub.node)
|
235
|
+
end
|
236
|
+
return ret
|
237
|
+
end
|
238
|
+
|
205
239
|
# Return true if we're subscribed to that node
|
206
240
|
def is_subscribed_to?(node)
|
207
241
|
ret = false
|
@@ -628,6 +662,12 @@ module Jabber
|
|
628
662
|
# Post-connect
|
629
663
|
register_default_callbacks
|
630
664
|
status(@presence, @status_message)
|
665
|
+
if ! @pubsub.nil?
|
666
|
+
@pubsub.attach!
|
667
|
+
else
|
668
|
+
@pubsub = PubSub.new(self)
|
669
|
+
end
|
670
|
+
|
631
671
|
@connect_mutex.unlock
|
632
672
|
end
|
633
673
|
|
@@ -641,6 +681,7 @@ module Jabber
|
|
641
681
|
end
|
642
682
|
end
|
643
683
|
client = nil
|
684
|
+
@pubsub.set_service(nil)
|
644
685
|
@disconnected = auto_reconnect
|
645
686
|
end
|
646
687
|
|
@@ -693,6 +734,7 @@ module Jabber
|
|
693
734
|
@deferred_delivery_thread = Thread.new {
|
694
735
|
loop {
|
695
736
|
sleep 3 while @deferred_messages.empty?
|
737
|
+
sleep 3
|
696
738
|
message = @deferred_messages.deq
|
697
739
|
if @subs.subscribed_to?(message[:to])
|
698
740
|
deliver(message[:to], message[:message], message[:type])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xmpp4r-observable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Lorenzoni
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-27 00:00:00 -02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.5.0
|
24
24
|
version:
|
25
|
-
description:
|
25
|
+
description: Jabber::Observable builds on the strong foundation of XMPP4R and use a customized version of Ruby's builtin Observer pattern to expose XMPP observable things (as messages, pubsub events, presence, etc).
|
26
26
|
email: pablo@propus.com.br
|
27
27
|
executables: []
|
28
28
|
|
@@ -43,8 +43,6 @@ files:
|
|
43
43
|
- test/tc_xmpp4r-observable.rb
|
44
44
|
has_rdoc: true
|
45
45
|
homepage: http://www.nardol.org/
|
46
|
-
licenses: []
|
47
|
-
|
48
46
|
post_install_message:
|
49
47
|
rdoc_options: []
|
50
48
|
|
@@ -65,9 +63,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
63
|
requirements: []
|
66
64
|
|
67
65
|
rubyforge_project:
|
68
|
-
rubygems_version: 1.3.
|
66
|
+
rubygems_version: 1.3.1
|
69
67
|
signing_key:
|
70
|
-
specification_version:
|
68
|
+
specification_version: 2
|
71
69
|
summary: An observable Jabber client library.
|
72
70
|
test_files:
|
73
71
|
- test/tc_observable_thing.rb
|