[トップ][一覧][最近の更新]

編集履歴:差分

2008/12/15 11:39:27 JSTと2008/12/15 11:56:06 JST間のChicken/Scheme/2008/12/15/loudmouth.eggの変更箇所

編集履歴ページに戻る

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