如何使用游戏循环触发SignalR组消息



背景

我在SignalR上制作了一款游戏。NET框架,现在正在移植到dotnet核心。作为其中的一部分;游戏室";每个人最多有6名球员。我使用SignalR的Group功能来支持GameRoom的概念——没有问题。

问题

我的问题是,如何使每个GameRoom每5秒自动向群中的所有成员广播消息?

我有一个具有List<GameRoom>GameHub.cs。然后,每个GameRoom都会维护其相应游戏的所有数据(分数、玩家、SignalR用户、SignalRgroup名称等)。在游戏室里,我有一个游戏循环,我想利用它向玩家推送数据。游戏室在游戏期间是静态的。

我无法确定我的依赖关系模型在新的网络核心世界中是否正确。例如:GameHub->CCD_ 8,其又包含一个简单的CCD_。在这个计时器里,我不知道如何呼叫GameHub来广播消息。

在。NET,我可以利用GlobalHost来获得GameHub,并广播一条组消息——类似这样的消息是可以的,如何为dot-NET核心实现做类似的事情?如何使用游戏循环来触发SignalR群组消息?

class GameRoom
{
List<player> _players;
Scoreboard _scores;
string _gameRoomName;
...
void GameLoop_Timer_Elapsed(object sender, ElapsedEventArgs e) 
{
var context = GlobalHost.ConnectionManager.GetHubContext<Game>();
context.Clients.Group(_gameRoomName).SendMessage(_gameState);
}
}

在Asp.net核心中,我建议您可以使用后台服务来满足您的需求。在backrround服务中,您可以编写逻辑来调用集线器,每隔5秒发送一次组消息。

关于如何调用ihubcontext,您可以参考本文和这个示例。

关于如何使用后台服务,您可以参考本文。

最新更新