C# 信号员-基于旋转的游戏,每组只有两个人

C# 信号员-基于旋转的游戏,每组只有两个人,c#,signalr,multiplayer,C#,Signalr,Multiplayer,我想用信号器创建一个连接四人多人游戏。我可以在两个不同的设备上与另一个玩家比赛,但如果第三个人连接,任何事情都不会像预期的那样起作用。我的主要问题是创建一个限制为2个连接的信号器组。如果第三方连接,则应创建一个新组,而不是进入第一个组。此外,我不明白如何在javascript代码中使用组 我试图将每个connectionID存储在哈希集中,但不知道如何在每次连接数为奇数时创建一个新的组 public static class UserHandler { public static Has

我想用信号器创建一个连接四人多人游戏。我可以在两个不同的设备上与另一个玩家比赛,但如果第三个人连接,任何事情都不会像预期的那样起作用。我的主要问题是创建一个限制为2个连接的信号器组。如果第三方连接,则应创建一个新组,而不是进入第一个组。此外,我不明白如何在javascript代码中使用组

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

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");
        }
    });

});
公共静态类UserHandler
{
public static HashSet ConnectedIds=new HashSet();
}
公共类OnlinegameHub:Hub
{
public void SendUserInformation(字符串用户名、int颜色代码)
{
Clients.Others.getUserInformation(用户名、颜色代码);
}
public void SendTurn(int col、int colorCode、string yourColor)
{
Clients.Others.updateBoard(col、colorCode、yourColor);
}
公共任务组(字符串组名)
{
返回Groups.Add(Context.ConnectionId,groupName);
}
已连接的公用覆盖任务()
{
UserHandler.ConnectedIds.Add(Context.ConnectionId);
返回base.OnConnected();
}
}
//Javascript部分
$.connection.hub.start().done(函数(){
game.server.sendUserInformation(playerUserName,您的代码);
$(“.column”)。单击(函数(){
如果(轮到你){
game.server.sendTurn($(this.index(),yourCode,yourColor);
insertColorCode(您的代码,$(this.index());
轮到你了=错;
$(“.turn text”).html(“现在是“+playerTwoUsername+”);
}
});
});

您必须在代码中处理不同的组,每个玩家都在同一个信号集线器上,然后您的应用程序必须处理这些组。我建议您阅读有关组的文档:

这些例子非常明确:

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);
    }
}

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

谢谢,但这并不能真正帮助我。我已经阅读了文档,但无法理解。坦率地说,我无法理解如何在我的javascript代码中实现组。您必须在C#代码中处理组。Javascript不知道客户端的组,服务器将根据客户端的连接ID来处理。