призрачный форум

www.prizrak.ws

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » www.prizrak.ws » Программирование » Простейший IRC-клиент на Delphi >>средствами INDY.


Простейший IRC-клиент на Delphi >>средствами INDY.

Сообщений 1 страница 6 из 6

1

Целью данной статьи было освещение возможностей среды разработки приложений Borland Delphi в создании клиента IRC-чата, при использовании INDY-компонента idIRC.  А также приведение примера такого, уже созданного автором клиента, с наличием всех базовых возможностей IRC. К статье прилагается прокомментированный исходный код и скомпилированное приложение (СКАЧАТЬ ЗДЕСЬ).

Статья рассчитана на читателей, умеющих создавать на Delphi простейшие приложения, хорошо знакомых с синтаксисом среды. Некоторые термины, применяемые здесь:
INDY – Internet Dyrect, набор компонентов для Delphi, ориентированный преимущественно на работу с сетевыми функциями.
idIRC – INDY компонент для клиентской работы в чате IRC, полностью обеспечивающий весь функционал IRC.

Поставленная для рассмотрения задача. ПО «Simple IRC Client» (далее sIRC) должно иметь следующие возможности: возможность задать ник, второй ник, имя пользователя и пароль (для авторизованного входа); возможность соединения с любым выбранным IRC-сервером, возможность входа на указанный IRC-канал и возможность передавать туда сообщения (простые, NOTICE, ACTION); получение списка пользователей; приём всех сообщений (как пользовательских, так и сервисных).

Создание основы приложения: форм и их элементов.Начнём процесс решения данной задачи с определения количества необходимых форм, исходя из предполагаемых пользовательских действий. Очевидно, что будет базовая главная форма с окном сообщений (классический вариант). Должна быть ещё: форма настроек пользователя, форма входа на сервер и форма входа на канал. Итого:

https://cb10.nm.ru/shema1_str_SIRC.gif

Форма SIRC содержит меню (Файл: Подключиться, Войти на канал, Выйти из канала, Отключиться, Настройки, Выход), многострочное поле типа Memo, ListBox (для вывода списка пользователей) и Edit для ввода текста. Также имеются кнопки для сообщений типа NOTICE и ACTION. И на форме лежит компонент idIRC.
Form1 имеет 5 полей ввода (для: ник, ник2, реальное имя, имя пользователя, пароль) и две кнопки.
Form2 – с двумя полями ввода (сервер и порт) и кнопкой.
Form3 – одно поле ввода для задания имени канала и кнопка.

Программирование приложения: связь элементов форм, работа с idIRC.
Ход работы приложения: запуск, задание настроек пользователя (Form1), подключение к серверу (Form2) с данными из Form1. При удачном подключении – вывод сообщения об этом. Далее ожидание ответа сервера в виде информационных сообщений. Вход на канал, задаваемый в Form3. При удачном входе – получение списка пользователей на канале и внесение их в ListBox на форме SIRC. Постоянное ожидание и приём обычных сообщений, а также: приём сообщений о изменении статуса пользователей, о кике и о выходе из канала или чата, приём пинг-понг, приём сообщений типа action (/me) и notice. При вводе текста в поле ввода на форме SIRC его отправка по нажатию на ввод, как обычного текста с одновременным добавлением в своё окно. При клике правой кнопкой мыши по пользователю в ListBox – попытка кика.
Для того, чтобы всё это работало, отследим следующие события idIRC:

Код:
   1.  procedure IdIRC1System(Sender: TObject; AUser: TIdIRCUser;
      ACmdCode: Integer; ACommand, AContent: String);
   2.  procedure IdIRC1Message(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; Content: String);
   3.  procedure IdIRC1PingPong(Sender: TObject);
   4.  procedure IdIRC1Connected(Sender: TObject);
   5.  procedure IdIRC1Kick(Sender: TObject; AUser, AVictim: TIdIRCUser;
      AChannel: TIdIRCChannel);
   6.  procedure IdIRC1Kicked(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel);
   7.  procedure IdIRC1NickChange(Sender: TObject; AUser: TIdIRCUser;
      ANewNick: String);
   8.  procedure IdIRC1Join(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel);
   9.  procedure IdIRC1Part(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel);
   10.  procedure IdIRC1Deop(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; ATarget: TIdIRCUser);
   11.  procedure IdIRC1Devoice(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; ATarget: TIdIRCUser);
   12.  procedure IdIRC1Voice(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; ATarget: TIdIRCUser);
   13.  procedure IdIRC1Op(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; ATarget: TIdIRCUser);
   14.  procedure IdIRC1Quit(Sender: TObject; AUser: TIdIRCUser);
   15.  procedure IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
      AContent: String; var Suppress: Boolean);
   16.  procedure IdIRC1Action(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; Content: String);
   17.  procedure IdIRC1Notice(Sender: TObject; AUser: TIdIRCUser;
      AChannel: TIdIRCChannel; Content: String);

1. приём системных сообщений;
2. приём сообщения от пользователя;
3. приём сообщения «пинг-понг»;
4. событие успеха соединения с сервером;
5. приём сообщения о кике юзера юзером;
6. если кикнули текущего пользователя;
7. приём сообщения о изменении ника;
8. сообщение о входе пользователя;
9. сообщение о выходе пользователя;
10. если сняли статус оператора с пользователя;
11. если сняли статус войса с пользователя;
12. сообщение о даче войса пользователю;
13. сообщение о даче статуса оператора пользователю;
14. приём сообщения о выходе из IRC;
15. приём любого сообщения (т.е. всех);
16. приём сообщения типа «action»;
17. приём сообщения типа «notice».

Все настройки из Form1 хранятся в реестре, за исключением пароля. При нажатии на элементы меню меняется их статус (включены/выключены). Для подключения к серверу используется процедура IdIRC1.Connect с предварительно заданными значениями информации пользователя, сервера и его порта. Для входа на канал используется процедура IdIRC1.Join(‘имя канала’). Соответственно выход из канала: idIRC1.Part(‘имя канала’, ‘текст') и отключение от сервера - idIRC1.Disconnect. Список пользователей следует получать при входе на канал в iDiRC1.Users, а далее обрабатывать самостоятельно входы/выходы на канал, меняя этот список (сам он не изменяется при действиях, заполняясь лишь единократно). При выходе список пользователей очищается процедурой iDiRC1.Users.Clear. Отправка сообщения notice: idirc1.Notice(‘канал’,’текст’). Отправка сообщения action: idirc1.Action (‘канал’,’текст’). Отправка команды кика: idIRC1.Kick (‘канал’,’юзер’,'причина').

Заключение.
При работе над ПО sIRC использовалась среда разработки Дельфи 7.0. Для придания sIRC завершённого вида использовался редактор ресурсов Restorator 3.51, упаковщик исполняемых файлов UPX 1.95. Весь код данного ПО, кроме автокода модулей Дельфи, был написан автором.

Данная статья и ПО были созданы в учебных целях. ПО предложено только для отражения написанного в статье и его использование в качестве клиента реально неактуально. Его и исходные коды можно использовать абсолютно свободно, не забывая лишь про автора. Статью можно дополнять, переопубликовывать, ссылаясь на первоисточник, при этом критика желательна и ожидаема. Возможно продолжение данной тематики в виде новых статей по: использованию idIRC в создании IRC-бота и IRC-флудера.

Подпись автора

Я Хранитель Свеч на границе Тьмы Свет ковал мой меч для своей войны…


www.prizrak.ws Аниме Форум - для общения любителей аниме (японской анимации), манги и хентая. Новости, статьи по темам: безопасность, хакерство, программы. Игры и софт для WinOS, PocketPC, Linux/Unix и др. Архив игр, фильмов DVD, музыки mp3 и программного обеспечения. Теги: скачать anime, скачать мангу, скачать хентай, скачать яой, скачать юри, скачать аниме обои картинки, скачать музыку mp3, скачать фильмы dvd, скачать софт, скачать программы, скачать игры ^__^

0

2

Огромная Благодарность, Уважуха и Низкий Поклон за Весьма Полезный Пример... Искренне Благодарю...

0

3

пасибо :cool:

0

4

А какнидь без indy можно обойтись ?

Подпись автора

kill yourself - save the planet

0

5

перезалейте пожалуйста ссылку, не работает :(

0

6

Ссылку поправил.

Подпись автора

Безвыходных ситуаций не бывает! Всегда есть 3 выхода: смириться, не смириться и сойти с ума!
"Абсолютно безумно, бессмысленно, нелогично, но правильно!"
Много зла в умелых руках могут превратится в намного лучшее, чем много добра в неумелых руках....

спойлер

Член клуба Позити ффф
Строгий инквизитор

+1


Вы здесь » www.prizrak.ws » Программирование » Простейший IRC-клиент на Delphi >>средствами INDY.