Пример #1
0
        public static string fileExtension    = "nfl";//.nfl - news feed log

        static void Main(string[] args)
        {
            //Как только приложение стартует добавляем первую новость о том что приложение запустилось
            NewNews.ApplicationStart("mark!main function");
            //Узнаем полный путь к файлу настроек
            string pathNameToConf = Application.dataPath + "/" + configurationFileName;
            //Составляем полный путь к директории куда будут сохраняться файлы логов
            string logDirectory = Application.persistentDataPath + "/Logs/";//Необходимо дописать кастомизацию

            //Используем класс автозагрузки для получения всех интересующих нас параметров для дальнейшей работы остальных модулей
            if (CAutoLoader.LoadFromFile(pathNameToConf) == false)
            {
                Console.BackgroundColor = ConsoleColor.DarkRed;
                Debug.Log("Error loading config file.");
                Console.BackgroundColor = ConsoleColor.Black;
            }
            //Входные параметры от скрипта имеют больший приоритет посему делаем подмену там где это надо
            //Дальнейшая работа должна происходить исключительно с параметрами из словаря setup
            Dictionary <string, string> setup = CAutoLoader.GetClonedConfiguration();

            if (serverAddress != null)
            {
                setup["serverAddress"] = serverAddress;
            }
            if (httpMethod != null)
            {
                setup["httpMethod"] = httpMethod;
            }
            if (httpContentType != null)
            {
                setup["httpContentType"] = httpContentType;
            }
            if (correspondenceFrequency != 0)
            {
                setup["correspondenceFrequency"] = correspondenceFrequency.ToString();
            }
            if (installationToken != null)
            {
                setup["installationToken"] = installationToken;
            }
            if (installationDescription != null)
            {
                setup["installationDescription"] = installationDescription;
            }
            if (logDirectory != null)
            {
                setup["logDirectory"] = logDirectory;
            }
            //Дальше создаём моего любимого инспектора (ака "the Boss")
            //Инициализируем с помощью словаря setup
            CClientInspector theInspector = new CClientInspector(setup["installationToken"], setup["installationDescription"]);

            theInspector.Initialize(setup);
            //Создаем и настраиваем Почтальона кый берет на себе весь гемор работы с сетью
            CClientPostman thePostman = new CClientPostman();

            thePostman.Initialize(setup);
            //Создаем и настраиваем класс Архиватора кый отвечает за локальное хранение данных
            CLogger theLogger = new CLogger();

            theLogger.Initialize(setup);
            //Добавляем почтальона как дефолтную почтовую службу к Инспектору.
            //Добавляем Архиватора как дефлотную службу локального хранения данных
            theInspector.postalService  = thePostman;
            theInspector.archiveService = theLogger;
            //Проверяем заданный токен инсталяции, есть ли такой в БД на сервере - чтоб удостовериться что Телеметрия бдует принематься по данной инсталяции.
            //Если такой ключ не зарегестрирован то кидаем исключение в качестве напоминания разработчику что надо обновить ключ епт
            //theInspector.CheckInstallationToken();
            //Если передача данных не удалась что делать? Вешаем обработчики для такой ситуации
            thePostman.ErrorDelivery += new ErrorDeliveryHandler(theInspector.MessageReturn);//Необходимо продумать ситуацию в кой данные передаются из уже записанного лог файла и следовательно повторно архивировать в случае не удачи их не нужно
            //Создаем инициативу кая будет каждую минуту слать Пинг-покет на сервер
            //CInitiative thePingSignalToServer = new CInitiative(theInspector.SendPingSignalToServer, 1 * 3 * 1000, true, true, "Ping 1m", "Каждую минуту отсылает Пинг-сигнал на сервер");
            //CInitiative theLogsToServer = new CInitiative(theInspector.SendLogsToServer, 1 * 7 * 1000, true, true, "SendingLogs 1h", "Отсылка статистики из логов на сервер");
            //CInitiative theNewsFeedToLogs = new CInitiative(theInspector.NewsFeedToLogs, 1 * 3 * 1000, true, true, "NewsFeedToLogs 15m", "Забираем данные из ленты новостей и помещаем в логи, после чего очищаем ленту новостей");
            //CInitiative theWindowDressing = new CInitiative(theInspector.WindowDressing, 1 * 1 * 1000, true, true, "WindowDressing 1m", "Заполняем Ленту новостей чем-нибудь. Зондирующие сигналы");
            //
            //Тестирование фишек ниже. Все что выше будет переноситься в продакшен
            //
            //NewNews.ApplicationEnd("mark!main function");
            do
            {
                theInspector.SendPingSignalToServer();
            }while (Console.ReadLine() != "x");
            //Приложение заканчивает свою работу. Генерируем новость об этом. Эта строчка должна оставаться последней
            //NewNews.ApplicationEnd("mark!main function");
        }