Как планировать задачи с помощью SignalR - PullRequest
0 голосов
/ 12 октября 2018

Я использую последнюю версию ASP.NET Core для разработки игры с использованием SignalR.Я хочу запланировать только одну вещь ... сигнал окончания игры после запуска игры.

Сначала я попробовал Coravel, но не мог понять, как динамически планировать задачи.Тогда я попробовал Hangfire.Сначала он терпел неудачу, потому что создавал новый концентратор, затем я попытался передать свой концентратор в свою задачу и получил всевозможные ошибки сериализации.Хронитон, кажется, слишком стар, чтобы на него можно было положиться для производства.

Итак, как мне запланировать задачу изнутри концентратора, который будет работать на этом концентраторе?Я не могу себе представить, что это необычный сценарий.

Добавлен код, демонстрирующий проблему:

public async Task MatchStartRequest()
{
    var GroupName = PlayersAndGroups[Context.ConnectionId];
    await Clients.Group(GroupName).SendAsync("StartGame");
    GroupsAndRooms[GroupName].GameStarted = true;
    BackgroundJob.Schedule(() => EndGame(GroupName), System.TimeSpan.FromMinutes(1));
}

public async Task EndGame(string GroupName)
{
    await Clients.Group(GroupName).SendAsync("EndGame");
    PlayersAndGroups.Remove(Context.ConnectionId);
    GroupsAndRooms[GroupName].ConnectionIdsAndPlayers.Remove(Context.ConnectionId);
    if (GroupsAndRooms[GroupName].ConnectionIdsAndPlayers.Count == 0)
    {
        GroupsAndRooms.Remove(GroupName);
    }
    await Groups.RemoveFromGroupAsync(Context.ConnectionId, GroupName);
} 

Если я поставлю точку останова в первой строке EndGame (функция await SendAsync)Я вижу, что сервер пытается отправить сообщение на нулевой концентратор, что, конечно, не работает.Если я отредактирую метод EndGame, чтобы передать ему как Hub, так и GroupName, сервер выдаст мне кучу ошибок сериализации.Возможно, есть идентификатор Hub, который я могу передать, чтобы попасть на этот концентратор с сервера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...