3

jaxl でメッセージが送信された後にコードを実行したい。この状況に適したコールバックはどれですか?

    public function test() {

        require_once 'JAXL/jaxl.php';
        global $client;

        $client = new JAXL(array(
            'jid' => 'user@localhost',
            'pass' => 'password',
            'log_level' => JAXL_INFO
        ));

        $client->add_cb('on_stream_features', function($stanza)  {
            global $client,$thisObj;
            $client->send_chat_msg('otherUser@localhost','Message');  
        });

       $client->add_cb('on_message_send',function(){  //some thing like this
         //some code
       });
}
4

1 に答える 1

2

Jaxlライブラリは現在、そのようなコールバックをサポートしていません。これは、を呼び出すと$client->send_chat_msg()XMPPStreamがXMPPMsgオブジェクトを基になるJAXLSocketClientの出力バッファーにキューイングするためです。ソケットが書き込みの準備ができると、出力バッファがフラッシュされます。

キューに入れる前に、すべてのXMPPStanzaはによってシリアル化(to_string())されるXMPPStreamため、基になるJAXLSocketClient出力バッファーは、どのスタンザが書き込み可能ソケットを介してフラッシュされているかを認識しません。結果として、そのようなコールバックは現在不可能です。

メッセージの配信ステータスに関するチェックを実行する権限のない方法があります。たとえば、出力バッファが空ですか?しかし、これは注意が必要であり、完璧な解決策ではありません。

このようなコールバックを実装する完璧な方法は、のコンテキスト内で出力バッファーを維持することですXMPPStream。これは、基になるソケット書き込み準備完了状態について通知され、最後に、スタンザをソケット上でフラッシュする前に、XMPPStreamこれらのコールバックを実行できます。残念ながら、これはライブラリの設計方法ではありません。ただし、そのようなコールバックは、ライブラリの将来のバージョンでサポートされる可能性があります。

于 2012-10-05T20:29:17.860 に答える