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 может выполнить эти обратные вызовы. К сожалению, это не то, как библиотека разработана. Однако возможно, что такие обратные вызовы могут быть поддержаны в будущей версии библиотеки.

Другие вопросы по тегам