Мне первое утверждение несколько противоречит последнему утверждению.Он говорит:
У каждого сотрудника есть свой календарь с собраниями и встречами.
Что мне говорит, это потому, что у меня встреча в 10:00 утра.Понедельник не означает, что у всех тоже должна быть эта встреча, если я не приглашаю их.Таким образом, не было бы никакой причины отправлять эту информацию всем клиентам, когда они не должны ее видеть;что, кажется, последнее утверждение говорит:
Модель на сервере должна обновляться и обновляться на любом другом подключенном клиенте.
Я бы разделил вашмодели в business
(при условии, что вы поддерживаете несколько предприятий), employee (client)
, calendar
, event (meeting/appointment)
и все остальное, что имеет отношение.
Вам необходимо убедиться, что собственный календарь клиента синхронизирован сСервер, очевидно, и получить это работает в первую очередь.Затем вы захотите иметь событие, которое обрабатывается, когда Сотрудник A попросил Сотрудника B присутствовать на собрании, для чего потребуется отправить Сотруднику B приглашение для принятия или отклонения собрания, которое затем может быть обновлено на сервере, а затемреплицируется на заинтересованных клиентов.
Я бы реализовал это как модель извлечения, а не как модель push (в духе традиционных реализаций), где клиент "опрашивает" сервер каждые x
интервал, чтобы спроситьдля последней информации для их календаря.Любые сделанные ими изменения возвращаются на сервер, а затем сервер обновляет базу данных по мере необходимости.
Это означает, что вы можете счастливо синхронизировать все на сервере, а когда клиент запрашивает последнюю информацию,Сервер просто отправляет их обратно, а затем клиент обновляет их по мере необходимости.
Таким образом, сервер может обрабатывать любые проблемы синхронизации с событиями, возвращая уведомления, где возникают проблемы синхронизации.Подумайте, например: если сотрудник B принимает собрание, а затем сотрудник A отменяет собрание до синхронизации всех клиентов.Вы можете просто отправить уведомление сотруднику B, сообщив, что, не беспокоясь о том, что все клиенты находятся в одном состоянии.
Надеюсь, это поможет.
:: Редактировать (основано на редактировании вопроса) ::
Возможно, вы захотите проверить Сериализация и способы ее реализации.Я хотел бы создать объект передачи данных (DTO), который инкапсулирует данные, которые вы хотите отправить, а затем сериализует их и отправляет клиенту.Клиент десериализует данные в объект (ы), которые он должен использовать.Думайте об этом как о конверте, который сгруппирует ваши объекты и отправит их клиенту, когда он в этом нуждается.
Что касается требования, чтобы все клиенты могли видеть все календари, я думаю, что те же самые основные принципыприменять.Пусть клиент запросит у сервера календари, а затем сервер вернет полезную нагрузку, которая содержит необходимые для клиента данные.