//method for sending data about game ended fact to the players
        private static void EngineInstance_EndTheGame(object sender, EventArgs e)
        {
            var logger = NLog.LogManager.GetCurrentClassLogger();

            logger.Info($"Procedure of sending info to players about game ended started.");

            //stop game timer
            GameStateHolder.StopGameTimer();

            //calling the method from game state handler class
            MakaoEngineHostGameStateHandler.ExecutePlayersDataSendingAlgorithm(CurrentPlayersData.Count, currentGameSetup.AmountOfDecks,
                                                                               currentGameSetup.AmountOfJokers, currentGameSetup.AmountOfStartCards, DataSenderType.GameFinished);
        }
        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);
        }