XMPPクライアントをまっさらのschemeで書くのに挫折したので、 かわりにloudmouthをchickenから呼べるようにした。
マニュアルはないけど、C APIを移しかえただけなので、 サンプルのloudmouthのコードそのまま持ってくれば動く。
オウムがえしするだけならこんな感じ。
コールバックの形式だけは普通に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で簡単インストールできたりしてちょっと羨ましかったり。
- gist:10812: cl-xmppの例