/// <summary> /// Выполнить действия при запуске работы сервера /// </summary> public override void OnServerStart() { // вывод в журнал log = new Log(Log.Formats.Simple); log.Encoding = Encoding.UTF8; log.FileName = AppDirs.LogDir + LogFileName; log.WriteBreak(); log.WriteAction(string.Format(ModPhrases.StartModule, Name)); // определение полного имени файла информации infoFileName = AppDirs.LogDir + InfoFileName; // загрука конфигурации config = new Config(AppDirs.ConfigDir); string errMsg; if (config.Load(out errMsg)) { // создание и запуск экспортёров exporters = new List<Exporter>(); foreach (Config.ExportDestination expDest in config.ExportDestinations) { Exporter exporter = new Exporter(expDest, log); exporters.Add(exporter); exporter.Start(); } // создание и запуск потока для обновления файла информации infoThread = new Thread(() => { while (true) { WriteInfo(); Thread.Sleep(InfoThreadDelay); } }); infoThread.Start(); } else { normalWork = false; workState = Localization.UseRussian ? "ошибка" : "error"; WriteInfo(); log.WriteAction(errMsg); log.WriteAction(ModPhrases.NormalModExecImpossible); } }
/// <summary> /// Экспортировать архивные данные, загрузив их из файла /// </summary> private void ExportArcDataFromFile(Exporter exporter, DateTime dateTime) { // загрузка таблицы минутных срезов из файла SrezTableLight srezTable = new SrezTableLight(); SrezAdapter srezAdapter = new SrezAdapter(); srezAdapter.FileName = ServerUtils.BuildMinFileName(Settings.ArcDir, dateTime); try { srezAdapter.Fill(srezTable); } catch (Exception ex) { log.WriteAction(string.Format(Localization.UseRussian ? "Ошибка при загрузке таблицы минутных срезов из файла {0}: {1}" : "Error loading minute data table from file {0}: {1}", srezAdapter.FileName, ex.Message)); } // поиск среза на заданное время SrezTableLight.Srez srez = srezTable.GetSrez(dateTime); // добавление среза в очередь экспорта if (srez == null) { log.WriteAction(Localization.UseRussian ? "Отсутствуют архивные данные для экспорта" : "No archive data to export"); } else { exporter.EnqueueArcData(srez); log.WriteAction(Localization.UseRussian ? "Архивные данные добавлены в очередь экспорта" : "Archive data added to export queue"); } }
/// <summary> /// Экспортировать события, загрузив их из файла /// </summary> private void ExportEventsFromFile(Exporter exporter, DateTime date) { // загрузка таблицы событий из файла EventTableLight eventTable = new EventTableLight(); EventAdapter eventAdapter = new EventAdapter(); eventAdapter.FileName = ServerUtils.BuildEvFileName(Settings.ArcDir, date); try { eventAdapter.Fill(eventTable); } catch (Exception ex) { log.WriteAction(string.Format(Localization.UseRussian ? "Ошибка при загрузке таблицы событий из файла {0}: {1}" : "Error loading event table from file {0}: {1}", eventAdapter.FileName, ex.Message)); } // добавление событий в очередь экспорта if (eventTable.AllEvents.Count > 0) { foreach (EventTableLight.Event ev in eventTable.AllEvents) exporter.EnqueueEvent(ev); log.WriteAction(Localization.UseRussian ? "События добавлены в очередь экспорта" : "Events added to export queue"); } else { log.WriteAction(Localization.UseRussian ? "Отсутствуют события для экспорта" : "No events to export"); } }
/// <summary> /// Экспортировать текущие данные, загрузив их из файла /// </summary> private void ExportCurDataFromFile(Exporter exporter) { // загрузка текущего среза из файла SrezTableLight srezTable = new SrezTableLight(); SrezAdapter srezAdapter = new SrezAdapter(); srezAdapter.FileName = ServerUtils.BuildCurFileName(Settings.ArcDir); try { srezAdapter.Fill(srezTable); } catch (Exception ex) { log.WriteAction(string.Format(Localization.UseRussian ? "Ошибка при загрузке текущего среза из файла {0}: {1}" : "Error loading current data from file {0}: {1}", srezAdapter.FileName, ex.Message)); } // добавление среза в очередь экспорта if (srezTable.SrezList.Count > 0) { SrezTableLight.Srez sourceSrez = srezTable.SrezList.Values[0]; SrezTableLight.Srez srez = CreateSrez(DateTime.Now, sourceSrez.CnlNums, sourceSrez); exporter.EnqueueCurData(srez); log.WriteAction(Localization.UseRussian ? "Текущие данные добавлены в очередь экспорта" : "Current data added to export queue"); } else { log.WriteAction(Localization.UseRussian ? "Отсутствуют текущие данные для экспорта" : "No current data to export"); } }