summaryrefslogtreecommitdiff
path: root/src/mulk/benki/xmpp.clj
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2012-04-26 13:28:24 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2012-04-26 13:28:24 +0200
commit9bb6accec05610d4a27d1893843bad0bb5295b53 (patch)
tree79f1498a339e36fa59e549c941ba1c360b0914d6 /src/mulk/benki/xmpp.clj
parente9108275136cc6c032d9fdedc189643b2e0d91c0 (diff)
Lafargue: Implement handling of incoming XMPP messages.
Diffstat (limited to 'src/mulk/benki/xmpp.clj')
-rw-r--r--src/mulk/benki/xmpp.clj25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/mulk/benki/xmpp.clj b/src/mulk/benki/xmpp.clj
index 74c4933..5543402 100644
--- a/src/mulk/benki/xmpp.clj
+++ b/src/mulk/benki/xmpp.clj
@@ -16,11 +16,13 @@
(:import [org.jivesoftware.smack ConnectionConfiguration
ConnectionConfiguration$SecurityMode
XMPPConnection
- MessageListener]))
+ MessageListener
+ ChatManagerListener]))
-(defonce xmpp (atom nil))
-(defonce messages (channel))
+(defonce xmpp (atom nil))
+(defonce messages (channel))
+(defonce messages-in (channel))
(defn- connect []
@@ -63,7 +65,8 @@
recipient
(reify MessageListener
(processMessage [self chat message]
- nil)))]
+ (when-let [body (.getBody message)]
+ (enqueue messages-in {:sender recipient, :body body})))))]
(.sendMessage chat notification))))))
(defn- startup-client []
@@ -71,7 +74,21 @@
(fn [{targets :targets, msg :message}]
(push-message targets msg))))
+(defn- handle-incoming-chats []
+ (doto (.getChatManager @xmpp)
+ (.addChatListener
+ (reify ChatManagerListener
+ (chatCreated [self chat local?]
+ (when-not local?
+ (.addMessageListener
+ chat
+ (reify MessageListener
+ (processMessage [self chat message]
+ (when-let [body (.getBody message)]
+ (enqueue messages-in {:sender (.getParticipant chat) :body body})))))))))))
+
(defn init-xmpp! []
(future
(reconnect!)
+ (handle-incoming-chats)
(startup-client)))