Gloox send работает только с нитью сна. Или нет? - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь написать простой отправитель сообщения для xmpp.Решил воспользоваться глоксом.Итак, оказалось, что без ручного сообщения нить потерян.Вопрос, если кто-нибудь знает, как заставить 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");
        // Without this message is lost.
        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;
};
...