Пытаюсь написать простого отправителя сообщений для 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;
};