private void DecoderOnMessageDecoded(object sender, MessageDecodedEventArgs eventArgs) { if (eventArgs.Message != null) { try { if (eventArgs.Message is DataFrame dataFrame && dataFrame.Items != null) { DataPointValue[] files = dataFrame.Items.Where(i => i is OPCUAFile) .ToArray(); foreach (OPCUAFile file in files) { dataFrame.Items.Remove(file); FileReceived?.Invoke(this, new FileReceivedEventArgs(file, eventArgs.Topic, dataFrame.NetworkMessageHeader.PublisherID.Value)); } if (dataFrame.Items.Count > 0) { MessageReceived?.Invoke(this, eventArgs); } } else if (eventArgs.Message is MetaFrame metaFrame) { MetaMessageReceived?.Invoke(this, eventArgs); } else { UnknownMessageReceived?.Invoke(this, eventArgs); } }
public void SendDataToApp(ProcessDataSet dataSet, string topic, string publisherId = null) { if (!string.IsNullOrEmpty(publisherId)) { ClientId = publisherId; dataSet.PublisherId = publisherId; } if (string.IsNullOrEmpty(topic)) { topic = Settings.Client.DefaultPublisherTopicName; topic = Client.CreateTopicName(topic, ClientId, dataSet.GetWriterId(), "Meas", dataSet.GetDataSetType()); } MessageDecodedEventArgs args = new MessageDecodedEventArgs(dataSet.GenerateDateFrame(), topic); MessageReceived?.Invoke(this, args); }
public void OnMessageDecoded(object sender, MessageDecodedEventArgs eventArgs) { NetworkMessage parsedMessage = eventArgs.Message; if (parsedMessage == null || (parsedMessage.NetworkMessageHeader.ExtendedFlags2.MessageType != MessageType.DataSetMessage && parsedMessage.NetworkMessageHeader.ExtendedFlags2.MessageType != MessageType.DiscoveryResponse)) { return; } if (parsedMessage.NetworkMessageHeader == null) { return; } string publisherID = parsedMessage.NetworkMessageHeader.PublisherID.Value; Publisher publisher = new Publisher { PublisherID = publisherID }; if (parsedMessage is ChunkedMessage chunkMessage) { publisher.DataSetWriterID = chunkMessage.PayloadHeader.DataSetWriterID; publisher.NumberOfChunkedMessage++; } if (parsedMessage is DataFrame dataMessage) { publisher.DataSetWriterID = dataMessage.PayloadHeader.DataSetWriterID[0]; if (dataMessage.Flags2?.DataSetMessageType == DataSetMessageTypeEnum.KeepAlive) { publisher.NumberOfKeepAliveMessages++; } else { publisher.Major = dataMessage.ConfigurationVersion.Major; publisher.Minor = dataMessage.ConfigurationVersion.Minor; } } if (parsedMessage is MetaFrame metaMessage) { InitDetailsFromMeta(metaMessage); publisher.Major = metaMessage.ConfigurationVersion.Major; publisher.Minor = metaMessage.ConfigurationVersion.Minor; publisher.DataSetWriterID = metaMessage.DataSetWriterID; publisher.NumberOfMetaMessages++; } if (parsedMessage is KeyFrame keyMessage) { DataPointCollection dp = new DataPointCollection { PublisherID = publisherID, Values = keyMessage.Items, DataSetWriterID = keyMessage.PayloadHeader.DataSetWriterID[0], Timestamp = keyMessage.Timestamp.ToFileTime() }; m_ValueQueue.Add(dp); publisher.DataSetWriterID = keyMessage.PayloadHeader.DataSetWriterID[0]; publisher.NumberOfKeyMessages++; publisher.Timestamp = keyMessage.Timestamp; } if (parsedMessage is DeltaFrame deltaMessage) { DataPointCollection dp = new DataPointCollection { PublisherID = publisherID, Values = deltaMessage.Items, DataSetWriterID = deltaMessage.PayloadHeader.DataSetWriterID[0], Timestamp = deltaMessage.Timestamp.ToFileTime() }; m_ValueQueue.Add(dp); publisher.DataSetWriterID = deltaMessage.PayloadHeader.DataSetWriterID[0]; publisher.NumberOfDeltaMessages++; publisher.Timestamp = deltaMessage.Timestamp; } m_PublisherQueue.Add(publisher); }