/// <summary> /// Encode Payload Header /// </summary> /// <param name="encoder"></param> private void EncodePayloadHeader(BinaryEncoder encoder) { if ((NetworkMessageContentMask & UadpNetworkMessageContentMask.PayloadHeader) != 0) { encoder.WriteByte("Count", (byte)m_uadpDataSetMessages.Count); // Collect DataSetSetMessages headers for (int index = 0; index < m_uadpDataSetMessages.Count; index++) { UadpDataSetMessage uadpDataSetMessage = m_uadpDataSetMessages[index]; if (uadpDataSetMessage.DataSet != null) { encoder.WriteUInt16("DataSetWriterId", uadpDataSetMessage.DataSetWriterId); } } } }
/// <summary> /// Create the network message built from the provided writerGroupConfiguration /// </summary> /// <param name="writerGroupConfiguration"></param> /// <returns></returns> public override UaNetworkMessage CreateNetworkMessage(WriterGroupDataType writerGroupConfiguration) { UadpWriterGroupMessageDataType messageSettings = ExtensionObject.ToEncodeable(writerGroupConfiguration.MessageSettings) as UadpWriterGroupMessageDataType; if (messageSettings == null) { //Wrong configuration of writer group MessageSettings return(null); } //Create list of dataSet messages to be sent List <UadpDataSetMessage> dataSetMessages = new List <UadpDataSetMessage>(); foreach (DataSetWriterDataType dataSetWriter in writerGroupConfiguration.DataSetWriters) { //check if dataSetWriter enabled if (dataSetWriter.Enabled) { DataSet dataSet = Application.DataCollector.CollectData(dataSetWriter.DataSetName); if (dataSet != null) { UadpDataSetWriterMessageDataType dataSetMessageSettings = ExtensionObject.ToEncodeable(dataSetWriter.MessageSettings) as UadpDataSetWriterMessageDataType; // check MessageSettings to see how to encode DataSet if (dataSetMessageSettings != null) { UadpDataSetMessage uadpDataSetMessage = new UadpDataSetMessage(dataSet); uadpDataSetMessage.DataSetWriterId = dataSetWriter.DataSetWriterId; uadpDataSetMessage.SetMessageContentMask((UadpDataSetMessageContentMask)dataSetMessageSettings.DataSetMessageContentMask); uadpDataSetMessage.SetFieldContentMask((DataSetFieldContentMask)dataSetWriter.DataSetFieldContentMask); uadpDataSetMessage.SequenceNumber = (ushort)(Utils.IncrementIdentifier(ref m_dataSetSequenceNumber) % UInt16.MaxValue); uadpDataSetMessage.ConfiguredSize = dataSetMessageSettings.ConfiguredSize; uadpDataSetMessage.DataSetOffset = dataSetMessageSettings.DataSetOffset; uadpDataSetMessage.TimeStamp = DateTime.UtcNow; uadpDataSetMessage.Status = (ushort)StatusCodes.Good; dataSetMessages.Add(uadpDataSetMessage); } } } } //cancel send if no dataset message if (dataSetMessages.Count == 0) { return(null); } UadpNetworkMessage uadpNetworkMessage = new UadpNetworkMessage(dataSetMessages); uadpNetworkMessage.SetNetworkMessageContentMask((UadpNetworkMessageContentMask)messageSettings.NetworkMessageContentMask); uadpNetworkMessage.WriterGroupId = writerGroupConfiguration.WriterGroupId; // Network message header uadpNetworkMessage.PublisherId = PubSubConnectionConfiguration.PublisherId.Value; uadpNetworkMessage.SequenceNumber = (ushort)(Utils.IncrementIdentifier(ref m_sequenceNumber) % UInt16.MaxValue); // Writer group header uadpNetworkMessage.GroupVersion = messageSettings.GroupVersion; uadpNetworkMessage.NetworkMessageNumber = 1; //only one network message per publish return(uadpNetworkMessage); }