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

編集履歴:過去のバージョン

2008/12/15 10:49:21 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のコードそのまま持ってくれば動く。
  
  コールバックの形式だけは普通にforeign-lambdaできないので、
  ヘルパーマクロを使って、
  
  {{{
  (lm:define-message-handler
   presence-cb
   (conn mes data)
   (let ((node (lm:message-node? mes))
         (send-jid (slot-ref microblog:server-config 'send)))
     (lm:debug-print "presence"
                     (lm:message-node-to-string node))
     (lm-ext:send-online conn send-jid)
     (microblog->xmpp conn send-jid)
     *LM-HANDLER-RESULT-REMOVE-MESSAGE*))
  
  (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で簡単インストールできたりしてちょっと羨ましかったり。