現在のバージョンとの差分を見る
編集履歴ページに戻る
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で簡単インストールできたりしてちょっと羨ましかったり。