#protobuf_chat
См. мои принципы проектирования сообщений Protobuf и предоставленный демо.
Программа Protobuf_chat
представляет собой простой чат, клиентская часть которого написана на C#, а серверная — на двух версиях (C++ и C#), использующих протокол protobuf.
Для части на C++ используется библиотека Net от poco.
Поддерживает вход/выход, отправку сообщений, пинг и другие базовые функции.
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 )