/// <summary> /// Update current data /// </summary> protected void RefreshCurData() { try { var utcNowDT = DateTime.UtcNow; if (utcNowDT - curDataRefrDT > DataValidSpan) // data is out of date { curDataRefrDT = utcNowDT; var newCurTableAge = serverComm.ReceiveFileAge(ServerComm.Dirs.Cur, SrezAdapter.CurTableName); if (newCurTableAge == DateTime.MinValue) { // the slice file does not exist or there is no connection to the server tblCur.Clear(); tblCur.FileModTime = DateTime.MinValue; log.WriteError("Unable to receive the current data file modification time."); } else if (tblCur.FileModTime != newCurTableAge) // slice file changed { if (serverComm.ReceiveSrezTable(SrezAdapter.CurTableName, tblCur)) { tblCur.FileModTime = newCurTableAge; tblCur.LastFillTime = utcNowDT; } else { tblCur.FileModTime = DateTime.MinValue; } } } } catch (Exception ex) { tblCur.FileModTime = DateTime.MinValue; log.WriteException(ex, "Error refreshing the current data"); } }
/// <summary> /// Обновить текущие данные /// </summary> protected void RefreshCurData() { try { DateTime utcNowDT = DateTime.UtcNow; if (utcNowDT - curDataRefrDT > DataValidSpan) // данные устарели { curDataRefrDT = utcNowDT; DateTime newCurTableAge = serverComm.ReceiveFileAge(ServerComm.Dirs.Cur, SrezAdapter.CurTableName); if (newCurTableAge == DateTime.MinValue) // файл среза не существует или нет связи с сервером { tblCur.Clear(); tblCur.FileModTime = DateTime.MinValue; log.WriteError(Localization.UseRussian ? "Не удалось принять время изменения файла текущих данных." : "Unable to receive the current data file modification time."); } else if (tblCur.FileModTime != newCurTableAge) // файл среза изменён { if (serverComm.ReceiveSrezTable(SrezAdapter.CurTableName, tblCur)) { tblCur.FileModTime = newCurTableAge; tblCur.LastFillTime = utcNowDT; } else { tblCur.FileModTime = DateTime.MinValue; } } } } catch (Exception ex) { tblCur.FileModTime = DateTime.MinValue; log.WriteException(ex, Localization.UseRussian ? "Ошибка при обновлении текущих данных" : "Error refreshing the current data"); } }
/// <summary> /// Принять таблицу срезов от SCADA-Сервера /// </summary> public bool ReceiveSrezTable(string tableName, SrezTableLight srezTableLight) { Monitor.Enter(tcpLock); bool result = false; errMsg = ""; try { try { if (RestoreConnection()) { // определение директории таблицы Dirs dir = Dirs.Cur; if (tableName.Length > 0) { if (tableName[0] == 'h') dir = Dirs.Hour; else if (tableName[0] == 'm') dir = Dirs.Min; } // приём данных using (MemoryStream memStream = new MemoryStream()) { if (ReceiveFile(dir, tableName, memStream)) { SrezAdapter adapter = new SrezAdapter(); adapter.Stream = memStream; adapter.TableName = tableName; adapter.Fill(srezTableLight); result = true; } } } } finally { // очистка таблицы, если не удалось получить новые данные if (!result) { srezTableLight.Clear(); srezTableLight.TableName = tableName; } } } catch (Exception ex) { errMsg = (Localization.UseRussian ? "Ошибка при приёме таблицы срезов от SCADA-Сервера: " : "Error receiving data table from SCADA-Server: ") + ex.Message; WriteAction(errMsg, Log.ActTypes.Exception); } finally { Monitor.Exit(tcpLock); } return result; }