smackr 0.0.1-universal-java-1.6 → 0.0.2-universal-java-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/lib/smackr/main.rb +76 -0
- data/lib/smackr/version.rb +1 -1
- metadata +1 -1
data/lib/smackr/main.rb
CHANGED
@@ -0,0 +1,76 @@
|
|
1
|
+
java_import 'org.jivesoftware.smack.XMPPConnection'
|
2
|
+
java_import 'org.jivesoftware.smack.ChatManager'
|
3
|
+
class Smackr
|
4
|
+
|
5
|
+
attr_reader :xmpp_connection, :chat_manager
|
6
|
+
attr_accessor :server, :username, :password, :resource
|
7
|
+
|
8
|
+
def initialize(opts={})
|
9
|
+
[:server, :username, :password, :resource].each do |field|
|
10
|
+
self.send("#{field}=", opts[field]) if opts[field]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
## Connect to the given server, using either the username/password/resource
|
15
|
+
## given (if self.username is non-null), or anonymously (if !self.username).
|
16
|
+
## Returns true on success.
|
17
|
+
def connect!
|
18
|
+
!! connection
|
19
|
+
end
|
20
|
+
|
21
|
+
## Disconnect from the service and obliterate our xmpp_connection object.
|
22
|
+
def disconnect!
|
23
|
+
self.xmpp_connection.disconnect if self.xmpp_connection &&
|
24
|
+
self.xmpp_connection.is_connected
|
25
|
+
@xmpp_connection = nil
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
## Return a Smackr::Chat object, given a target user.
|
30
|
+
## Pass in a block expecting |conn, msg| to provide a callback to run
|
31
|
+
## on each message.
|
32
|
+
def chat(target, opts={}, &message_callback)
|
33
|
+
Smackr::Chat.new(opts.merge(:target => target,
|
34
|
+
:chat_manager => chat_manager,
|
35
|
+
:message_callback => message_callback))
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def connection
|
41
|
+
return self.xmpp_connection if self.xmpp_connection &&
|
42
|
+
self.xmpp_connection.is_connected
|
43
|
+
|
44
|
+
unless self.server
|
45
|
+
raise ArgumentError, "You must set the :server field before connecting"
|
46
|
+
end
|
47
|
+
|
48
|
+
unless self.xmpp_connection
|
49
|
+
@xmpp_connection = XMPPConnection.new(self.server)
|
50
|
+
end
|
51
|
+
|
52
|
+
unless self.xmpp_connection.is_connected
|
53
|
+
@xmpp_connection.connect
|
54
|
+
if self.username
|
55
|
+
@xmpp_connection.login(self.username, self.password) #, self.resource)
|
56
|
+
else
|
57
|
+
@xmpp_connection.login_anonymously
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
unless self.xmpp_connection.is_connected
|
62
|
+
raise Exception, "Connection to #{self.server} failed"
|
63
|
+
end
|
64
|
+
|
65
|
+
unless self.xmpp_connection.is_authenticated
|
66
|
+
raise Exception, "Authentication for #{self.server} failed"
|
67
|
+
end
|
68
|
+
|
69
|
+
self.xmpp_connection
|
70
|
+
end
|
71
|
+
|
72
|
+
def chat_manager
|
73
|
+
@chat_manager ||= connection.get_chat_manager
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
data/lib/smackr/version.rb
CHANGED