Описание протоколов работы
           DMconnect           


  1998 г                 РСД  

        Основы DMconnect

        DMconnect - система обмена мгновенными сообщениями в реальном времени по системе TCP. DMconnect работает в кодировке UTF-8 и поддерживает все символы unicode (хотя их использование и не рекомендуется). DMconnect требует постоянного подключения к серверу (обслуживающему компьютеру) для осуществления общения, соответственно, требует и нахождение пользователя on-line в Интернет. Для общения, пользователи должны сначала пройти регистрацию своей учётной записи на сервере, а затем, использовав свои регистрационные (персональные) данные, войти в состояния on-line. Чтобы начать общение, пользователь после этого выбирает "подсервер" - изолированный участок для общения. DMconnect не хранит на своей стороне историю всех сообщений.

        Принцип работы

        Принцип работы конкретно общения между пользователями на подсервере (поддерживается, только если пользователи находятся на одном подсервере одновременно) очень прост. Сервер рассылает всем подключенным клиентам (пользователям) сообщение вида:

ИМЯ ВАШЕЙ УЧЕТНОЙ ЗАПИСИ: ВАШЕ СООБЩЕНИЕ
        Наглядно видно, что ваше имя и ваше сообщение разделено конструкцией "", но об этом мы говорим позже. Также отметим, что регистрация и использование учетных записей с символами пробела ( ) - не поддерживается сервером, поэтому таких пользователей и нет.

        Основы приватных (личных) сообщений конкретному пользователю

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

(Private) ИМЯ ВАШЕЙ УЧЕТНОЙ ЗАПИСИ: ВАШЕ СООБЩЕНИЕ
        А вы сами:
Private message sent to xxx.
        Где xxx - это имя пользователя, которому вы доставляли свое сообщение, разумеется, может быть разным.

        Подключение к серверу DMconnect по его протоколу

        Для подключения к своему серверу клиентов, DMconnect использует стандарт AF_INET - IPv4-адреса (цифровые IP-адреса, если быть проще), а также, для указания постоянного соединения online - SOCK_STREAM, работающий по TCP. Собственно, на TCP весь DMconnect и построен. Для поддержания подключения, DMconnect не использует (на момент протокола v3) каких-либо дополнительных механизмов, поэтому подключение зависит от конечного пользователя на сервере. DMconnect полностью закрывает соеиднение, если пользователь отключился сам (защитный механизм для обхода множества последующих ошибок).

        Вход в учетную запись и регистрация ее на сервере

        Для регистрации и входа в учетную запись на сервере DMconnect, используются специальные пакеты, которые клиент должен доставить серверу, а позже - получить от него ответ. Рассмотрим подробно:

        Пакет регистрации в online - для входа в учетную запись (уже существующую), клиент должен использовать пакет входа - в HEX: 6C 6F 67 69 6E / \x6c\x6f\x67\x69\x6e.
        Пакет регистрации учетной записи на сервере - для этого используется специальный пакет 72 65 67 69 73 74 65 72 или \x72\x65\x67\x69\x73\x74\x65\x72

        Чтобы обозначить серверу ваше сообщение, как пакет системных данных, DMconnect-клиенты (и сервер) используют 2F. Обратите внимание, что этот байт используется не только при авторизации или регистрации учетной записи, а при всех выполняемых командах.

        После успешной авторизации

        Здесь расписан этап, который следует уже успешно прошедшей авторизации пользователя в DMconnect. Пользователь должен выбрать подсервер, на котором он будет общаться со всеми его участниками, также поддерживается создание своего собственного подсервера. Рассмотрим подробно:

        Пакет входа на подсервер - используется пакет 6A 6F 69 6E 5F 73 65 72 76 65 72, либо же \x6a\x6f\x69\x6e\x5f\x73\x65\x72\x76\x65\x72, что подключает пользователя к подсерверу.
        Пакет создания собственного подсервера - используются 63 72 65 61 74 65 5F 73 65 72 76 65 72 и \x63\x72\x65\x61\x74\x65\x5f\x73\x65\x72\x76\x65\x72. Для того, чтобы войти на созданный подсервер, используется пакет выше.

        Доступные пакеты для отправки

        Ниже приведена таблица с доступными пакетами для отправки в момент, когда пользователь находится на одном из подсерверов:

Начинающий HEX
Пакет данных
2F
63 72 65 61 74 65 5F 73 65 72 76 65 72 / \x63\x72\x65\x61\x74\x65\x5f\x73\x65\x72\x76\x65\x72
CREATE SERVER - создание нового подсервера, указатели - NAME, разделяется конструкцией 20 (\x20)
2F
6C 69 73 74 5F 73 65 72 76 65 72 73 / \x6c\x69\x73\x74\x5f\x73\x65\x72\x76\x65\x72\x73
LIST SERVERS - получение списка подсерверов, указатели - отсутствуют.
2F
6D 65 6D 62 65 72 73 / \x6d\x65\x6d\x62\x65\x72\x73
MEMBERS - получение списка участников подсервера, указатели - отсутствуют.
2F
70 6D / \x70\x6d
PM - отправка личного сообщения пользователю, указатели - USERNAME; MSG, разделяется конструкцией 20 (/x20, также может присутствовать в указателе MSG).
2F
61 63 74 / \x61\x63\x74
ACT - указание пользователем временного статуса, указатели - ACTION, разделяется конструкцией 20 (/x20).
2F
68 65 6C 70 / \x68\x65\x6c\x70
HELP - вывод краткой справки, указатели - отсутствуют.

        Как видите, начинающий байт у всех выполняемых пакетов - 2F, теперь рассмотрим выполняемые пакеты при авторизации:

Начинающий HEX
Пакет данных
2F
6C 6F 67 69 6E / \x6c\x6f\x67\x69\x6e
LOGIN - вход в существующую учетную запись, указатели - USERNAME; PASSWORD, разделяется конструкцией 20 (\x20)
2F
72 65 67 69 73 74 65 72 / \x72\x65\x67\x69\x73\x74\x65\x72
REGISTER - регистрация новой учетной записи на сервере, указатели - USERNAME; PASSWORD, разделяется конструкцией 20 (\x20).

        После того, как пользователь прошел авторизацию, как я уже говорил, ему необходимо выбрать подсервер, пакет:

Начинающий HEX
Пакет данных
2F
6A 6F 69 6E 5F 73 65 72 76 65 72 / \x6a\x6f\x69\x6e\x5f\x73\x65\x72\x76\x65\x72
JOIN_SERVER - вход в подсервер, указатели - NAME, разделяется конструкцией 20 (\x20)

        Заключение

        Большое спасибо за внимание! В этом документе написано про основы работы с протоколом DMconnect, также этот документ можно свободно распространять.