1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/liudegui-protobuf_chat

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

#protobuf_chat

Скриншот

См. мои принципы проектирования сообщений Protobuf и предоставленный демо.

1. Описание функциональности

Программа Protobuf_chat представляет собой простой чат, клиентская часть которого написана на C#, а серверная — на двух версиях (C++ и C#), использующих протокол protobuf.

Для части на C++ используется библиотека Net от poco.

Поддерживает вход/выход, отправку сообщений, пинг и другие базовые функции.

2. Объяснение файла protocol.proto

Используются enum в protobuf для определения номеров сообщений, то есть типов сообщений.

enum MSG
{
    LOGIN_REQUEST        = 10001;
    LOGIN_RESPONSE       = 10002;
    LOGOUT_REQUEST       = 10003;
    LOGOUT_RESPONSE      = 10004;
    KEEPALIVE_REQUEST    = 10005;
    KEEPALIVE_RESPONSE   = 10006;

    GET_FRIENDS_REQUEST  = 10007;
    GET_FRIENDS_RESPONSE = 10008;
    SEND_MESSAGE_REQUEST = 10009;
    SEND_MESSAGE_RESPONSE= 10010;

    FRIEND_NOTIFICATION   = 20001;
    MESSAGE_NOTIFICATION  = 20002;
    WELCOME_NOTIFICATION  = 20003;
}

Для каждого сообщения с телом определяется соответствующее сообщение protobuf. Например, для LOGIN_REQUEST существует сообщение LoginRequest.

Для каждой группы сообщений также определяются сообщения. Все запросы содержатся в сообщении Request, все ответы — в Response, а уведомления — в Notification.Ответы могут быть успешными или нет, поэтому в каждом ответе присутствуют два поля: одно указывает на успех или провал ответа, другое — описание ошибки при провале. Для множества ответов может быть указано, является ли последний ответ последним в серии. Также присутствует порядковый номер ответа.

message Response
{
    required bool result            = 1;
    required bool last_response      = 2;
    optional string error_description = 3;
}
```    необязательный LoginResponse login            = 4;
    необязательный GetFriendsResponse get_friends   = 5;
}

Наконец, определяется общее сообщение, которое объединяет Request, Response и Notification. Это позволяет использовать это общее сообщение для всех операций кодирования и декодирования.

message Сообщение 
{
    обязательный MSG msg_type     = 1;
    обязательный фиксированный32 последовательность = 2;
    необязательный фиксированный32 session_id = 3;

    необязательный Request запрос     = 4;
    необязательный Response ответ    = 5;
    необязательный Notification уведомление = 6;
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Простая программа для чата с C/S-структурой, использующая protobuf. Клиент написан на C#, сервер — на C# и C++. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/liudegui-protobuf_chat.git
git@api.gitlife.ru:oschina-mirror/liudegui-protobuf_chat.git
oschina-mirror
liudegui-protobuf_chat
liudegui-protobuf_chat
master