Chicken/Scheme/loudmouth.egg
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の例