Как организовать передачу информации по сети в приложении Qt?

Доброго времени суток.
Возникло несколько вопросов по архитектуре приложений, работающих по сети.
Предположим, есть задача.
Есть базовый класс комната, от него наследуются классы Спальня и Гостинная. Есть базовый класс Книга, и под классы Записная книга, художественая книга и т.д.
Есть класс Агент, который за всем этим делом следит, перемещает и создает.
Суть вот в чем, к серверу поступает информация от других источников, о некоем перемещении объектов где-либо.
При запуске сервера Агент создает нужные комнаты и ждет информации о книгах. Пришла в комнату новая книга, агент создал её, и положил в комнату. Переместилась книга - агент достал из одной комнаты и положил в другую. У агента есть доступ до всех методов как книг так и комнат. Для отображения всей этой информации, создал небольшое окошко, где разместил в QListWidget список комнат и QListWidget для книг в выбранной комнате. В этот класс-окно передаю указатель агента, и внутри класса уже вызываю нужные мне методы для отображения информации.
Здесь все понятно, и все работает.

А теперь мне необходимо передавать всю эту информацию в клиент.
Клиент по сути состоит из одного окна, как у сервера, где и должно отображаться вся информация с комнатами и книгами.
Вот тут и вопросы, как лучше организовать такую задачу?
Вариантов я вижу несколько.
1. У клиента создавать такие же классы комнат и книг. И как только инфа пришла к серверу, агент её обработал, и практически в голом виде отдал клиенту, тот уже сам обрабатывает. Думаю вариант мягко скажем не очень, ибо пропадает надобность в сервере как таковом.
2. Сериализация. Не могу ничего сказать, с сериализацией еще не знаком, поэтому прошу совета, можно ли через нее обрабатывать все информацию?
3. Передача различный мапов. Изменилось на сервере что либо, создали новый мап - передали клиенту. Все хорошо, но есть маленький нюанс. У самих комнат и книг, помимо названия и текущих значений есть еще информация, которую не плохо было бы смотреть. У комнат - тип комнат. у книг - тип книг и автор если есть и прочее.
В сервере, благодаря агенту, я просто выбирал комнату, и через агента вытаскивал информацию, а тут так не получится, придется как минимум городить QList> и так далее.
Вот и получается, что пока не могу прийти к решению задача. Прошу вашей помощи.

Заранее всем спасибо.
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Наиболее простой вариант - протокол из одного запроса от клиента и двух вариантов ответов от сервера.
Запрос:
Дать состояние всего.
Ответы
-нет изменений
-новое состояние книг - комнат.

На этапе выработки протокола нет смысла думать о деталях реализации (QList - не QList), это нужно делать, собрав хотя бы каркас.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы