ICQ2000 сделай сам 2
|
Из диалога в аське:
- Котенка комy? Качественный. Почти не юзаный, 2 месяца всего. Укомплектованный. Есть шеpсть (веселенькой чеpно-белой окpаски), лапы (4шт), yсы (несчитанно) и ypчальник (встpоенный). Сабж обладает фyнкцией мочеиспyскания в тyалет, лежания на телевизоpе свесив хвост на экpан и неyемной жизнеpадостностью. Фyнкция питания отлажена пpосто на диво: с yдовольствием жpет даже хлеб и макаpоны. И все это счастье я отдаю пpосто так, для хоpоших людей не жалко!
- Бpандовый? Глюков нет? Апгpейдится? Манибек? Гаpантия? Мышь опознает?
|
Делфи-проект nICQ в начале будет состоять из 3-х модулей: Types, Packet, Main.
- В модуле Types находятся константы и объявлены некоторые записи.
- В модуле Packet - процедуры и функции для записи/чтения FLAP-пакетов.(Большинство процедур из этого модуля просто адаптированы из других проектов ICQ).
- Название модуля Main говорит само за себя.
Исходные коды проекта находятся здесь.
До того, как начать тестирование, вам следует ввести свой UIN, password, NickName. Внесите эти данные в файл nICQ.ini:
[User]
Uin=199222333
Nick=My Nick
Password=mypass
|
... и можно запускать. Список контактов нам пока не нужен. Он появится позже. А сейчас будет вполне достаточно, если список контактов будет состоять только из вашего собственного UINа. Жмем на единственную кнопку, а в отладочном окне будет отображаться протокол работы. При выборе одного из пунктов Popup-меню, вызывается процедура icq_Login. Что в ней? Смотрим:
procedure TForm1.icq_Login(Status : longint);
begin
// определяем свой IP-адрес
Local_IP := Get_my_IP;
// преобразуем его в DIM_IP
StrToIP(Local_IP,DIM_IP);
// Запоминаем, какой будет наш статус
ICQStatus := Status;
// если ClientSocket открыт, то закроем его
if CLI.Active then
CLI.Close;
// установим флажок isAuth,
// это значит, что сначала мы коннектимся к серверу
// авторизации. UIN и пароль передаются именно ему.
isAuth := true;
// устанавливаем флажок isHDR,
// он говорит нам о том, что, самые первые данные ,
// из ClientSocket следует интерпретировать как
// FLAP-заголовок
isHDR := true;
// заполняем поля Host и Port в ClintSocket,
// адрес сервера авторизации: 'login.icq.com'
// и его порт: 5190
CLI.Address :='';
CLI.Host := 'login.icq.com';
CLI.Port := 5190;
// не забываем и про TMemo
M(Memo,'>>>>>>>>>> login.icq.com:5190 <<<<<<<<<<<');
// ... и собственно CONNECT
CLI.Open;
end;
|
(А вот и подходящий момент, чтобы вспомнить о вашем подключении к интернету. Проблемы с получением CONNECTa могут возникнуть, если вы выходите в интернет из LAN через PROXY-сервер. Все зависит от того, как он настроен. Если он предоставляет выход в интернет только для основных сервисов (http,ftp,smtp,pop), то тут уж извините. А если на нем присутствует нормальный маскарадинг, то все будет OK).
Итак, что же дальше..? Желанный CONNECT должен наступить немного раньше конца света :) Мы подсоединились к серверу авторизации и он первым выдаст нам пакет данных. Что делать? Как принять? Куда его засунуть? Об этом мой расказ на следующей странице.
Переворачивайте...
|