Gloox требует ручной thread sleep при отправке. Или нет?
Пытаюсь написать простого отправителя сообщений для xmpp. Решил воспользоваться gloox. Так вот, оказалось, что без ручного засыпания сообщение теряется. Вопрос, если кто знает, как в gloox дождаться отправки сообщения и только потом выйти?
Пример кода:
class MyMessenger: public ConnectionListener {
public:
MyMessenger(): client( 0 ) {}
~MyMessenger() {
if( client ) delete( client );
}
virtual void onConnect() override {
JID to(DST_JID);
MessageSession* session = new MessageSession( client, to );
session->send("test message");
// вот без этого сообщение теряется.
std::this_thread::sleep_for(std::chrono::milliseconds(500));
client->disposeMessageSession(session);
client->disconnect();
};
virtual void onDisconnect( ConnectionError ce ) override {
if( ce == ConnAuthenticationFailed )
cerr << "Auth failed. Reason: " << client->authError() << endl;
}
virtual bool onTLSConnect( const CertInfo& ) override {
return true;
}
void start() {
JID jid( USER_JID );
client = new Client( jid, USER_PASS );
client->setServer( SERVER );
client->setPort( PORT );
client->setTls( TLSRequired );
client->registerConnectionListener( this );
if( client->connect( false ) ) {
ConnectionError ce = ConnNoError;
while( ce == ConnNoError ) {
ce = client->recv();
}
cerr << "ce: " << ce << endl;
}
}
private:
Client* client;
};