Дневник разработки ICQ сервиса. Часть II
Это было весело.
На данный момент реализовала:
- Поиск по UIN
- Обмен сообщениями переведён на кафку
- Обмен статусами аналогично - теперь рассылаются через кафку
- Базовые ICQ статусы (без X Statuses)
- Полноценная авторизация и регистрация
- Базовая реализация пользователей и элементов контакт-листов, группы
С чем в данный момент имеются проблемы:
- Добавление контактов через клиент (qip): ошибка переполнения группы (странная ошибка, лимиты отдаю верные, но будто часть лимитов игнорируется), также имеется ошибка при добавлении через кнопку в пустом контакт листе: выполните подключение для продолжения (подключение присутствует, keep-alive от клиента приходят)
- Оказывается, клиент не способен принимать сообщения от UIN короче 5 знаков (несколько дней думала почему сообщения не от всех контактов доходят сообщения)
- Неясность контракта рассылки X Statuses
С поиском было отдельное веселье с хешированием: хеш с клиента и серверный не сходились, долго думала почему, оказалось что длина auth_key (он же md5 auth_key) не dword, как описано в доке, а word, а потому клиентами читались первые 2 байта, в них были нули и хеш генерился с auth_key нулевой длины.
Выснилось это благодаря исходникам libpurple (ещё раз огромная благодарность).
Контракт поиска контактов вовсе отличался от того, что использует qip, потому пришлось руками смотреть дампы клиента чтобы понять, какие байты за какие параметры поиска отвечают.
С добавлением контактов так и не разобралась, пока временным решением сделала бота, которому можно написать команду на добавление контакта в контакт лист и после переподключения он подтянется.
Пока такой план:
- Разобраться с загрузкой по памяти - закрытие сессий обрабатываю, но показатели используемой рамы всё равно смущают, надо профилировать
- Допилить добавление/изменение/удаление контактов
- Допилить X Statuses
- Реализовать message ack вместе с хранением сообщений для досылки offline контакту
- Вынести авторизационный сервис в отдельный
- Вынести обработчик сообщений + реализовать доставку до различных нод
- Накинуть SSL на сокет
- Contact list checkout починить, сейчас каждый раз отдаём весь список заново, надо прикрутить возврат ответа что клиентский список актуален
- Редактирование и возврат личных данных
- Подтюнить работу с БД (сейчас сделано максимально неоптимально чисто для тестирования функционала
Вероятно пока я возьму небольшой перерыв и переключусь на другие занятия, давно музыкой не занималась, английским, а в этот проект я слишком залипаю, нужно знать меру 😃