public static CsMjGameRoom JoinRoom(GameUser user, int roomID) { CsMjGameRoom room = null; rooms.TryGetValue(roomID, out room); if (room != null && (room.Players.Count < 4 && room.RoomPeoPleType == 0)) { room.JoinRoom(user); userRooms.TryAdd(user.Uid, room); return(room); } else if (room != null && (room.Players.Count < 3 && room.RoomPeoPleType == 1)) { room.JoinRoom(user); userRooms.TryAdd(user.Uid, room); return(room); } else { return(null); } }
public static CsMjGameRoom GetRoomById(int roomId) { CsMjGameRoom room = null; rooms.TryGetValue(roomId, out room); return(room); }
public static CsMjGameRoom GetRoomByUserId(string userId) { CsMjGameRoom room = null; userRooms.TryGetValue(userId, out room); return(room); }
public static CsMjGameRoom Ready(int roomId, GameUser user) { CsMjGameRoom room = null; rooms.TryGetValue(roomId, out room); room.ReadyGame(user.Uid); return(room); }
public static CsMjGameRoom CreateRoom(GameUser user, int RoomPeopleType) { if (RoomPeopleType == 0) { CsMjGameRoom room = new CsMjGameRoom(user.Uid); room.RoomId = getRoomId(); room.Players = new LinkedList <CsGamePlayer>(); room.Players.AddLast(new CsGamePlayer(user)); rooms.TryAdd(room.RoomId, room); userRooms.TryAdd(user.Uid, room); return(room); } else { CsGameRoomThree room = new CsGameRoomThree(user.Uid); room.RoomId = getRoomId(); room.Players = new LinkedList <CsGamePlayer>(); room.Players.AddLast(new CsGamePlayer(user)); rooms.TryAdd(room.RoomId, room); userRooms.TryAdd(user.Uid, room); return(room); } }
public static CsMjGameRoom Cancel(string uid, int roomID, int cancelType) { CsMjGameRoom room = GetRoomById(roomID); if (room != null) { LinkedListNode <CsGamePlayer> player = room.FindPlayer(uid); if (cancelType == 0) { player.Value.Cancel = false; } else { player.Value.Cancel = true; } player.Value.CancelState = true; } var listPlayer = room.Players.ToList(); int count = listPlayer.Count(p => p.Cancel == true); int cancelStateCount = listPlayer.Count(p => p.CancelState == true); //Cancel类型0为通知,1为解散房间,2为不同意取消 int isCancel = 0; if (count > listPlayer.Count() / 2 && cancelStateCount > listPlayer.Count() / 2) { rooms.TryRemove(roomID, out room); roomRemoveKeyBag.Add(roomID); foreach (var row in room.Players) { CsMjGameRoom tempRoom = null; userRooms.TryRemove(row.PlayerUser.Uid, out tempRoom); row.Cancel = false; row.CancelState = false; } isCancel = 1; } else if (count < listPlayer.Count() / 2 && cancelStateCount > listPlayer.Count() / 2) { isCancel = 2; foreach (var row in room.Players) { row.Cancel = false; row.CancelState = false; } } A1004Response.Builder response = A1004Response.CreateBuilder(); foreach (var row in listPlayer.FindAll(p => p.CancelState == true)) { A1004User.Builder user = A1004User.CreateBuilder(); user.SetUid(row.PlayerUser.Uid); user.SetIsCancel(row.Cancel ? 1 : 0); user.Name = row.PlayerUser.NickName; response.AddUsers(user); } response.SetCancelType(isCancel); byte[] responseArray = response.Build().ToByteArray(); foreach (var row in room.Players) { WebSocketServerWrappe.SendPackgeWithUser(row.PlayerUser.Uid, 1004, responseArray); } return(room); }