Заработай на задачках

Так, к серверу мы подключаемся, но к сожалению мы в данный момент не можем :
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& ){ // оно нам не нужно для порабощения голактики }
Ну вот в общем-то и всё.

Написание собственного jabber бота на C++ : gloox::ConnectionListener =): 6 комментариев

  1. akset on 13.02.2011 at 15:56 пишет:

    Спасибо!! отличный урок, только одно НО, какие заголовки надо ставить у вас написано #include 3 раза но без заголовков, чего добавлять???

  2. jukovec-oo on 13.02.2011 at 17:08 пишет:

    извините, блог обрезал )
    исправил )

  3. akset on 14.02.2011 at 11:24 пишет:

    ОГРОМНОЕ спасибо, очень помогло, только начал изучать C++ и озадачился написать бота для жабы, ваш урок сильно помог, СПАСИБО ЕЩЕ РАЗ

  4. jukovec-oo on 14.02.2011 at 17:02 пишет:

    пожалуйсто :)

  5. aleksanderac on 08.02.2012 at 20:15 пишет:

    Выложили плиз исходный код или проект в целом, на какой нибудь файлообменник. рапида летитбит на любой в общем. Тоже пишу, но пока что не очень получается. Я из России, и скачать не могу, ваш хостер не дает.

  6. jukovec-oo on 01.03.2012 at 20:13 пишет:

    на github’e есть, кажись ozbot проект

Я буду очень рад комментарию!

Не переживайте, e-mail нигде не отображается. Обязательные поля помечены *

Навигация по записям