На самом деле мой вопрос уже был, но там не дали внятного ответа.
Архитектура асинхронного сервера C#
Меня скорей интересует, как организовать прослойку между application server и логикой, ну и реализация самой логики.
Особенно интересно узнать, как обработка данных происходит, допустим, в больших мморпг. Ведь в таких играх нужно перерабатывать кучи данных(координаты, предметы итд) Как сервер справляется с нагрузкой?
Ладно, вернусь к своим "баранам". Сейчас у меня реализована прослойка и логика, мягко говоря, не очень.
Если в краце, то клиент присылает json-сообщение на сервер, сервер выдергивает тип(что совершил пользователь) из этого сообщения, этот тип летит в функцию, где происходит поиск по словарю, ну а когда ключ будет найден выполняется нужная функция. Объяснил не очень, проще показать будет в коде.
// key - ключ\тип действия пользователя;
// player - экземпляр игрока
private void messageHnd(String key, Client player)
{
foreach (String i in Settings.types.Keys) // types - это словарь вида <String, delegate>
{
if (i == key)
{
Settings.types[key](data, player);
}
}
}
Честно говоря, меня не очень радует процедурное программирование на C# + этот способ больше подходит для Python'а, нежели шарпа. Поэтому надеюсь, что вы направите меня на правильный путь.
PS. Никто не знает, как проверять занят ли SocketAsyncEventArgs или нет. Бывали случаи, что сообщение не отправлялось, так как процесс был занят.