[トップ][一覧][最近の更新]

編集履歴:差分

2008/12/15 10:43:31 JSTと2008/12/15 10:49:21 JST間のChicken/Scheme/2008/12/15/loudmouth.eggの変更箇所

編集履歴ページに戻る

  XMPPクライアントをまっさらのschemeで書くのに挫折したので、
  かわりに[http://www.loudmouth-project.org/ loudmouth]をchickenから呼べるようにした。
  
  - [[files:egg/loudmouth.egg]]
  
- マニュアルはないけど、[http://www.loudmouth-project.org/docs/api/loudmouth/ch01.html C API]そのまま移しただけ。
+ マニュアルはないけど、[http://www.loudmouth-project.org/docs/api/loudmouth/ch01.html C API]を移しかえただけなので、
+ サンプルのloudmouthのコードそのまま持ってくれば動く。
  
+ コールバックの形式だけは普通にforeign-lambdaできないので、
+ ヘルパーマクロを使って、
+ 
+ {{{
+ (lm:define-message-handler
+  presence-cb
+  (conn mes data)
+  (let ((node (lm:message-node? mes))
+        (send-jid (slot-ref microblog:server-config 'send)))
+    (lm:debug-print "presence"
+                    (lm:message-node-to-string node))
+    (lm-ext:send-online conn send-jid)
+    (microblog->xmpp conn send-jid)
+    *LM-HANDLER-RESULT-REMOVE-MESSAGE*))
+ 
+ (lm:call-with-message-handler
+         presence-cb #f #f
+         (lambda (handler)
+           (lm:connection-register-message-handler conn handler
+                                                   *LM-MESSAGE-TYPE-PRESENCE*
+                                                   *LM-HANDLER-PRIORITY-LAST*)))
+ }}}
+ 
+ みたいに書く。
+ 
  コールバックの第一引数がvoid*なものだから、
  データの移送はかなり面倒なことに。
  これをscheme-objectにすると、gcされちゃう。
  
  とりあえずこれを使ったtwitter->xmppボットは安定動作しているようなので、
  公開してみる。
  
  CLだとcl-xmppなんてのがあって、
  asdf-installで簡単インストールできたりしてちょっと羨ましかったり。