/// <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");
     }
 }
Exemple #2
0
        /// <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);
            }
        }
Exemple #3
0
 /// <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);
Exemple #4
0
        /// <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;
 }