- + added lines
- - deleted lines
Return to the edit history
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のコードそのまま持ってくれば動く。
- マニュアルはないけど、[http://www.loudmouth-project.org/docs/api/loudmouth/ch01.html C API]そのまま移しただけ。
+ オウムがえしするだけならこんな感じ。
+
+ - [[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ボットは安定動作しているようなので、
+ モジュール部分だけ公開してみる。
- とりあえずこれを使ったtwitter->xmppボットは安定動作しているようなので、
- 公開してみる。
CLだとcl-xmppなんてのがあって、
asdf-installで簡単インストールできたりしてちょっと羨ましかったり。
+
+ - [[gist:10812]]: cl-xmppの例