/// <summary> /// Generate and publish a message /// </summary> private void PublishMessage() { try { UaNetworkMessage uaNetworkMessage = m_pubSubConnection.CreateNetworkMessage(m_writerGroupConfiguration); if (uaNetworkMessage != null) { bool success = m_pubSubConnection.PublishNetworkMessage(uaNetworkMessage); Utils.Trace(Utils.TraceMasks.Information, "UaPublisher.PublishNetworkMessage, WriterGroupId:{0}; success = {1}", m_writerGroupConfiguration.WriterGroupId, success.ToString()); } } catch (Exception e) { // Unexpected exception in PublishMessage Utils.Trace(e, "UaPublisher.PublishMessage"); } }
/// <summary> /// Raises the <see cref="UaPubSubApplication.DataReceived"/> event. /// </summary> /// <param name="networkMessage">The network message that was received.</param> /// <param name="source">The source of the received event.</param> protected void RaiseNetworkMessageDataReceivedEvent(UaNetworkMessage networkMessage, string source) { if (networkMessage.DataSetMessages != null && networkMessage.DataSetMessages.Count > 0) { SubscribedDataEventArgs subscribedDataEventArgs = new SubscribedDataEventArgs() { NetworkMessage = networkMessage, Source = source }; //trigger notification for received subscribed data set Application.RaiseDataReceivedEvent(subscribedDataEventArgs); Utils.Trace("Connection '{0}' - RaiseNetworkMessageDataReceivedEvent() from source={0}, with {1} DataSets", source, subscribedDataEventArgs.NetworkMessage.DataSetMessages.Count); } else { Utils.Trace("Connection '{0}' - RaiseNetworkMessageDataReceivedEvent() message from source={0} cannot be decoded.", source); } }
/// <summary> /// Publish the network message /// </summary> /// <param name="networkMessage">The network message that needs to be published.</param> /// <returns>True if send was successfull.</returns> public abstract bool PublishNetworkMessage(UaNetworkMessage networkMessage);
/// <summary> /// Processes the decoded <see cref="UaNetworkMessage"/> and /// raises the <see cref="UaPubSubApplication.DataReceived"/> or <see cref="UaPubSubApplication.MetaDataReceived"/> event. /// </summary> /// <param name="networkMessage">The network message that was received.</param> /// <param name="source">The source of the received event.</param> protected void ProcessDecodedNetworkMessage(UaNetworkMessage networkMessage, string source) { if (networkMessage.IsMetaDataMessage) { // update configuration of the corresponding reader objects found in this connection configuration List <DataSetReaderDataType> allReaders = GetAllDataSetReaders(); foreach (DataSetReaderDataType reader in allReaders) { bool raiseChangedEvent = false; lock (m_lock) { // check if reader's MetaData shall be updated if (reader.DataSetWriterId != 0 && reader.DataSetWriterId == networkMessage.DataSetWriterId && (reader.DataSetMetaData == null || !Utils.IsEqual(reader.DataSetMetaData.ConfigurationVersion, networkMessage.DataSetMetaData.ConfigurationVersion))) { raiseChangedEvent = true; } } if (raiseChangedEvent) { // raise event ConfigurationUpdatingEventArgs metaDataUpdatedEventArgs = new ConfigurationUpdatingEventArgs() { ChangedProperty = ConfigurationProperty.DataSetMetaData, Parent = reader, NewValue = networkMessage.DataSetMetaData, Cancel = false }; // raise the ConfigurationUpdating event and see if configuration shall be changed m_uaPubSubApplication.RaiseConfigurationUpdatingEvent(metaDataUpdatedEventArgs); // check to see if the event handler canceled the save of new MetaData if (!metaDataUpdatedEventArgs.Cancel) { Utils.Trace("Connection '{0}' - The MetaData is updated for DataSetReader '{1}' with DataSetWriterId={2}", source, reader.Name, networkMessage.DataSetWriterId); lock (m_lock) { reader.DataSetMetaData = networkMessage.DataSetMetaData; } } } } SubscribedDataEventArgs subscribedDataEventArgs = new SubscribedDataEventArgs() { NetworkMessage = networkMessage, Source = source }; // trigger notification for received DataSet MetaData Application.RaiseMetaDataReceivedEvent(subscribedDataEventArgs); Utils.Trace( "Connection '{0}' - RaiseMetaDataReceivedEvent() from source={0}", source, subscribedDataEventArgs.NetworkMessage.DataSetMessages.Count); } else if (networkMessage.DataSetMessages != null && networkMessage.DataSetMessages.Count > 0) { SubscribedDataEventArgs subscribedDataEventArgs = new SubscribedDataEventArgs() { NetworkMessage = networkMessage, Source = source }; //trigger notification for received subscribed DataSet Application.RaiseDataReceivedEvent(subscribedDataEventArgs); Utils.Trace( "Connection '{0}' - RaiseNetworkMessageDataReceivedEvent() from source={0}, with {1} DataSets", source, subscribedDataEventArgs.NetworkMessage.DataSetMessages.Count); } else { Utils.Trace("Connection '{0}' - RaiseNetworkMessageDataReceivedEvent() message from source={0} cannot be decoded.", source); } }
/// <summary> /// Constructor /// </summary> /// <param name="dataSetDecodeErrorReason"></param> /// <param name="networkMessage"></param> /// <param name="dataSetReader"></param> public DataSetDecodeErrorEventArgs(DataSetDecodeErrorReason dataSetDecodeErrorReason, UaNetworkMessage networkMessage, DataSetReaderDataType dataSetReader) { m_dataSetDecodeErrorReason = dataSetDecodeErrorReason; m_networkMessage = networkMessage; m_dataSetReader = dataSetReader; }