Content of Chicken/Scheme/2008/12/15/loudmouth.egg at 2008/12/15 10:49:21 JST
View diff from current version
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]を移しかえただけなので、 サンプルの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で簡単インストールできたりしてちょっと羨ましかったり。