Jaxl после отправки сообщения обратного вызова
Я хочу выполнить некоторый код после того, как сообщение уже отправлено в 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 ответ
Библиотека Jaxl в настоящее время не поддерживает такие обратные вызовы. Это потому, что когда вы звоните $client->send_chat_msg()
, XMPPStream ставит в очередь объект XMPPMsg в выходном буфере нижележащего JAXLSocketClient. Выходные буферы сбрасываются как и когда сокет готов к записи.
Перед очередью все XMPPStanza сериализуются (to_string()
) от XMPPStream
таким образом, лежащий в основе JAXLSocketClient
выходные буферы не знают о том, какой раздел очищается через сокет готовности к записи. В результате такие обратные вызовы в настоящее время невозможны.
Существуют неавторизованные способы проверки состояния доставки вашего сообщения, например, пустой ли буфер вывода? Но это сложно и не идеальное решение.
Идеальный способ реализовать такие обратные вызовы - поддерживать выходные буферы в контексте XMPPStream
, который затем должен быть уведомлен о состоянии готовности к записи основного сокета, наконец, перед сбросом раздела над сокетом, XMPPStream
может выполнить эти обратные вызовы. К сожалению, это не то, как библиотека разработана. Однако возможно, что такие обратные вызовы могут быть поддержаны в будущей версии библиотеки.