//Adding host player as new player (without info of avatar) AddNewPlayerResponse IMakaoGameHostService.CreateNewRoomAndHostPlayer(AddNewPlayerRequest request) { InfoSenderClass Sender = new InfoSenderClass(); Sender.DeleteTheRoom(ClientInfoType.ClosedByHost); return(AddPlayerToTheRoom(request, true)); }
//sending the request to the host private AddNewPlayerResponse ObtainJoiningResult(Uri clientEndpoint, string password) { AddNewPlayerRequest request = new AddNewPlayerRequest() { PlayerName = MainWindow.SavedData.CurrentPlayerName, PlayedGames = MainWindow.SavedData.SavedAmountOfPlayedGames, PlayedAndWonGames = MainWindow.SavedData.SavedAmountOfPlayedAndWonGames, PlayerEndpoint = clientEndpoint, Password = password, }; IMakaoGameHostService proxy = factory.CreateChannel(); try { AddNewPlayerResponse response = proxy.AddNotHostPlayerToTheRoom(request); return(response); } catch (Exception ex) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error($"Error while trying to send password to host: {ex.Message}"); return(null); } }
//method for adding host player to the list public static (bool, int) AddNewPlayerToTheRoom(AddNewPlayerRequest userRequestData, bool hostPlayer) { if (userRequestData.Password == currentGameSetup.RoomPassword) { //clear the list if it is host player if (hostPlayer) { CurrentPlayersData.Clear(); } //minimuma mount of plaers while joining the room int minimumAmountOfPlayers = 0; if (!hostPlayer) { minimumAmountOfPlayers = 1; } //if there is free space in the room if (CurrentPlayersData.Count < currentGameSetup.AmountOfPlayers && CurrentPlayersData.Count >= minimumAmountOfPlayers) { //add first player - the host PlayerData playerData = new PlayerData() { PlayerName = userRequestData.PlayerName, PlayedGames = userRequestData.PlayedGames, PlayedAndWonGames = userRequestData.PlayedAndWonGames, PlayerID = GetUniqueID(), PlayerEndpoint = userRequestData.PlayerEndpoint, PlayerNumber = GetFirstNotAssignedPlayerNumber(), IsHostPlayer = hostPlayer, ReadyToPlay = false, }; CurrentPlayersData.Add(playerData); var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("Current amount of players in the room is: " + CurrentPlayersData.Count.ToString()); //control joining timeout ControlTimerForJoiningTimeout(); //control readiness timeout ControlTimerForReadinessTimeout(); return(true, playerData.PlayerNumber); } else { return(false, -1); } } else { return(false, -1); } }
//method that does the job - adding player in data placeholder static class private AddNewPlayerResponse AddPlayerToTheRoom(AddNewPlayerRequest request, bool hostPlayer) { //assign data (Property is only readable) (bool added, int playerNumber) = MakaoEngineHostDataPlaceholders.AddNewPlayerToTheRoom(request, hostPlayer); AddNewPlayerResponse response; if (added) { //find player with specific number PlayerData playerData = MakaoEngineHostDataPlaceholders.PlayersData.Single(p => p.PlayerNumber == playerNumber); //create response (player number = 0) response = new AddNewPlayerResponse() { PlayerName = playerData.PlayerName, PlayedGames = playerData.PlayedGames, PlayedAndWonGames = playerData.PlayedAndWonGames, PlayerID = playerData.PlayerID, PlayerNumber = playerData.PlayerNumber, IsHostPlayer = playerData.IsHostPlayer, AddedToGame = added, TotalAMountOfPlayers = MakaoEngineHostDataPlaceholders.TotalAmountOfPLayers, }; var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("Added new player to the room - player " + response.PlayerNumber.ToString()); } else { //create response (player number = -1) response = new AddNewPlayerResponse() { PlayerName = "", PlayedGames = 0, PlayerID = "", PlayerNumber = -1, AddedToGame = added, }; var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("Adding new player to the room failed..."); } return(response); }
//method for adding the host player to the room public static AddNewPlayerResponse AddHostPlayerToRoom() { //create the request AddNewPlayerRequest addPlayerRequest = new AddNewPlayerRequest() { PlayerName = MainWindow.SavedData.CurrentPlayerName, PlayedGames = MainWindow.SavedData.SavedAmountOfPlayedGames, PlayerEndpoint = MainWindow.ThisClientEndpoint, Password = password, PlayedAndWonGames = MainWindow.SavedData.SavedAmountOfPlayedAndWonGames }; //creating new proxy IMakaoGameHostService proxy = factory.CreateChannel(); //sending data without an image AddNewPlayerResponse response = proxy.CreateNewRoomAndHostPlayer(addPlayerRequest); //if user was added to room if (response.AddedToGame) { //assigning an ID for player MainWindow.PlayerID = response.PlayerID; MainWindow.PlayerNumber = response.PlayerNumber; MainWindow.IsHostPlayer = response.IsHostPlayer; MainWindow.TotalAMountOfPlayerObtainedFromHost = response.TotalAMountOfPlayers; //assign data to player info storage in client service CurrentPlayerDataStorage.PlayerNumber = response.PlayerNumber; CurrentPlayerDataStorage.PlayerID = response.PlayerID; CurrentPlayerDataStorage.PlayerName = response.PlayerName; //change app status MainWindow.ChangeGameStatus(response.IsHostPlayer); //sending data with image MemoryStream avatarMemoryStream = new MemoryStream(); byte[] bytes = File.ReadAllBytes(MainWindow.SavedData.CurrentAvatarPicture); avatarMemoryStream.Write(bytes, 0, bytes.Length); avatarMemoryStream.Position = 0; //calling method for sending to and downloding avatar from host SendAnImage(avatarMemoryStream, response.PlayerNumber, proxy); } return(response); }
//Add new player to the room - not host AddNewPlayerResponse IMakaoGameHostService.AddNotHostPlayerToTheRoom(AddNewPlayerRequest request) { return(AddPlayerToTheRoom(request, false)); }