Skip to content
This repository has been archived by the owner on Dec 27, 2018. It is now read-only.

kirpichik/Chat

Repository files navigation

Simple Chat

Простой клиент-серверный чат на Java.

Протокол

Общие принципы

Протокол поддерживает два режима работы:

Java Object Streams

Сериализованные в байтовые потоки объекты JVM. При использовании данного типа объекты сериализуются и записываются напрямую в поток, где позже считываются принимающей стороной.

JSON

Сериализованные в JSON объекты пакеты. При использовании данного типа объекты сериализуются в JSON формат в виде:

{
    "type": "%Название пакета%",
    "value": { %Сериализованное представление объекта% }
}

Типы пакетов

Connect (Client - Server)

С отправки серверу этого пакета начинается общение клиента и сервера.

Уведомляет сервер о версии протокола, поддерживаемой клиентом, и о методе общения пакетами, который предпочитает клиент.

Если сервер не поддерживает предлагаемый протокол и метод общения, будет возвращено FatalError и соединение будет закрыто.

Данный пакет всегда отправляется в сериализованном JSON виде.

ConnectionAccept (Server - Client)

Уведомляет клиент о том, что сервер принимает условия клиента и готов установить с ним соединение.

Данный пакет всегда отправляется в сериализованном JSON виде.

Login (Client - Server)

Запрашивает у сервера уникальный ключ для доступа к чату, отправляя ему предпочитаемое имя пользователя. Валидными считаются имена, соответствующие:

[\\-_0-9a-zA-Z]+

и не длиннее 20 символов.

Если имя уже занято, либо оно не соответствует правилам, будет возвращено FatalError и соединение будет закрыто.

SuccessLogin (Server - Client)

После успешного подключения клиента к чату, возвращает уникальный ключ сессии клиента.

FatalError (All)

Уведомляет цель о произошедшей фатальной ошибке. Сразу после отправки данного пакета, отправитель закрывает соединение.

GetUsersList (Client - Server)

Запрашивает список имен текущих пользователей в чате. Для запроса требуется уникальный ключ сессии.

Если уникальный ключ сессии не валиден, будет возвращено FatalError и соединение будет закрыто.

UsersList (Server - Client)

Возвращает список имен текущих пользователей в чате.

UsersListUpdate (Server - Client)

Уведомляет клиента об изменении списка онлайн пользоватлей. Содержит присоединившегося или отключившегося участника чата.

SendMessage (Client - Server)

Отправляет сообщение в чат. Для отправки требуется уникальный ключ сессии.

Если уникальный ключ сессии не валиден, будет возвращено FatalError и соединение будет закрыто.

NewMessage (Server - Client)

Уведомляет клиент о новом сообщении в чате.

Disconnect (Client - Server)

Уведомляет сервер о том, что клиент хочет завершить сессию и закрыть соединение. Для отправки требуется уникальный ключ сессии.

Если уникальный ключ сессии не валиден, будет возвращено FatalError и соединение будет закрыто.

Goodbye (Server - Client)

Уведомляет клиент о том, что его ключ сессии установлен как невалидный и закрывает соединение.