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