[トップ][ノート][編集履歴][一覧][最近の更新][->English]

Chicken/Scheme/2008/12/15/loudmouth.egg

Category of Chicken
Category of Scheme

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で簡単インストールできたりしてちょっと羨ましかったり。

blog comments powered by Disqus