예제 #1
0
 public abstract void AddInitiative(CInitiative pInitiative, uint pTimeDelay, bool pRepeatMode = false);
예제 #2
0
 // Use this for initialization
 void Start()
 {
     //Text memo = GameObject.Find("DebugMemo").GetComponent<Text>();
     //Как только приложение стартует добавляем первую новость о том что приложение запустилось
     CNewsCollector.ApplicationStart("mark!AutoLoader");
     CNewsCollector.SaveData(JsonConvert.SerializeObject(AppInfoGrabber.ApplicationInfo()));
     //Debug.Log("Application.dataPath: " + Application.dataPath);
     //Debug.Log("Application.dataPath: " + Application.persistentDataPath);
     //Составляем полный путь к файлу настроек
     //string pathNameToConf = Application.dataPath + "/TMonitor/" + configurationFileName;
     //Составляем полный путь к директории куда будут сохраняться файлы логов
     logDirectory = Application.persistentDataPath + "/" + logsFolder;//Необходимо дописать кастомизацию
     //Небольшой хак для случая когда скрипт открывается в эдиторе на виндоус
     //ClearLogsHack(logDirectory);
     //Меняем путь на / только для Windows платформы. Файл должен находиться в корне системы, по умолчанию это C:\
     #if (UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN)
     highPriorityConf = "/conf.json";
     #endif
     //Используем класс автозагрузки для получения всех интересующих нас параметров для дальнейшей работы остальных модулей
     if (File.Exists(highPriorityConf))
     {
         //memo.text += "conf.json from root" + "\n";
         CNewsCollector.SaveData("configuration will be loaded from /conf.json file");
         if (CAutoLoader.LoadFromFile(highPriorityConf) == false)
         {
             Debug.Log("Error loading config file.");
             //memo.text += "Error loading root file." + "\n";
         }
     }
     else
     {
         //memo.text += "conf.json from TextAsset" + "\n";
         if (CAutoLoader.LoadFromText(configFile.text) == false)
         {
             Debug.Log("Error loading config file.");
         }
     }
     //Входные параметры от скрипта имеют больший приоритет посему делаем подмену там где это надо
     //Дальнейшая работа должна происходить исключительно с параметрами из словаря setup
     Dictionary <string, string> setup = CAutoLoader.GetClonedConfiguration();
     if (logDirectory != null)
     {
         setup["logDirectory"] = logDirectory;
     }
     //memo.text += "address: " + setup["serverAddress"] + "\n";
     //Debug.Log(setup["serverAddress"]);
     //Дальше создаём моего любимого инспектора (ака "the Boss")
     //Инициализируем с помощью словаря setup
     inspector = new CClientInspector(setup["installationToken"], setup["installationDescription"]);
     inspector.Initialize(setup);
     //Создаем и настраиваем Почтальона кый берет на себе весь гемор работы с сетью
     CClientPostman thePostman = new CClientPostman();
     thePostman.Initialize(setup);
     //Создаем и настраиваем класс Архиватора кый отвечает за локальное хранение данных
     CLogger theLogger = new CLogger();
     theLogger.Initialize(setup);
     //Добавляем почтальона как дефолтную почтовую службу к Инспектору.
     //Добавляем Архиватора как дефлотную службу локального хранения данных
     inspector.postalService  = thePostman;
     inspector.archiveService = theLogger;
     //Если передача данных не удалась что делать? Вешаем обработчики для такой ситуации
     thePostman.ErrorDelivery += new ErrorDeliveryHandler(inspector.MessageReturn);//Необходимо продумать ситуацию в кой данные передаются из уже записанного лог файла и следовательно повторно архивировать в случае не удачи их не нужно
     //Если приходит сообщение о закрытии выходим из приложения
     inspector.QuitOrder += new IncomingOrderDelegate(() => {
         needToQuit = true;
     });
     //Проверяем заданный токен инсталяции, есть ли такой в БД на сервере - чтоб удостовериться что Телеметрия бдует принематься по данной инсталяции.
     //Если такой ключ не зарегестрирован то кидаем исключение в качестве напоминания разработчику что надо обновить ключ епт
     inspector.CheckInstallationToken(checkTokenExceptionMode);
     //Далее создаются инициативы кые будут испольняться через промежутки времени
     int pingInterval           = Convert.ToInt32(setup["initPingInterval"]);
     int logsToServerInterval   = Convert.ToInt32(setup["initLogsToServerInterval"]);
     int newsFeedToLogsInterval = Convert.ToInt32(setup["initNewsFeedToLogsInterval"]);
     int windowDressingInterval = Convert.ToInt32(setup["initWindowDressingInterval"]);
     thePingSignalToServer = new CInitiative(inspector.SendPingSignalToServer, pingInterval * 1000, true, true, "Ping 1m", "Каждую минуту отсылает Пинг-сигнал на сервер");
     theLogsToServer       = new CInitiative(inspector.SendLogsToServer, logsToServerInterval * 1000, true, true, "SendingLogs 1h", "Отсылка статистики из логов на сервер");
     theNewsFeedToLogs     = new CInitiative(inspector.NewsFeedToLogs, newsFeedToLogsInterval * 1000, true, true, "NewsFeedToLogs 15m", "Забираем данные из ленты новостей и помещаем в логи, после чего очищаем ленту новостей");
     theWindowDressing     = new CInitiative(inspector.WindowDressing, windowDressingInterval * 1000, true, true, "WindowDressing 1m", "Заполняем Ленту новостей чем-нибудь. Зондирующие сигналы");
 }