Я работаю над движком карточных игр в C # .NET уже некоторое время. На данный момент он близок к завершению, но интерфейс до сих пор был простым консольным с ReadLine
и WriteLine
.
Для данных у меня есть объект GameState
, в котором хранится почти вся соответствующая информация для игры в данный момент времени. Остальная часть игры сильно зависит от событий.
Я хочу развернуть это в полномасштабное онлайн-приложение. Я много читал о WCF и его поддержке обратного вызова в веб-сервисах, и это кажется мне достойным вариантом. Тем не менее, я открыт для других идей, если они хорошо подходят.
Единственная проблема, которую я ожидаю, - это ночной кошмар, когда я пытаюсь это сделать. У меня есть подход, о котором я думаю, что он может максимально уменьшить проблемы с потоками:
1) Служба WCF должна только когда-либо запрашивать данные у пользователя (например, запрашивать какое-либо действие) через интерфейс обратного вызова И предоставлять несколько односторонних обратных вызовов, чтобы уведомлять клиента об обновлениях состояния игры. Акцент: клиенты не могут «запрашивать» состояние игры. Единственный способ отправить данные на сервер, если сервер запрашивает их через обратный вызов.
Мое единственное беспокойство заключается в том, что клиенту может потребоваться запросить некоторые данные с сервера каким-то образом, которого я не ожидаю. Если возникнет такая ситуация, я мог бы предоставить клиенту несколько способов прочитать состояние игры, но теперь я должен начать думать о блокировках Reader для объекта GameState
.
Полагаю, что если понадобится, я покопаюсь и попытаюсь сделать эту штуку безопасной, но я хотел, чтобы вы, ребята, выполнили ее, чтобы посмотреть, есть ли у вас какие-либо предложения.