private void PlayerQuitRoom(IHanabiPlayer player, RequestQuitRoom request) { RoomInfo roomInfo = new RoomInfo(); QuitRoomResult result = QuitRoomResult.Fail; if (player.RoomStatus != PlayerRoomStatus.Idle) { RoomIndexType roomIndex = new RoomIndexType(request.RoomIndex); if (Rooms.ContainsKey(roomIndex)) { Room room = Rooms[roomIndex]; room.Players.Remove(player); roomInfo = room.Info; player.OnQuitRoom(); if (room.Players.Count == 0) { room.Clear(); } result = QuitRoomResult.Success; } } ResponseQuitRoom response = new ResponseQuitRoom(); response.Result = result; response.Room = roomInfo; SendCommand(player, ActionType.QuitRoom, response); }
private void PlayerJoinRoom(IHanabiPlayer player, RequestJoinRoom request) { RoomInfo roomInfo = new RoomInfo(); JoinRoomResult result = JoinRoomResult.Fail; if (player.RoomStatus == PlayerRoomStatus.Idle) { RoomIndexType roomIndex = new RoomIndexType(request.RoomIndex); if (Rooms.ContainsKey(roomIndex)) { Room room = Rooms[roomIndex]; if (room.Players.Count < room.Setting.MaxPlayers) { room.Players.Add(player); roomInfo = room.Info; player.OnJoinRoom(room); result = JoinRoomResult.Success; } } } ResponseJoinRoom response = new ResponseJoinRoom(); response.Result = result; response.Room = roomInfo; SendCommand(player, ActionType.JoinRoom, response); }
public void TestGame_JoinRoomFail() { NicknameType nickname = new NicknameType("Caesar"); Mock <IHanabiPlayer> player = new Mock <IHanabiPlayer>(); player.SetupGet <NicknameType>(x => x.nickname).Returns(nickname); RoomIndexType index = new RoomIndexType(0); player.Setup(x => x.OnEnterGame(nickname)); int count = 0; player.Setup(x => x.SendCommand(It.IsAny <Command>())) .Callback <Command>(c => { switch (++count) { case 1: VerifyEnterGame(c, ExitGameResult.Success); break; case 2: VerifyJoinRoom(c, JoinRoomResult.Fail, 0); break; } }); GameNameType gameName = new GameNameType("Hanabi"); Game game = new Game(gameName); PlayerEnter(game, player.Object, nickname); PlayerJoinRoom(game, player.Object, index); player.VerifyAll(); }
public void TestGame_JoinRoomSuccess() { NicknameType nickname1 = new NicknameType("Caesar"); NicknameType nickname2 = new NicknameType("Jenny"); Mock <IHanabiPlayer> player1 = new Mock <IHanabiPlayer>(); Mock <IHanabiPlayer> player2 = new Mock <IHanabiPlayer>(); player1.SetupGet <NicknameType>(x => x.nickname).Returns(nickname1); player2.SetupGet <NicknameType>(x => x.nickname).Returns(nickname2); RoomIndexType index = new RoomIndexType(0); player1.Setup(x => x.OnEnterGame(nickname1)); player1.Setup(x => x.OnJoinRoom(It.Is <Room>(r => r.RoomIndex == index))); int count1 = 0; player1.Setup(x => x.SendCommand(It.IsAny <Command>())) .Callback <Command>(c => { switch (++count1) { case 1: VerifyEnterGame(c, ExitGameResult.Success); break; } }); player2.Setup(x => x.OnEnterGame(nickname2)); player2.Setup(x => x.OnJoinRoom(It.Is <Room>(r => r.RoomIndex == index))); int count2 = 0; player2.Setup(x => x.SendCommand(It.IsAny <Command>())) .Callback <Command>(c => { switch (++count2) { case 1: VerifyEnterGame(c, ExitGameResult.Success); break; case 2: VerifyJoinRoom(c, JoinRoomResult.Success, 2); break; } }); GameNameType gameName = new GameNameType("Hanabi"); Game game = new Game(gameName); PlayerEnter(game, player1.Object, nickname1); PlayerEnter(game, player2.Object, nickname2); PlayerJoinRoom(game, player2.Object, index); player1.VerifyAll(); player2.VerifyAll(); }
private void GameBegin(RoomIndexType roomIndex) { Room room = Rooms[roomIndex]; if (room != null) { Status = GameStatus.Playing; room.BeginGame(); } }
private void PlayerJoinRoom(Game game, IHanabiPlayer player, RoomIndexType roomIndex) { RequestJoinRoom request = new RequestJoinRoom(); request.RoomIndex = roomIndex.Index; Command command = new Command(); command.action = ActionType.JoinRoom.ToString(); command.payload = JsonConvert.SerializeObject(request); game.DispatchRequest(player, JsonConvert.SerializeObject(command)); }