Я не знаю, плохой это совет или нет, но я обычно делаю для своих сетевых приложений создание объекта Message, содержащего строку TAG и строку CONTENT.Часть CONTENT обычно представляет собой строку JSON, а само сообщение также отправляется на сервер или с него в виде строки json.
Когда сервер или клиент получает сообщение, он анализирует json в объект Message.Затем вы можете проверить часть сообщения TAG, чтобы увидеть, какой тип содержимого содержится в части сообщения CONTENT, и решить, что с ним делать.
Например, если TAG == "LOGIN", тоСОДЕРЖАНИЕ может быть данными для входа в систему или аналогичными.И когда TAG == "MESSAGE", тогда CONTENT, возможно, будет строкой json, представляющей ваши параметры, например, кто является получателем / получателями и каково содержание сообщения и т. Д.Затем вы делаете шифрование и дешифрование строк.Если это глупый способ сделать это, пожалуйста, сообщите мне об этом в комментарии, чтобы я мог узнать:)
Я также обычно реализую шаблон проектирования состояний с обеих сторон, но, по крайней мере, на стороне сервера.Например, сервер запускается в состоянии WaitingForLogin.Когда клиент входит в систему, он переключается в другое состояние, которое, например, слушает только файлы и сообщения чата.Таким образом, я обнаружил, что управлять им немного легче.