//processing response obtained from host private void ProcessJoiningTheRoomResponse(AddNewPlayerResponse response) { if (response != null) { //not added to game if (!response.AddedToGame) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("The endpoint didn't joi the player to the room"); //if host did not add player to the room, return to main thread and //show message SynchCont.Post(_ => NotAddedToTheRoomMessageBoxShow(), null); } else { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info("Player successfully joined the room. Player Number: " + response.PlayerNumber.ToString()); //assign player daya MainWindow.IsHostPlayer = response.IsHostPlayer; MainWindow.PlayerID = response.PlayerID; MainWindow.PlayerNumber = response.PlayerNumber; MainWindow.TotalAMountOfPlayerObtainedFromHost = response.TotalAMountOfPlayers; //assign app type MainWindow.ChangeGameStatus(response.IsHostPlayer); //send an avatar image to the host SendAvatarImageToHost(response.PlayerNumber); } } }
//task algorithm private void JoinTheGame(Uri hostEndpoint, Uri clientEndpoint, string password) { StartNewFactoryChannel(hostEndpoint); AddNewPlayerResponse response = ObtainJoiningResult(clientEndpoint, password); ProcessJoiningTheRoomResponse(response); }
//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 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); }