Beispiel #1
0
        //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);
        }
Beispiel #2
0
        //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);
        }
Beispiel #3
0
        //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);
        }