/// <summary> /// Creates a Subscriber PubSubConfiguration object for UDP & UADP programmatically. /// </summary> /// <returns></returns> private static PubSubConfigurationDataType CreateSubscriberConfiguration_MqttUadp(string urlAddress) { // Define a PubSub connection with PublisherId 3 PubSubConnectionDataType pubSubConnection1 = new PubSubConnectionDataType(); pubSubConnection1.Name = "Subscriber Connection MQTT UADP"; pubSubConnection1.Enabled = true; pubSubConnection1.PublisherId = (UInt16)3; pubSubConnection1.TransportProfileUri = Profiles.PubSubMqttUadpTransport; NetworkAddressUrlDataType address = new NetworkAddressUrlDataType(); // Specify the local Network interface name to be used // e.g. address.NetworkInterface = "Ethernet"; // Leave empty to subscribe on all available local interfaces. address.NetworkInterface = String.Empty; address.Url = urlAddress; pubSubConnection1.Address = new ExtensionObject(address); // Configure the mqtt specific configuration with the MQTTbroker ITransportProtocolConfiguration mqttConfiguration = new MqttClientProtocolConfiguration(version: EnumMqttProtocolVersion.V500); pubSubConnection1.ConnectionProperties = mqttConfiguration.ConnectionProperties; string brokerQueueName = "Uadp_WriterGroup_1"; string brokerMetaData = "$Metadata"; #region Define ReaderGroup1 ReaderGroupDataType readerGroup1 = new ReaderGroupDataType(); readerGroup1.Name = "ReaderGroup 1"; readerGroup1.Enabled = true; readerGroup1.MaxNetworkMessageSize = 1500; readerGroup1.MessageSettings = new ExtensionObject(new ReaderGroupMessageDataType()); readerGroup1.TransportSettings = new ExtensionObject(new ReaderGroupTransportDataType()); #region Define DataSetReader 'Simple' for PublisherId = (UInt16)1, DataSetWriterId = 1 DataSetReaderDataType dataSetReaderSimple = new DataSetReaderDataType(); dataSetReaderSimple.Name = "Reader 1 MQTT UADP"; dataSetReaderSimple.PublisherId = (UInt16)3; dataSetReaderSimple.WriterGroupId = 0; dataSetReaderSimple.DataSetWriterId = 1; dataSetReaderSimple.Enabled = true; dataSetReaderSimple.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData; dataSetReaderSimple.KeyFrameCount = 1; BrokerDataSetReaderTransportDataType brokerTransportSettings = new BrokerDataSetReaderTransportDataType() { QueueName = brokerQueueName, MetaDataQueueName = $"{brokerQueueName}/{brokerMetaData}", }; dataSetReaderSimple.TransportSettings = new ExtensionObject(brokerTransportSettings); UadpDataSetReaderMessageDataType uadpDataSetReaderMessage = new UadpDataSetReaderMessageDataType() { GroupVersion = 0, NetworkMessageNumber = 0, NetworkMessageContentMask = (uint)(uint)(UadpNetworkMessageContentMask.PublisherId | UadpNetworkMessageContentMask.GroupHeader | UadpNetworkMessageContentMask.WriterGroupId | UadpNetworkMessageContentMask.PayloadHeader | UadpNetworkMessageContentMask.GroupVersion | UadpNetworkMessageContentMask.NetworkMessageNumber | UadpNetworkMessageContentMask.SequenceNumber), DataSetMessageContentMask = (uint)(UadpDataSetMessageContentMask.Status | UadpDataSetMessageContentMask.SequenceNumber), }; dataSetReaderSimple.MessageSettings = new ExtensionObject(uadpDataSetReaderMessage); // Create and set DataSetMetaData for DataSet Simple DataSetMetaDataType simpleMetaData = CreateDataSetMetaDataSimple(); dataSetReaderSimple.DataSetMetaData = simpleMetaData; // Create and set SubscribedDataSet TargetVariablesDataType subscribedDataSet = new TargetVariablesDataType(); subscribedDataSet.TargetVariables = new FieldTargetDataTypeCollection(); foreach (var fieldMetaData in simpleMetaData.Fields) { subscribedDataSet.TargetVariables.Add(new FieldTargetDataType() { DataSetFieldId = fieldMetaData.DataSetFieldId, TargetNodeId = new NodeId(fieldMetaData.Name, NamespaceIndexSimple), AttributeId = Attributes.Value, OverrideValueHandling = OverrideValueHandling.OverrideValue, OverrideValue = new Variant(TypeInfo.GetDefaultValue(fieldMetaData.DataType, (int)ValueRanks.Scalar)) }); } dataSetReaderSimple.SubscribedDataSet = new ExtensionObject(subscribedDataSet); #endregion readerGroup1.DataSetReaders.Add(dataSetReaderSimple); #region Define DataSetReader 'AllTypes' for PublisherId = (UInt16)1, DataSetWriterId = 2 DataSetReaderDataType dataSetReaderAllTypes = new DataSetReaderDataType(); dataSetReaderAllTypes.Name = "Reader 2 MQTT UADP"; dataSetReaderAllTypes.PublisherId = (UInt16)3; dataSetReaderAllTypes.WriterGroupId = 0; dataSetReaderAllTypes.DataSetWriterId = 2; dataSetReaderAllTypes.Enabled = true; dataSetReaderAllTypes.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData; dataSetReaderAllTypes.KeyFrameCount = 1; dataSetReaderAllTypes.TransportSettings = new ExtensionObject(brokerTransportSettings); uadpDataSetReaderMessage = new UadpDataSetReaderMessageDataType() { GroupVersion = 0, NetworkMessageNumber = 0, NetworkMessageContentMask = (uint)(uint)(UadpNetworkMessageContentMask.PublisherId | UadpNetworkMessageContentMask.GroupHeader | UadpNetworkMessageContentMask.WriterGroupId | UadpNetworkMessageContentMask.PayloadHeader | UadpNetworkMessageContentMask.GroupVersion | UadpNetworkMessageContentMask.NetworkMessageNumber | UadpNetworkMessageContentMask.SequenceNumber), DataSetMessageContentMask = (uint)(UadpDataSetMessageContentMask.Status | UadpDataSetMessageContentMask.SequenceNumber), }; dataSetReaderAllTypes.MessageSettings = new ExtensionObject(uadpDataSetReaderMessage); // Create and set DataSetMetaData for DataSet AllTypes DataSetMetaDataType allTypesMetaData = CreateDataSetMetaDataAllTypes(); dataSetReaderAllTypes.DataSetMetaData = allTypesMetaData; // Create and set SubscribedDataSet subscribedDataSet = new TargetVariablesDataType(); subscribedDataSet.TargetVariables = new FieldTargetDataTypeCollection(); foreach (var fieldMetaData in allTypesMetaData.Fields) { subscribedDataSet.TargetVariables.Add(new FieldTargetDataType() { DataSetFieldId = fieldMetaData.DataSetFieldId, TargetNodeId = new NodeId(fieldMetaData.Name, NamespaceIndexAllTypes), AttributeId = Attributes.Value, OverrideValueHandling = OverrideValueHandling.OverrideValue, OverrideValue = new Variant(TypeInfo.GetDefaultValue(fieldMetaData.DataType, (int)ValueRanks.Scalar)) }); } dataSetReaderAllTypes.SubscribedDataSet = new ExtensionObject(subscribedDataSet); #endregion readerGroup1.DataSetReaders.Add(dataSetReaderAllTypes); #endregion pubSubConnection1.ReaderGroups.Add(readerGroup1); //create pub sub configuration root object PubSubConfigurationDataType pubSubConfiguration = new PubSubConfigurationDataType(); pubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection() { pubSubConnection1 }; return(pubSubConfiguration); }
/// <summary> /// Creates a Subscriber PubSubConfiguration object for MQTT & Json programmatically. /// </summary> /// <returns></returns> private static PubSubConfigurationDataType CreateSubscriberConfiguration_MqttJson(string urlAddress) { // Define a PubSub connection with PublisherId 2 PubSubConnectionDataType pubSubConnection1 = new PubSubConnectionDataType(); pubSubConnection1.Name = "Subscriber Connection3 MQTT Json"; pubSubConnection1.Enabled = true; pubSubConnection1.PublisherId = (UInt16)2; pubSubConnection1.TransportProfileUri = Profiles.PubSubMqttJsonTransport; NetworkAddressUrlDataType address = new NetworkAddressUrlDataType(); // Specify the local Network interface name to be used // e.g. address.NetworkInterface = "Ethernet"; // Leave empty to subscribe on all available local interfaces. address.NetworkInterface = String.Empty; address.Url = urlAddress; pubSubConnection1.Address = new ExtensionObject(address); // Configure the mqtt specific configuration with the MQTTbroker ITransportProtocolConfiguration mqttConfiguration = new MqttClientProtocolConfiguration(version: EnumMqttProtocolVersion.V500); pubSubConnection1.ConnectionProperties = mqttConfiguration.ConnectionProperties; // Define "Simple" MetaData DataSetMetaDataType simpleMetaData = CreateDataSetMetaDataSimple(); // Define "AllTypes" Metadata DataSetMetaDataType allTypesMetaData = CreateDataSetMetaDataAllTypes(); #region Define ReaderGroup1 ReaderGroupDataType readerGroup1 = new ReaderGroupDataType(); readerGroup1.Name = "ReaderGroup 1"; readerGroup1.Enabled = true; readerGroup1.MaxNetworkMessageSize = 1500; readerGroup1.MessageSettings = new ExtensionObject(new ReaderGroupMessageDataType()); readerGroup1.TransportSettings = new ExtensionObject(new ReaderGroupTransportDataType()); #region Define DataSetReader1 'Simple' for PublisherId = (UInt16)3, DataSetWriterId = 1 DataSetReaderDataType dataSetReaderSimple = new DataSetReaderDataType(); dataSetReaderSimple.Name = "Reader 1 MQTT JSON Variant Encoding"; dataSetReaderSimple.PublisherId = (UInt16)2; dataSetReaderSimple.WriterGroupId = 1; dataSetReaderSimple.DataSetWriterId = 1; dataSetReaderSimple.Enabled = true; dataSetReaderSimple.DataSetFieldContentMask = 0;// Variant encoding; dataSetReaderSimple.KeyFrameCount = 1; dataSetReaderSimple.DataSetMetaData = simpleMetaData; BrokerDataSetReaderTransportDataType brokerTransportSettings = new BrokerDataSetReaderTransportDataType() { QueueName = "Json_WriterGroup_1", }; dataSetReaderSimple.TransportSettings = new ExtensionObject(brokerTransportSettings); JsonDataSetReaderMessageDataType jsonDataSetReaderMessage = new JsonDataSetReaderMessageDataType() { NetworkMessageContentMask = (uint)(uint)(JsonNetworkMessageContentMask.NetworkMessageHeader | JsonNetworkMessageContentMask.DataSetMessageHeader | JsonNetworkMessageContentMask.PublisherId | JsonNetworkMessageContentMask.DataSetClassId | JsonNetworkMessageContentMask.ReplyTo), DataSetMessageContentMask = (uint)(JsonDataSetMessageContentMask.DataSetWriterId | JsonDataSetMessageContentMask.MetaDataVersion | JsonDataSetMessageContentMask.SequenceNumber | JsonDataSetMessageContentMask.Status | JsonDataSetMessageContentMask.Timestamp), }; dataSetReaderSimple.MessageSettings = new ExtensionObject(jsonDataSetReaderMessage); TargetVariablesDataType subscribedDataSet = new TargetVariablesDataType(); subscribedDataSet.TargetVariables = new FieldTargetDataTypeCollection(); foreach (var fieldMetaData in simpleMetaData.Fields) { subscribedDataSet.TargetVariables.Add(new FieldTargetDataType() { DataSetFieldId = fieldMetaData.DataSetFieldId, TargetNodeId = new NodeId(fieldMetaData.Name, NamespaceIndexSimple), AttributeId = Attributes.Value, OverrideValueHandling = OverrideValueHandling.OverrideValue, OverrideValue = new Variant(TypeInfo.GetDefaultValue(fieldMetaData.DataType, (int)ValueRanks.Scalar)) }); } dataSetReaderSimple.SubscribedDataSet = new ExtensionObject(subscribedDataSet); #endregion readerGroup1.DataSetReaders.Add(dataSetReaderSimple); #region Define DataSetReader2 'AllTypes' for PublisherId = (UInt16)2, DataSetWriterId = 1 DataSetReaderDataType dataSetReaderAllTypes = new DataSetReaderDataType(); dataSetReaderAllTypes.Name = "Reader 2 MQTT JSON RawData Encoding"; dataSetReaderAllTypes.PublisherId = (UInt16)2; dataSetReaderAllTypes.WriterGroupId = 1; dataSetReaderAllTypes.DataSetWriterId = 2; dataSetReaderAllTypes.Enabled = true; dataSetReaderAllTypes.DataSetFieldContentMask = (uint)DataSetFieldContentMask.RawData; dataSetReaderAllTypes.KeyFrameCount = 1; dataSetReaderAllTypes.DataSetMetaData = allTypesMetaData; brokerTransportSettings = new BrokerDataSetReaderTransportDataType() { QueueName = "Json_WriterGroup_1", }; dataSetReaderAllTypes.TransportSettings = new ExtensionObject(brokerTransportSettings); jsonDataSetReaderMessage = new JsonDataSetReaderMessageDataType() { NetworkMessageContentMask = (uint)(JsonNetworkMessageContentMask.NetworkMessageHeader | JsonNetworkMessageContentMask.DataSetMessageHeader | JsonNetworkMessageContentMask.PublisherId | JsonNetworkMessageContentMask.DataSetClassId | JsonNetworkMessageContentMask.ReplyTo), DataSetMessageContentMask = (uint)(JsonDataSetMessageContentMask.DataSetWriterId | JsonDataSetMessageContentMask.MetaDataVersion | JsonDataSetMessageContentMask.SequenceNumber | JsonDataSetMessageContentMask.Status | JsonDataSetMessageContentMask.Timestamp), }; dataSetReaderAllTypes.MessageSettings = new ExtensionObject(jsonDataSetReaderMessage); subscribedDataSet = new TargetVariablesDataType(); subscribedDataSet.TargetVariables = new FieldTargetDataTypeCollection(); foreach (var fieldMetaData in allTypesMetaData.Fields) { subscribedDataSet.TargetVariables.Add(new FieldTargetDataType() { DataSetFieldId = fieldMetaData.DataSetFieldId, TargetNodeId = new NodeId(fieldMetaData.Name, NamespaceIndexSimple), AttributeId = Attributes.Value, OverrideValueHandling = OverrideValueHandling.OverrideValue, OverrideValue = new Variant(TypeInfo.GetDefaultValue(fieldMetaData.DataType, (int)ValueRanks.Scalar)) }); } dataSetReaderAllTypes.SubscribedDataSet = new ExtensionObject(subscribedDataSet); #endregion readerGroup1.DataSetReaders.Add(dataSetReaderAllTypes); #endregion pubSubConnection1.ReaderGroups.Add(readerGroup1); //create pub sub configuration root object PubSubConfigurationDataType pubSubConfiguration = new PubSubConfigurationDataType(); pubSubConfiguration.Connections = new PubSubConnectionDataTypeCollection() { pubSubConnection1 }; return(pubSubConfiguration); }