Content of Chicken/Scheme/2008/12/15/loudmouth.egg at 2008/12/15 11:56:06 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のコードそのまま持ってくれば動く。 オウムがえしするだけならこんな感じ。 - [[gist:11760]] コールバックの形式だけは普通にforeign-lambdaできないので、 ヘルパーマクロを使って、 {{{ (lm:define-message-handler presence-cb (conn mes data) (begin ここにコールバックの内容)) (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で簡単インストールできたりしてちょっと羨ましかったり。