private void StatisticSubscriptionMetaDataReceived(object sender, EventArgs <DataSet> e) { LogStatusMessage("Loading received meta-data...", logToClient: false); DataSet dataSet = e.Argument; m_deviceDetails.Clear(); m_measurementDetails.Clear(); m_phasorDetails.Clear(); m_schemaVersion.Clear(); m_powerCalculation.Clear(); m_statusLights.Clear(); foreach (DataTable table in dataSet.Tables) { if (table.TableName == "DeviceDetail") { foreach (DataRow row in table.Rows) { DeviceDetail deviceDetail = new DeviceDetail { NodeID = row.ConvertField <Guid>("NodeID"), UniqueID = row.ConvertField <Guid>("UniqueID"), OriginalSource = row.ConvertField <string>("OriginalSource"), IsConcentrator = row.ConvertField <bool>("IsConcentrator"), Acronym = row.ConvertField <string>("Acronym"), Name = row.ConvertField <string>("Name"), AccessID = row.ConvertField <int>("AccessID"), ParentAcronym = row.ConvertField <string>("ParentAcronym"), ProtocolName = row.ConvertField <string>("ProtocolName"), FramesPerSecond = row.ConvertField <int>("FramesPerSecond"), CompanyAcronym = row.ConvertField <string>("CompanyAcronym"), VendorAcronym = row.ConvertField <string>("VendorAcronym"), VendorDeviceName = row.ConvertField <string>("VendorDeviceName"), Longitude = row.ConvertField <decimal>("Longitude"), Latitude = row.ConvertField <decimal>("Latitude"), InterconnectionName = row.ConvertField <string>("InterconnectionName"), ContactList = row.ConvertField <string>("ContactList"), Enabled = row.ConvertField <bool>("Enabled"), UpdatedOn = row.ConvertField <DateTime>("UpdatedOn") }; if (row.ConvertField <bool>("Enabled")) { StatusLight statusLight = new StatusLight { DeviceAcronym = row.ConvertField <string>("Acronym"), Timestamp = DateTime.MinValue, GoodData = false }; m_statusLights.Add(statusLight); } m_deviceDetails.Add(deviceDetail); } } else if (table.TableName == "MeasurementDetail") { foreach (DataRow row in table.Rows) { MeasurementDetail measurementDetail = new MeasurementDetail { DeviceAcronym = row.ConvertField <string>("DeviceAcronym"), ID = row.ConvertField <string>("ID"), SignalID = row.ConvertField <Guid>("SignalID"), PointTag = row.ConvertField <string>("PointTag"), SignalReference = row.ConvertField <string>("SignalReference"), SignalAcronym = row.ConvertField <string>("SignalAcronym"), PhasorSourceIndex = row.ConvertField <int>("PhasorSourceIndex"), Description = row.ConvertField <string>("Description"), Internal = row.ConvertField <bool>("Internal"), Enabled = row.ConvertField <bool>("Enabled"), UpdatedOn = row.ConvertField <DateTime>("UpdatedOn") }; m_measurementDetails.Add(measurementDetail); } } else if (table.TableName == "PhasorDetail") { foreach (DataRow row in table.Rows) { PhasorDetail phasorDetail = new PhasorDetail { DeviceAcronym = row.ConvertField <string>("DeviceAcronym"), Label = row.ConvertField <string>("Label"), Type = row.ConvertField <string>("Type"), Phase = row.ConvertField <string>("Phase"), SourceIndex = row.ConvertField <int>("SourceIndex"), UpdatedOn = row.ConvertField <DateTime>("UpdatedOn") }; m_phasorDetails.Add(phasorDetail); } } else if (table.TableName == "SchemaVersion") { foreach (DataRow row in table.Rows) { SchemaVersion schemaVersion = new SchemaVersion { VersionNumber = row.ConvertField <int>("VersionNumber") }; m_schemaVersion.Add(schemaVersion); } } else if (table.TableName == "PowerCalculation") { foreach (DataRow row in table.Rows) { PowerCalculation powerCalculation = new PowerCalculation() { VoltageAngleID = row.ConvertField <Guid>("VoltageAngleSignalID"), CurrentAngleID = row.ConvertField <Guid>("CurrentAngleSignalID") }; m_powerCalculation.Add(powerCalculation); } } } try { string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string ecaClientDataPath = Path.Combine(appData, "Grid Protection Alliance", "openECAClient"); string metadataCache = Path.Combine(ecaClientDataPath, "Metadata.xml"); Directory.CreateDirectory(ecaClientDataPath); if (FilePath.TryGetWriteLock(metadataCache)) { dataSet.WriteXml(metadataCache, XmlWriteMode.WriteSchema); Program.LogStatus($"Data set serialized with {dataSet.Tables.Count} tables..."); } } catch (Exception ex) { Program.LogException(new InvalidOperationException($"Failed to serialize dataset: {ex.Message}", ex)); } try { ClientScript?.metaDataReceived(); } catch (NullReferenceException) { // Client script unavailable for self-created hub instances } MetadataReceived?.Invoke(this, EventArgs.Empty); }
private void StatisticSubscriptionMetaDataReceived(object sender, EventArgs <DataSet> e) { LogStatusMessage("Loading received meta-data...", logToClient: false); DataSet dataSet = e.Argument; m_deviceDetails.Clear(); m_measurementDetails.Clear(); m_phasorDetails.Clear(); m_schemaVersion.Clear(); m_statusLights.Clear(); foreach (DataTable table in dataSet.Tables) { if (table.TableName == "DeviceDetail") { foreach (DataRow row in table.Rows) { DeviceDetail deviceDetail = new DeviceDetail { NodeID = row.ConvertField <Guid>("NodeID"), UniqueID = row.ConvertField <Guid>("UniqueID"), OriginalSource = row.ConvertField <string>("OriginalSource"), IsConcentrator = row.ConvertField <bool>("IsConcentrator"), Acronym = row.ConvertField <string>("Acronym"), Name = row.ConvertField <string>("Name"), AccessID = row.ConvertField <int>("AccessID"), ParentAcronym = row.ConvertField <string>("ParentAcronym"), ProtocolName = row.ConvertField <string>("ProtocolName"), FramesPerSecond = row.ConvertField <int>("FramesPerSecond"), CompanyAcronym = row.ConvertField <string>("CompanyAcronym"), VendorAcronym = row.ConvertField <string>("VendorAcronym"), VendorDeviceName = row.ConvertField <string>("VendorDeviceName"), Longitude = row.ConvertField <decimal>("Longitude"), Latitude = row.ConvertField <decimal>("Latitude"), InterconnectionName = row.ConvertField <string>("InterconnectionName"), ContactList = row.ConvertField <string>("ContactList"), Enabled = row.ConvertField <bool>("Enabled"), UpdatedOn = row.ConvertField <DateTime>("UpdatedOn") }; if (row.ConvertField <bool>("Enabled")) { StatusLight statusLight = new StatusLight { DeviceAcronym = row.ConvertField <string>("Acronym"), Timestamp = DateTime.MinValue, GoodData = false }; m_statusLights.Add(statusLight); } m_deviceDetails.Add(deviceDetail); } } else if (table.TableName == "MeasurementDetail") { foreach (DataRow row in table.Rows) { MeasurementDetail measurementDetail = new MeasurementDetail { DeviceAcronym = row.ConvertField <string>("DeviceAcronym"), ID = row.ConvertField <string>("ID"), SignalID = row.ConvertField <Guid>("SignalID"), PointTag = row.ConvertField <string>("PointTag"), SignalReference = row.ConvertField <string>("SignalReference"), SignalAcronym = row.ConvertField <string>("SignalAcronym"), PhasorSourceIndex = row.ConvertField <int>("PhasorSourceIndex"), Description = row.ConvertField <string>("Description"), Internal = row.ConvertField <bool>("Internal"), Enabled = row.ConvertField <bool>("Enabled"), UpdatedOn = row.ConvertField <DateTime>("UpdatedOn") }; m_measurementDetails.Add(measurementDetail); } } else if (table.TableName == "PhasorDetail") { foreach (DataRow row in table.Rows) { PhasorDetail phasorDetail = new PhasorDetail { DeviceAcronym = row.ConvertField <string>("DeviceAcronym"), Label = row.ConvertField <string>("Label"), Type = row.ConvertField <string>("Type"), Phase = row.ConvertField <string>("Phase"), SourceIndex = row.ConvertField <int>("SourceIndex"), UpdatedOn = row.ConvertField <DateTime>("UpdatedOn") }; m_phasorDetails.Add(phasorDetail); } } else if (table.TableName == "SchemaVersion") { foreach (DataRow row in table.Rows) { SchemaVersion schemaVersion = new SchemaVersion { VersionNumber = row.ConvertField <int>("VersionNumber") }; m_schemaVersion.Add(schemaVersion); } } } ClientScript?.metaDataReceived(); }