15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Библиотека C++ классов для IRC


Автор: Adi Degani.



Нажмите сюда для увеличения картинки

Компилятор: VC6, Платформа: WIN32

Описание

Пример демонстрирует библиотеку C++ классов, которая поможет добавить в Ваше приложение собственный клиент IRC (наподобие любимого mIRC). Данная библиотека поддерживает следующие протоколы:

Возможности

  1. Создание TCP/IP соединения с удалённым сервером IRC.
  2. Сервер идентификации (необязательно. см. CIrcSessionInfo).
  3. Разбор сообщений IRC.
  4. Эффективный механизм маппинга команд IRC на пользовательские функции.
  5. Демонстрационный проект написан на MFC, напротив, библиотека написана с использованием только C++, STL и WIN32 API.

Классы

CIrcMessage (irc.h,irc.cpp) - Разбор потоковых команд IRC на индивидуальные компоненты.
IIrcSessionMonitor (irc.h,irc.cpp) - Основной интерфейс для мониторинга сессии IRC.
CIrcSession (irc.h,irc.cpp) - Менеджер сессии IRC. Создаёт соединение с сервером IRC во вторичном потоке, а так же передаёт разобранные сообщения IRC зарегистрированным мониторам.
CIrcSessionInfo (irc.h,irc.cpp) - хранитель спецификации IRC соединения.
CIrcMonitor (irc.h,irc.cpp) - Основной объект монитора сессии (наследованный от IIrcSessionMonitor). Этот класс включает в себя механизм, который мапит команды IRC в пользовательские функции, тоже самое, что MFC делает с сообщениями Windows(tm). Все уведомления расположены вне контекста потока соединения(!)
CIrcDefaultMonitor (irc.h,irc.cpp) - Обеспечивает некоторые автоматические ответы для сервера IRC. (Наследован от CIrcMonitor).
CIrcIdentServer (irc.h,irc.cpp) - Сервер идентификации. Данный класс используется классом CIrcSession.

Макросы

DEFINE_IRC_MAP() (irc.h) - Должен быть объявлен внутри Вашего класса, наследованного от CIrcMonitor в файле .H.
DECLARE_IRC_MAP(this_class_name, base_class_name) (irc.h) - Должны быть объявлены в Вашем, наследованном от CIrcMonitor классе в файле .CPP.
IRC_MAP_ENTRY(class_name, command, member) (irc.h) - Добавляет ячейки наподобие конструктора Вашего класса для каждой команды IRC, которые Вы хотите обрабатывать.

Вспомогательные классы

WinsockInit (socket.h,socket.cpp) - Обеспечивает автоматическую инициализацию winsock. Весь код вычисления адресов содержится в этом классе.
Socket (socket.h,socket.cpp) - класс для сокетов WIN32.
InetAddr (socket.h,socket.cpp) - Вспомогательный класс для интернет адресов.
CCrossThreadsMessagingDevice (CrossThreadsMessagingDevice.h,CrossThreadsMessagingDevice.cpp) - Используются в CIrcMonitor для постинга уведомлений IRC в поток, в котором был создан монитор.

Как использовать

  1. Библиотека поставляется только в виде исходных кодов (извиняйте, что нет готовой DLL, но думаю, что немного поднапрягшись, Вы сделаете её), поэтому Вы должны добавить все эти исходники в Ваш проект.
  2. Где-нибудь внутри Вашего проекта создайте экземпляр CIrcSession. Никакого наследования не требуется. Данный объект - это фактически соединение с удалённым сервером IRC.
  3. Для приёма уведомлений от сервера, Вам надо будет создать объект 'monitor'. Этот монитор может быть любым классом, унаследованным от IIrcSessionMonitor, напрямую или косвенно. Лично я рекомендую наследовать его от CIrcDefaultMonitor, так как он обеспечивает некоторые автоматические ответы на запросы IRC сервера. (Демонстрационный проект, представленный здесь, является многодокументным MFC проектом, поэтому объект документа создаётся как монитор).
  4. При необходимости, добавьте функции обработчиком уведомлений в объект монитора.

Downloads

Скачать демонстрационный проект - 34 Kb
Скачать исходник - 9 Kb

Что не сделано

Вещи, которые я не включил в данную версию :

  1. Соединения DCC (как символьная так и файловая передача).
  2. Версия DLL.
  3. Поддержку Unicode.

Ссылки на стандарты

  1. RFC #1459 - IRC Protocol
  2. RFC #2812 - IRC Client
  3. RFC #1413 - Identification Protocol
  4. RFC #2813 - IRC Server