SignalR-回合制游戏,每组只有两个人

时间:2019-01-02 11:10:42

标签: c# signalr multiplayer

我想用SignalR创建一个“连接四人”多人游戏。我可以在两个不同的设备上与另一个玩家对战,但是如果有第三个人连接,则没有任何效果可以想象。我的主要问题是创建一个 2个连接限制的SignalR组。如果有第三个人连接,则应创建一个新的组,而不要输入第一个组。另外我也不明白如何在我的JavaScript代码中使用组。

我试图将每个connectionID存储在哈希集中,但是每次连接数为奇数时,我都不知道如何创建 new 组。

public static class UserHandler
{
    public static HashSet<string> ConnectedIds = new HashSet<string>();
}

public class OnlinegameHub : Hub
{
    public void SendUserInformation(string username, int colorCode)
    {
        Clients.Others.getUserInformation(username, colorCode);
    }

    public void SendTurn(int col, int colorCode, string yourColor)
    {
        Clients.Others.updateBoard(col, colorCode, yourColor);
    }

    public Task JoinLobby(string groupName)
    {
        return Groups.Add(Context.ConnectionId, groupName);

    }

    public override Task OnConnected()
    {
        UserHandler.ConnectedIds.Add(Context.ConnectionId);
        return base.OnConnected();
    }
}

//Javascript part

$.connection.hub.start().done(function () {
    game.server.sendUserInformation(playerOneUsername, yourCode);
    $(".column").click(function () {
        if (yourTurn) {
            game.server.sendTurn($(this).index(), yourCode, yourColor);
            insertColorCode(yourCode, $(this).index());
            yourTurn = false;
            $(".turn-text").html("It's " + playerTwoUsername + "'s turn");
        }
    });

});

1 个答案:

答案 0 :(得分:1)

您必须在代码中处理不同的组,每个玩家都将位于同一SignalR集线器上,然后您的应用程序必须处理这些组。建议您阅读有关网上论坛的文档:https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/working-with-groups

示例非常明确:

public class ContosoChatHub : Hub
{
    public Task JoinRoom(string roomName)
    {
        return Groups.Add(Context.ConnectionId, roomName);
    }

    public Task LeaveRoom(string roomName)
    {
        return Groups.Remove(Context.ConnectionId, roomName);
    }
}

当然,您必须维护一个房间列表,然后当新玩家到达时,请查看此列表以找到可用房间或创建一个新房间。