Приходит на ICQ сообщение:
- Do you wanna chat?
- I'm busy.
- Hello, busy. I'm Abraham!...
Урок №2
Передача сообщений
Уверен, что у вас не возникло никаких проблем со скачиванием, с компиляцией, с "конфигурированием" первого проекта. Если вы вписывали в файл nICQ.ini свой пароль, то коннект был обеспечен.
Урок №2 содержит два новых модуля. SendMess и MessFrom. Каждый из них имеет свое окно. Это - передача и прием сообщений.
Чтобы полноценно передавать сообщения, необходим и такой объект в основном окне, как список контактов. Объект TTreeView напрашивается сам. Проще некуда. Тем более каждый элемент в нем может содержать указатель на связанные данные. TTreeView меня полностью устроил.
Сам список контактов будет хранится в файле <ваш_uin>.dat
Т.к. сейчас рассматриваетя только урок №2, то и заполняться этот файл будет пока только вручную. При его заполнении вполне можно пренебречь процедурой авторизации.
[ContactList]
199111222=1st_User
199111333=2nd_User
199111444=3rd_User
345345234=Иван Иваныч
188888888=Вася Пупкин
и т.д. и т.п.
Вписывайте UINов столько, сколько нужно. Только не забудьте увеличить массив TContactList, если UINов планируете больше сотни:
type TContactList = array[0..100] of TListRecord;
И еще пару слов относительно интерфейса: те кому надоели зелененькие цветочки - могут нарисовать свои значки для контактного списка. Bitmapы прилагаются.
Теперь о том как реально передаются сообщения.
Есть два типа передаваемых сообщений: Simple Message и Advanced Message.
Если UIN (для которого предназначено сообщение) находится в оффлайне - то ему шлется Simple Message. Advanced Message посылаются тем адресатам, (кажется ) если версия аськи у них не ниже ICQ2000. Из формата Advanced Message в уроке №2 используется лишь информация о Foreground Color и Background Color (это цвета раскраски текста). Использовал бы еще что-нибудь, так там больше ничего нет такого, что можно назвать advanced.
При передаче, сообщения пакуются в SNAC(4,06).
Начнем с более простого формата - Simple Message:
FLAP
Command Start
2A
Channel ID
02
Sequence Number
34 3B
Data Field Length
00 3D
SNAC
(4, 06) - Send Message
(Simple)
Family ID
00 04
SubType ID
00 06
Flags[0]
00
Flags[1]
00
Request ID
00 AD 00
06
53 DE 53
75
Cookie
1
16 14 BB
50
Cookie 2
00 01
msg-format:Simple
Message
09
длина его
UINа
почти как
PascalStr
31 39
39 37 37 37 36 36 36
его
UIN (например:
'199777666')
TLV (2)
- сообщение
здесь
T ype
00 02
L ength
00 17
V alue
05 01 00
01 01 01 01
(unk)
???
00
0E
длина
сообщения + 4
00 00 00
00
(unk) ???
D1 EE EE E1 F9 E5 ED E8 E5
21
'Сообщение!'
TLV (6)
- пустой
T ype
00
06
L ength
00
00
Продолжим более сложным форматом - Advanced Message. А он действительно по-сложнее будет.
На следующей странице уделено внимание приему сообщений.
Создание программы ICQ 2.0 от Александра Ваги: передача сообщений в уроке 2.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.