Делаю простой мессенджер на сокетах, TCP/IP. Есть клиент и сервер, дошёл до этапа обработки запросов и задумался над тем, каким образом наиболее труЪшным ооп путём организовать приём и обработку пакетов. Пакеты могут быть разные, черновой вариант такой:
enum RequestType {
Register,
Authenticate,
Message, // текстовое сообщение
Attachment, // файл
};
Пока идея такая:
- Все пакеты первым полем должны содержать
int type - Все пакеты кроме
Attachmentвторым полем будут иметь полеunsigned size, а далее JSON рамером вsizeс необходимыми полями -
Attachment, в отличие от остальных, не JSON, у него три поля: комуrecipient, имя файлаchar name[32]и его размерunsigned size, далее идут данные
Приём пакетов делаю так:
void Client::start()
{
char *buffer;
unsigned long bytes;
m_socket->setBlocking(false); // неблокирующий режим
while (true) {
bytes = m_socket->waitForRead();
if (bytes == 0) {
// Disconnected
delete m_socket;
return;
}
// Вот здесь нужно организовать приём и формирование пакетов
buffer = new char[bytes];
m_socket->recv(&buffer[0], bytes);
delete []buffer;
}
}
Конечно можно решить задачу «в лоб», но мне интересно:
- Как наиболее правильно с точки зрения ооп сделать задуманное? Что-то мне подсказывает для каждого пакета создать класс, которому передавать
bufferиbytes, который будет формировать пакет? - Какие наиболее подходящие паттерны для подобных задач?
- Где и как лучше всего осуществлять проверку аутентифицирован ли пользователь, или нет?
Может у кого есть хорошие примеры. Thanks in advance, так сказатб.





