//request from client bool IMakaoGameHostService.DeletePlayerFromRoom(LeaveTheRoomRequest request) { (bool playerDeleted, bool playerWasHost) = MakaoEngineHostDataPlaceholders.DeletePlayerFromRoom(request); if (request.ClosedWindowType == LeavingTheRoomWindowType.MainWindow) { if (playerDeleted && playerWasHost) { InfoSenderClass Sender = new InfoSenderClass(); Sender.DeleteTheRoom(ClientInfoType.ClosedByHost); } else if (playerDeleted) { InfoSenderClass Sender = new InfoSenderClass(); Sender.StartSendingInfoABoutChangeInCurrentPlayerList(); } } else { InfoSenderClass Sender = new InfoSenderClass(); Sender.DeleteTheRoom(ClientInfoType.PlayerLeftGame); } return(playerDeleted); }
//deletion from room algorthm private void DeleteUserFromRoomAlgorithmMethod(LeavingTheRoomWindowType windowType) { LeaveTheRoomRequest request = null; IMakaoGameHostService proxy = null; try //try to connect to service host - may be problem when didin't connect before and endpoint is not assigned { if (makaoGameHostEndpoint == null) { AssignHostEndpoint(MakaoGameHostServiceEndpointObtainer.GetHostEndpointWhileBeeingHost()); } ChannelFactory <IMakaoGameHostService> factory = new ChannelFactory <IMakaoGameHostService>(new BasicHttpBinding(), new EndpointAddress(MakaoGameHostEndpoint)); //creating request request = new LeaveTheRoomRequest() { IsHostPlayer = IsHostPlayer, PlayerID = PlayerID, PlayerName = SavedDataPlaceholder.CurrentPlayerName, PlayerNumber = PlayerNumber, ClosedWindowType = windowType, }; proxy = factory.CreateChannel(); } catch (Exception ex) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error("Error while making attemp to connect to host to delete player " + ex.Message + ex.StackTrace); } bool response = false; try { response = proxy.DeletePlayerFromRoom(request); } catch (Exception ex) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error("Error while obtaning response from host about deletion of player: " + ex.Message + ex.StackTrace); } if (response) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("Current player was deleted from room"); } if (IsHostPlayer == true) { Task.Run(() => StopTheHostServiceWithDelay(3)); } }
//deleting player from roo if exists in the room public static (bool, bool) DeletePlayerFromRoom(LeaveTheRoomRequest request) { bool deleted = false; bool hostPlayer = false; int indexToRemove = -5; //check if player with such ID and number exists in room List <PlayerData> playersList = CurrentPlayersData.FindAll(p => p.PlayerID == request.PlayerID); var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("Deleting player from room. Amunt of players with matching ID is: " + playersList.Count.ToString()); //if yes, delete it if (playersList.Count == 1) { if (playersList[0].PlayerID == request.PlayerID && playersList[0].PlayerNumber == request.PlayerNumber) { for (int i = 0; i < CurrentPlayersData.Count; i++) { if (CurrentPlayersData[i].PlayerID == request.PlayerID) { var innerLogger = NLog.LogManager.GetCurrentClassLogger(); innerLogger.Info("Deleting player from room. Index in the list of matching player: " + i.ToString()); //remember index to remove indexToRemove = i; //if player was host, close the room if (CurrentPlayersData[i].IsHostPlayer) { hostPlayer = true; } break; } } //delete the player from list if (indexToRemove >= 0) { CurrentPlayersData.RemoveAt(indexToRemove); deleted = true; var innerLogger = NLog.LogManager.GetCurrentClassLogger(); innerLogger.Info("Deleting player from room. Playr deleted"); } } } return(deleted, hostPlayer); }