/// <summary> /// Receives the configuration database subset from Server. /// </summary> private bool ReceiveConfigBase(out ConfigBaseSubset configBase) { configBase = new ConfigBaseSubset(); if (ServerComm.ReceiveBaseTable("incnl.dat", configBase.InCnlTable) && ServerComm.ReceiveBaseTable("kp.dat", configBase.KPTable)) { return(true); } else { configBase = null; return(false); } }
/// <summary> /// Запустить потоки линий связи и поток обмена данными со SCADA-Сервером /// </summary> private bool StartThreads() { // остановка потоков StopThreads(); try { // приём необходимых таблиц базы конфигурации от SCADA-Сервера bool fatalError = false; ConfigBaseSubset configBase = null; if (Settings.Params.ServerUse) { ServerComm = new ServerCommEx(Settings.Params, AppLog); if (!ReceiveConfigBase(out configBase)) { fatalError = true; AppLog.WriteError(string.Format(Localization.UseRussian ? "Запуск работы невозможен из-за проблем взаимодействия со SCADA-Сервером.{0}{1}" : "Unable to start operation due to SCADA-Server communication error.{0}{1}", Environment.NewLine, CommPhrases.RetryDelay)); ServerComm.Close(); ServerComm = null; } } if (!fatalError) { // настройка линий связи по базе конфигурации if (Settings.Params.ServerUse) { foreach (CommLine commLine in commLines) { commLine.Tune(configBase); } } // запуск потоков линий связи AppLog.WriteAction(Localization.UseRussian ? "Запуск линий связи" : "Start communication lines"); lock (commLines) { foreach (CommLine commLine in commLines) { commLine.ServerComm = ServerComm; commLine.Start(); } linesStarted = true; } // запуск приёма команд AppLog.WriteAction(Localization.UseRussian ? "Запуск приёма команд" : "Start receiving commands"); commandReader = new CommandReader(this); commandReader.StartThread(); } if (linesStarted) { // запуск потока записи информации о работе приложения infoThread = new Thread(new ThreadStart(WriteInfoExecute)); infoThread.Start(); workState = WorkStateNames.Normal; return(true); } else { workState = WorkStateNames.Error; return(false); } } catch (Exception ex) { AppLog.WriteException(ex, Localization.UseRussian ? "Ошибка при запуске работы" : "Error starting operation"); return(false); } finally { if (infoThread == null) { WriteInfo(); } } }