我希望在已经在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
});
}
答案 0 :(得分:2)
Jaxl库目前不支持此类回调。这是因为当您在基础XMPPStream的输出缓冲区中调用$client->send_chat_msg()
,XMPPMsg队列JAXLSocketClient对象时。当套接字准备好写入时,输出缓冲区被刷新。
在排队之前,to_string()
对所有XMPPStanza进行了序列化(XMPPStream
),因此基础JAXLSocketClient
输出缓冲区不知道在写入时刷新了哪个节准备插座。因此,目前无法进行此类回调。
有非权威的方式来检查您的邮件的投放状态,例如输出缓冲区是空的吗?但这很棘手,并不是一个完美的解决方案。
实现此类回调的完美方法是在XMPPStream
的上下文中维护输出缓冲区,然后应该通知套接字写入就绪状态,最后在套接字上刷新节之前XMPPStream
可以执行这些回调。不幸的是,这不是图书馆的设计方式。但是,未来版本的库可能会支持这样的回调。