/// <summary> /// Initializes a new instance of the <see cref="UaPublisher"/> class. /// </summary> internal UaPublisher(IUaPubSubConnection pubSubConnection, WriterGroupDataType writerGroupConfiguration) { m_pubSubConnection = pubSubConnection; m_writerGroupConfiguration = writerGroupConfiguration; Initialize(); }
/// <summary> /// Initializes a new instance of the <see cref="UaPublisher"/> class. /// </summary> internal UaPublisher(IUaPubSubConnection pubSubConnection, WriterGroupDataType writerGroupConfiguration) { if (pubSubConnection == null) { throw new ArgumentNullException(nameof(pubSubConnection)); } if (writerGroupConfiguration == null) { throw new ArgumentNullException(nameof(writerGroupConfiguration)); } m_pubSubConnection = pubSubConnection; m_writerGroupConfiguration = writerGroupConfiguration; Initialize(); }
/// <summary> /// Initializes a new instance of the <see cref="UaPublisher"/> class. /// </summary> internal UaPublisher(IUaPubSubConnection pubSubConnection, WriterGroupDataType writerGroupConfiguration) { if (pubSubConnection == null) { throw new ArgumentNullException(nameof(pubSubConnection)); } if (writerGroupConfiguration == null) { throw new ArgumentNullException(nameof(writerGroupConfiguration)); } m_pubSubConnection = pubSubConnection; m_writerGroupConfiguration = writerGroupConfiguration; m_writerGroupPublishState = new WriterGroupPublishState(); m_intervalRunner = new IntervalRunner(m_writerGroupConfiguration.Name, m_writerGroupConfiguration.PublishingInterval, CanPublish, PublishMessages); }
/// <summary> /// Handler for ConnectionRemoved event /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UaPubSubConfigurator_ConnectionRemoved(object sender, ConnectionEventArgs e) { IUaPubSubConnection removedUaPubSubConnection = null; foreach (var connection in m_uaPubSubConnections) { if (connection.PubSubConnectionConfiguration.Equals(e.PubSubConnectionDataType)) { removedUaPubSubConnection = connection; break; } } if (removedUaPubSubConnection != null) { m_uaPubSubConnections.Remove(removedUaPubSubConnection); removedUaPubSubConnection.Dispose(); } }
public void MyTestInitialize() { // Create a publisher application // todo refactor to use the MessagesHelper create configuration string publisherConfigurationFile = Utils.GetAbsoluteFilePath(PublisherConfigurationFileName, true, true, false); m_publisherApplication = UaPubSubApplication.Create(publisherConfigurationFile); Assert.IsNotNull(m_publisherApplication, "m_publisherApplication should not be null"); // Get the publisher configuration m_publisherConfiguration = m_publisherApplication.UaPubSubConfigurator.PubSubConfiguration; Assert.IsNotNull(m_publisherConfiguration, "m_publisherConfiguration should not be null"); // Get first connection Assert.IsNotNull(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be null"); Assert.IsNotEmpty(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be empty"); m_firstPublisherConnection = m_publisherApplication.PubSubConnections[0]; Assert.IsNotNull(m_firstPublisherConnection, "m_firstPublisherConnection should not be null"); // Read the first writer group Assert.IsNotEmpty(m_publisherConfiguration.Connections[0].WriterGroups, "pubSubConfigConnection.WriterGroups should not be empty"); m_firstWriterGroup = m_publisherConfiguration.Connections[0].WriterGroups[0]; Assert.IsNotNull(m_firstWriterGroup, "m_firstWriterGroup should not be null"); Assert.IsNotNull(m_publisherConfiguration.PublishedDataSets, "m_publisherConfiguration.PublishedDataSets should not be null"); Assert.IsNotEmpty(m_publisherConfiguration.PublishedDataSets, "m_publisherConfiguration.PublishedDataSets should not be empty"); // Create a subscriber application string subscriberConfigurationFile = Utils.GetAbsoluteFilePath(SubscriberConfigurationFileName, true, true, false); m_subscriberApplication = UaPubSubApplication.Create(subscriberConfigurationFile); Assert.IsNotNull(m_subscriberApplication, "m_subscriberApplication should not be null"); // Get the subscriber configuration m_subscriberConfiguration = m_subscriberApplication.UaPubSubConfigurator.PubSubConfiguration; Assert.IsNotNull(m_subscriberConfiguration, "m_subscriberConfiguration should not be null"); // Read the first reader group m_firstReaderGroup = m_subscriberConfiguration.Connections[0].ReaderGroups[0]; Assert.IsNotNull(m_firstWriterGroup, "m_firstReaderGroup should not be null"); m_firstDataSetReaderType = GetFirstDataSetReader(); }
public void MyTestInitialize() { // Create a publisher application m_publisherApplication = UaPubSubApplication.Create(PublisherConfigurationFileName); Assert.IsNotNull(m_publisherApplication, "m_publisherApplication should not be null"); // Get the publisher configuration m_publisherConfiguration = m_publisherApplication.UaPubSubConfigurator.PubSubConfiguration; Assert.IsNotNull(m_publisherConfiguration, "m_publisherConfiguration should not be null"); // Get first connection Assert.IsNotNull(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be null"); Assert.IsNotEmpty(m_publisherConfiguration.Connections, "m_publisherConfiguration.Connections should not be empty"); m_firstPublisherConnection = m_publisherApplication.PubSubConnections[0]; Assert.IsNotNull(m_firstPublisherConnection, "m_firstPublisherConnection should not be null"); // Read the first writer group Assert.IsNotEmpty(m_publisherConfiguration.Connections[0].WriterGroups, "pubSubConfigConnection.WriterGroups should not be empty"); m_firstWriterGroup = m_publisherConfiguration.Connections[0].WriterGroups[0]; Assert.IsNotNull(m_firstWriterGroup, "m_firstWriterGroup should not be null"); Assert.IsNotNull(m_publisherConfiguration.PublishedDataSets, "m_publisherConfiguration.PublishedDataSets should not be null"); Assert.IsNotEmpty(m_publisherConfiguration.PublishedDataSets, "m_publisherConfiguration.PublishedDataSets should not be empty"); // Create a subscriber application m_subscriberApplication = UaPubSubApplication.Create(SubscriberConfigurationFileName); Assert.IsNotNull(m_subscriberApplication, "m_subscriberApplication should not be null"); // Get the subscriber configuration m_subscriberConfiguration = m_subscriberApplication.UaPubSubConfigurator.PubSubConfiguration; Assert.IsNotNull(m_subscriberConfiguration, "m_subscriberConfiguration should not be null"); // Read the first reader group m_firstReaderGroup = m_subscriberConfiguration.Connections[0].ReaderGroups[0]; Assert.IsNotNull(m_firstWriterGroup, "m_firstReaderGroup should not be null"); m_firstDataSetReaderType = GetFirstDataSetReader(); }
public void ValidateMqttLocalPubSubConnectionWithUadp( [Values((byte)1, (UInt16)1, (UInt32)1, (UInt64)1, "abc")] object publisherId) { RestartMosquitto("mosquitto"); //Arrange UInt16 writerGroupId = 1; string mqttLocalBrokerUrl = "mqtt://localhost:1883"; ITransportProtocolConfiguration mqttConfiguration = new MqttClientProtocolConfiguration(version: EnumMqttProtocolVersion.V500); UadpNetworkMessageContentMask uadpNetworkMessageContentMask = UadpNetworkMessageContentMask.PublisherId | UadpNetworkMessageContentMask.WriterGroupId | UadpNetworkMessageContentMask.PayloadHeader; UadpDataSetMessageContentMask uadpDataSetMessageContentMask = UadpDataSetMessageContentMask.None; DataSetFieldContentMask dataSetFieldContentMask = DataSetFieldContentMask.None; DataSetMetaDataType[] dataSetMetaDataArray = new DataSetMetaDataType[] { MessagesHelper.CreateDataSetMetaData1("DataSet1"), MessagesHelper.CreateDataSetMetaData2("DataSet2"), MessagesHelper.CreateDataSetMetaData3("DataSet3") }; PubSubConfigurationDataType publisherConfiguration = MessagesHelper.CreatePublisherConfiguration( Profiles.PubSubMqttUadpTransport, mqttLocalBrokerUrl, publisherId: publisherId, writerGroupId: writerGroupId, uadpNetworkMessageContentMask: uadpNetworkMessageContentMask, uadpDataSetMessageContentMask: uadpDataSetMessageContentMask, dataSetFieldContentMask: dataSetFieldContentMask, dataSetMetaDataArray: dataSetMetaDataArray, nameSpaceIndexForData: kNamespaceIndexAllTypes); Assert.IsNotNull(publisherConfiguration, "publisherConfiguration should not be null"); // Configure the mqtt publisher configuration with the MQTTbroker PubSubConnectionDataType mqttPublisherConnection = MessagesHelper.GetConnection(publisherConfiguration, publisherId); Assert.IsNotNull(mqttPublisherConnection, "The MQTT publisher connection is invalid."); mqttPublisherConnection.ConnectionProperties = mqttConfiguration.ConnectionProperties; Assert.IsNotNull(mqttPublisherConnection.ConnectionProperties, "The MQTT publisher connection properties are not valid."); // Create publisher application for multiple datasets UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); MessagesHelper.LoadData(publisherApplication, kNamespaceIndexAllTypes); IUaPubSubConnection publisherConnection = publisherApplication.PubSubConnections.First(); Assert.IsNotNull(publisherConnection, "Publisher first connection should not be null"); Assert.IsNotNull(publisherConfiguration.Connections.First(), "publisherConfiguration first connection should not be null"); Assert.IsNotNull(publisherConfiguration.Connections.First().WriterGroups.First(), "publisherConfiguration first writer group of first connection should not be null"); var networkMessages = publisherConnection.CreateNetworkMessages(publisherConfiguration.Connections.First().WriterGroups.First(), new WriterGroupPublishState()); Assert.IsNotNull(networkMessages, "connection.CreateNetworkMessages shall not return null"); Assert.GreaterOrEqual(networkMessages.Count, 1, "connection.CreateNetworkMessages shall have at least one network message"); UadpNetworkMessage uaNetworkMessage = networkMessages[0] as UadpNetworkMessage; Assert.IsNotNull(uaNetworkMessage, "networkMessageEncode should not be null"); bool hasDataSetWriterId = (uadpNetworkMessageContentMask & UadpNetworkMessageContentMask.PayloadHeader) != 0; PubSubConfigurationDataType subscriberConfiguration = MessagesHelper.CreateSubscriberConfiguration( Profiles.PubSubMqttUadpTransport, mqttLocalBrokerUrl, publisherId: publisherId, writerGroupId: writerGroupId, setDataSetWriterId: hasDataSetWriterId, uadpNetworkMessageContentMask: uadpNetworkMessageContentMask, uadpDataSetMessageContentMask: uadpDataSetMessageContentMask, dataSetFieldContentMask: dataSetFieldContentMask, dataSetMetaDataArray: dataSetMetaDataArray, nameSpaceIndexForData: kNamespaceIndexAllTypes); Assert.IsNotNull(subscriberConfiguration, "subscriberConfiguration should not be null"); // Create subscriber application for multiple datasets UaPubSubApplication subscriberApplication = UaPubSubApplication.Create(subscriberConfiguration); Assert.IsNotNull(subscriberApplication, "subscriberApplication should not be null"); Assert.IsNotNull(subscriberApplication.PubSubConnections.First(), "subscriberConfiguration first connection should not be null"); // Configure the mqtt subscriber configuration with the MQTTbroker PubSubConnectionDataType mqttSubcriberConnection = MessagesHelper.GetConnection(subscriberConfiguration, publisherId); Assert.IsNotNull(mqttSubcriberConnection, "The MQTT subscriber connection is invalid."); mqttSubcriberConnection.ConnectionProperties = mqttConfiguration.ConnectionProperties; Assert.IsNotNull(mqttSubcriberConnection.ConnectionProperties, "The MQTT subscriber connection properties are not valid."); var dataSetReaders = subscriberApplication.PubSubConnections.First().GetOperationalDataSetReaders(); Assert.IsNotNull(dataSetReaders, "dataSetReaders should not be null"); IUaPubSubConnection subscriberConnection = subscriberApplication.PubSubConnections.First(); Assert.IsNotNull(subscriberConnection, "Subscriber first connection should not be null"); //Act // it will signal if the uadp message was received from local ip m_uaDataShutdownEvent = new ManualResetEvent(false); subscriberApplication.DataReceived += UaPubSubApplication_DataReceived; subscriberConnection.Start(); publisherConnection.Start(); //Assert if (!m_uaDataShutdownEvent.WaitOne(kEstimatedPublishingTime)) { Assert.Fail("The UADP message was not received"); } subscriberConnection.Stop(); publisherConnection.Stop(); }
public void ValidateMqttLocalPubSubConnectionWithJson( [Values((byte)1, (UInt16)1, (UInt32)1, (UInt64)1, "abc")] object publisherId, [Values(0, 10000)] double metaDataUpdateTime) { RestartMosquitto("mosquitto"); //Arrange UInt16 writerGroupId = 1; string mqttLocalBrokerUrl = "mqtt://localhost:1883"; ITransportProtocolConfiguration mqttConfiguration = new MqttClientProtocolConfiguration(version: EnumMqttProtocolVersion.V500); JsonNetworkMessageContentMask jsonNetworkMessageContentMask = JsonNetworkMessageContentMask.NetworkMessageHeader | JsonNetworkMessageContentMask.PublisherId | JsonNetworkMessageContentMask.DataSetMessageHeader; JsonDataSetMessageContentMask jsonDataSetMessageContentMask = JsonDataSetMessageContentMask.None; DataSetFieldContentMask dataSetFieldContentMask = DataSetFieldContentMask.None; DataSetMetaDataType[] dataSetMetaDataArray = new DataSetMetaDataType[] { MessagesHelper.CreateDataSetMetaData1("DataSet1"), MessagesHelper.CreateDataSetMetaData2("DataSet2"), MessagesHelper.CreateDataSetMetaData3("DataSet3"), MessagesHelper.CreateDataSetMetaDataAllTypes("DataSet4") }; PubSubConfigurationDataType publisherConfiguration = MessagesHelper.CreatePublisherConfiguration( Profiles.PubSubMqttJsonTransport, mqttLocalBrokerUrl, publisherId: publisherId, writerGroupId: writerGroupId, jsonNetworkMessageContentMask: jsonNetworkMessageContentMask, jsonDataSetMessageContentMask: jsonDataSetMessageContentMask, dataSetFieldContentMask: dataSetFieldContentMask, dataSetMetaDataArray: dataSetMetaDataArray, nameSpaceIndexForData: NamespaceIndexAllTypes, metaDataUpdateTime); Assert.IsNotNull(publisherConfiguration, "publisherConfiguration should not be null"); // Configure the mqtt publisher configuration with the MQTTbroker PubSubConnectionDataType mqttPublisherConnection = MessagesHelper.GetConnection(publisherConfiguration, publisherId); Assert.IsNotNull(mqttPublisherConnection, "The MQTT publisher connection is invalid."); mqttPublisherConnection.ConnectionProperties = mqttConfiguration.ConnectionProperties; Assert.IsNotNull(mqttPublisherConnection.ConnectionProperties, "The MQTT publisher connection properties are not valid."); // Create publisher application for multiple datasets UaPubSubApplication publisherApplication = UaPubSubApplication.Create(publisherConfiguration); MessagesHelper.LoadData(publisherApplication, NamespaceIndexAllTypes); IUaPubSubConnection publisherConnection = publisherApplication.PubSubConnections.First(); Assert.IsNotNull(publisherConnection, "Publisher first connection should not be null"); Assert.IsNotNull(publisherConfiguration.Connections.First(), "publisherConfiguration first connection should not be null"); Assert.IsNotNull(publisherConfiguration.Connections.First().WriterGroups.First(), "publisherConfiguration first writer group of first connection should not be null"); var networkMessages = publisherConnection.CreateNetworkMessages(publisherConfiguration.Connections.First().WriterGroups.First(), new WriterGroupPublishState()); Assert.IsNotNull(networkMessages, "connection.CreateNetworkMessages shall not return null"); Assert.GreaterOrEqual(networkMessages.Count, 1, "connection.CreateNetworkMessages shall have at least one network message"); List <JsonNetworkMessage> uaNetworkMessages = MessagesHelper.GetJsonUaDataNetworkMessages(networkMessages.Cast <JsonNetworkMessage>().ToList()); Assert.IsNotNull(uaNetworkMessages, "Json ua-data entries are missing from configuration!"); List <JsonNetworkMessage> uaMetaDataNetworkMessages = MessagesHelper.GetJsonUaMetaDataNetworkMessages(networkMessages.Cast <JsonNetworkMessage>().ToList()); Assert.IsNotNull(uaMetaDataNetworkMessages, "Json ua-metadata entries are missing from configuration!"); bool hasDataSetWriterId = (jsonNetworkMessageContentMask & JsonNetworkMessageContentMask.DataSetMessageHeader) != 0 && (jsonDataSetMessageContentMask & JsonDataSetMessageContentMask.DataSetWriterId) != 0; PubSubConfigurationDataType subscriberConfiguration = MessagesHelper.CreateSubscriberConfiguration( Profiles.PubSubMqttJsonTransport, mqttLocalBrokerUrl, publisherId: publisherId, writerGroupId: writerGroupId, setDataSetWriterId: hasDataSetWriterId, jsonNetworkMessageContentMask: jsonNetworkMessageContentMask, jsonDataSetMessageContentMask: jsonDataSetMessageContentMask, dataSetFieldContentMask: dataSetFieldContentMask, dataSetMetaDataArray: dataSetMetaDataArray, nameSpaceIndexForData: NamespaceIndexAllTypes); Assert.IsNotNull(subscriberConfiguration, "subscriberConfiguration should not be null"); // Create subscriber application for multiple datasets UaPubSubApplication subscriberApplication = UaPubSubApplication.Create(subscriberConfiguration); Assert.IsNotNull(subscriberApplication, "subscriberApplication should not be null"); Assert.IsNotNull(subscriberApplication.PubSubConnections.First(), "subscriberConfiguration first connection should not be null"); // Configure the mqtt subscriber configuration with the MQTTbroker PubSubConnectionDataType mqttSubcriberConnection = MessagesHelper.GetConnection(subscriberConfiguration, publisherId); Assert.IsNotNull(mqttSubcriberConnection, "The MQTT subscriber connection is invalid."); mqttSubcriberConnection.ConnectionProperties = mqttConfiguration.ConnectionProperties; Assert.IsNotNull(mqttSubcriberConnection.ConnectionProperties, "The MQTT subscriber connection properties are not valid."); var dataSetReaders = subscriberApplication.PubSubConnections.First().GetOperationalDataSetReaders(); Assert.IsNotNull(dataSetReaders, "dataSetReaders should not be null"); IUaPubSubConnection subscriberConnection = subscriberApplication.PubSubConnections.First(); Assert.IsNotNull(subscriberConnection, "Subscriber first connection should not be null"); //Act // it will signal if the mqtt message was received from local ip m_uaDataShutdownEvent = new ManualResetEvent(false); // it will signal if the mqtt metadata message was received from local ip m_uaMetaDataShutdownEvent = new ManualResetEvent(false); // it will signal if the changed configuration message was received on local ip m_uaConfigurationUpdateEvent = new ManualResetEvent(false); subscriberApplication.DataReceived += UaPubSubApplication_DataReceived; subscriberApplication.MetaDataReceived += UaPubSubApplication_MetaDataReceived; subscriberApplication.ConfigurationUpdating += UaPubSubApplication_ConfigurationUpdating; subscriberConnection.Start(); publisherConnection.Start(); //Assert if (!m_uaDataShutdownEvent.WaitOne(EstimatedPublishingTime)) { Assert.Fail("The JSON message was not received"); } if (!m_uaMetaDataShutdownEvent.WaitOne(EstimatedPublishingTime)) { Assert.Fail("The JSON metadata message was not received"); } subscriberConnection.Stop(); publisherConnection.Stop(); }