发送消息回调后的jaxl

时间:2012-10-05 15:31:55

标签: php xmpp xmpphp

我希望在已经在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
       });
}

1 个答案:

答案 0 :(得分:2)

Jaxl库目前不支持此类回调。这是因为当您在基础XMPPStream的输出缓冲区中调用$client->send_chat_msg()XMPPMsg队列JAXLSocketClient对象时。当套接字准备好写入时,输出缓冲区被刷新。

在排队之前,to_string()对所有XMPPStanza进行了序列化(XMPPStream),因此基础JAXLSocketClient输出缓冲区不知道在写入时刷新了哪个节准备插座。因此,目前无法进行此类回调。

有非权威的方式来检查您的邮件的投放状态,例如输出缓冲区是空的吗?但这很棘手,并不是一个完美的解决方案。

实现此类回调的完美方法是在XMPPStream的上下文中维护输出缓冲区,然后应该通知套接字写入就绪状态,最后在套接字上刷新节之前XMPPStream可以执行这些回调。不幸的是,这不是图书馆的设计方式。但是,未来版本的库可能会支持这样的回调。