//method that call a proper method from client contract private ReturnData SendDataToClient(DataSenderType dataType, IMakaoGameClientService proxy, object dataToTransfer) { ReturnData output = null; var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info($"Sending info to specific player in the room: {dataType.ToString()}."); try { switch (dataType) { case DataSenderType.EngineInstanceCreatedData: output = EngineInstanceCreatedDataHandler(proxy, dataToTransfer); break; case DataSenderType.EngineInstanceUpdateData: output = EngineDataUpdateHandler(proxy, dataToTransfer); break; case DataSenderType.GameFinished: output = EndGameHandler(proxy, dataToTransfer); break; } } catch (Exception ex) { var logger2 = NLog.LogManager.GetCurrentClassLogger(); logger2.Error($"Sending info to specific player in the room: {dataType.ToString()} failed: {ex.Message}"); } return(output); }
//method - algorithm private List <ReturnData> SendDataToAllPlayers(DataSenderType dataType, List <object> dataRequests, List <string> IDlist) { List <ReturnData> output = new List <ReturnData>(); //iterate through all plauers in Placeholders static class foreach (string item in IDlist) { try { //gain player endpoint - based on ID Uri endpoint = (DataPlaceholders.MakaoEngineHostDataPlaceholders.PlayersData.Single(x => x.PlayerID == item)).PlayerEndpoint; int index = IDlist.FindIndex(x => x == item); var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Info($"Sending data of type: {dataType.ToString()}, to player with endpoint equal to: {endpoint.ToString()}."); //create channel factory and call method in client contract ReturnData receivedData = ChannelFactoryCreation(endpoint, dataType, dataRequests[index]); output.Add(receivedData); } catch (Exception ex) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error($"Sending data of type: {dataType.ToString()}, failed: {ex.Message}."); } } return(output); }
//method for creating channel factory private ReturnData ChannelFactoryCreation(Uri endpoint, DataSenderType dataType, object dataToSend) { ReturnData output = null; try { //creata channel factory based on tje uri ChannelFactory <IMakaoGameClientService> factory = new ChannelFactory <IMakaoGameClientService> (new BasicHttpBinding(), new EndpointAddress(endpoint)); //now create proxy IMakaoGameClientService proxy = factory.CreateChannel(); //and call some method output = SendDataToClient(dataType, proxy, dataToSend); } catch (Exception ex) { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error($"Couldn't connect to the client endpoint game state data. DataType: {dataType.ToString()}. Exception: {ex.Message}."); } return(output); }
public static bool ExecutePlayersDataSendingAlgorithm(int amountOfPlayers, int amountOfDecks, int amountOfJokers, int amountOfCards, DataSenderType dataType) { //list of data received from clients bool output = false; bool gameCreated; //start the engine with proper amount of players, decks etc. switch (dataType) { case DataSenderType.EngineInstanceCreatedData: gameCreated = GameStateHolder.CreateNewGame(amountOfPlayers, amountOfDecks, amountOfJokers, amountOfCards); GameStateHolder.StartGameTimer(); break; case DataSenderType.EngineInstanceUpdateData: case DataSenderType.GameFinished: default: gameCreated = GameStateHolder.EngineConstructed; break; } if (gameCreated) { //collecting personalized data for each user - starting new game data List <object> requestsList = null; List <string> listOfID = null; switch (dataType) { case DataSenderType.EngineInstanceCreatedData: (requestsList, listOfID) = CollectPlayersPersonalizedDataGameCreation(typeof(PersonalizedForSpecificPlayerStartGameDataRequest)); break; case DataSenderType.EngineInstanceUpdateData: (requestsList, listOfID) = CollectPlayersPersonalizedDataGameCreation(typeof(PersonalizedPlayerDataRequest)); break; } //send this data to each client if ((requestsList != null && listOfID != null) || dataType == DataSenderType.GameFinished) { switch (dataType) { case DataSenderType.EngineInstanceCreatedData: GameStateDataSender sender = new GameStateDataSender(); output = ClientResponseAnalyzer(sender.SendDataAboutCreationOfNewRoom(requestsList, listOfID)); break; case DataSenderType.EngineInstanceUpdateData: GameStateDataSender semder2 = new GameStateDataSender(); output = ClientResponseAnalyzer(semder2.SendUpdatedDataToPlayers(requestsList, listOfID)); break; case DataSenderType.GameFinished: GameStateDataSender sender3 = new GameStateDataSender(); output = ClientResponseAnalyzer(sender3.SendGameFinishedDataToPlayers(CollectEndGameData())); break; } } else { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error($"Didn't collect players personalized data, method returned at least one null. Type: {dataType.ToString()}."); } } else { var logger = NLog.LogManager.GetCurrentClassLogger(); logger.Error("Game didn't start."); } return(output); }