Так, к серверу мы подключаемся, но к сожалению мы в данный момент не можем :
1. Узнать подключились мы или нет ?
2. Корректно завершить работу, ибо один единственный поток занимает client->connect();
Поможет нам в этом класс, которого оповещает gloox::Client об подключении/отключении. Зовется он ConnectionListener. Задумка библиотеки такова, что этот класс абстрактен, поэтому нам просто необходимо унаследовать от него свой класс и переназначить все виртуальные методы. А их у него всего три :
virtual void onConnect();
virtual void onDisconnect( gloox::ConnectionError e );
virtual bool onTLSConnect( const gloox::CertInfo& );
Сейчас исправим нашего ботика таким образом, чтобы :
1. Он подключался
2. При удачно соединении сообщал нам об этом.
3. При неудачи срал кирпичами сообщал нам об этом.
4. После подключения ждал 5 секунд и отключался.
Цели ясны, приступим исправлять исходник, для начала подключим следующие заголовочные файлы:
#include <gloox/client.h>
#include <gloox/connectionlistener.h>
С первыми двумя всё ясно, ну а третий будет использоваться для обьявления функции unsigned int sleep( unsigned int sec );.
Продолжаем, исправим немного наш класс, унаследуем его от gloox::ConnectionListener и добавим те самые три виртуальных метода:
class Bot : public gloox::ConnectionListener{
public:
Bot();
~Bot();
void Connect();
protected:
virtual void onConnect();
virtual void onDisconnect( gloox::ConnectionError e );
virtual bool onTLSConnect( const gloox::CertInfo& );
gloox::Client *client;
};
Теперь, добавим в конструктор класса Bot следующую строчку, суть которой я думаю яснее ясного :
client->registerConnectionListener( this );
А дальше по новым методам :
void onConnect(){
// сообщили, об удачном соединении
std::cout << "Соеденились\n";
// подождали
sleep( 5 );
// отключились
client->disconnect();
}
void Bot::onDisconnect( gloox::ConnectionError e ){
// сообщаем о дисконнекте
std::cout << "Дисконнектn EROOR : " << e << 'n';
}
bool Bot::onTLSConnect( const gloox::CertInfo& ){
// оно нам не нужно для порабощения голактики
}
Ну вот в общем-то и всё.