public byte[] GetEncodedKeepAliveMessage(ushort sequenceNumber) { KeepAliveFrame keepAliveMessage = CreateKeepAliveFrame(sequenceNumber); if (keepAliveMessage == null) { return(null); } byte[] rawData; using (MemoryStream stream = new MemoryStream()) { keepAliveMessage.Encode(stream); rawData = stream.ToArray(); return(rawData); } }
private KeepAliveFrame CreateKeepAliveFrame(ushort sequenceNumber) { KeepAliveFrame keepAliveMessage = new KeepAliveFrame(); keepAliveMessage.ConfigurationVersion = m_MetaFrame.ConfigurationVersion; keepAliveMessage.NetworkMessageHeader = new NetworkMessageHeader(); keepAliveMessage.NetworkMessageHeader.PublisherID = new String(PublisherId); keepAliveMessage.NetworkMessageHeader.VersionAndFlags = 0xD1; keepAliveMessage.PayloadHeader = new DataSetPayloadHeader { Count = 1, DataSetWriterID = new[] { m_WriterId } }; keepAliveMessage.Flags1 = new DataSetFlags1(); keepAliveMessage.Flags1.RawValue = 0x8B; keepAliveMessage.Flags2 = new DataSetFlags2(); keepAliveMessage.Flags2.RawValue = 0x03; keepAliveMessage.DataSetMessageSequenceNumber = sequenceNumber; return(keepAliveMessage); }
private DataFrame ParseDataSetFrame(Stream inputStream, DataFrame dataFrame) { if (dataFrame == null) { return(null); } ushort writerID = dataFrame.PayloadHeader.DataSetWriterID[0]; MetaFrame metaFrame = null; if (dataFrame.Flags2.DataSetMessageType != DataSetMessageTypeEnum.KeepAlive) { metaFrame = m_LocalMetaStorage.RetrieveMetaMessageLocally(dataFrame.NetworkMessageHeader.PublisherID.Value, writerID, dataFrame.ConfigurationVersion); if (metaFrame == null) { Logger.Warn($"Could not find MetaMessage for {dataFrame.NetworkMessageHeader.PublisherID.Value} [{dataFrame.ConfigurationVersion}]"); return(dataFrame); } } switch (dataFrame.Flags2.DataSetMessageType) { case DataSetMessageTypeEnum.DataKeyFrame: if (Logger.IsDebugEnabled) { Logger.Debug("Starting decoding KeyFrame"); } KeyFrame keyFrame = KeyFrame.Decode(inputStream, dataFrame, metaFrame); if (keyFrame == null) { Logger.Error("Unable to decode KeyFrame"); } if (Logger.IsDebugEnabled && keyFrame != null) { Logger.Debug(keyFrame.ToString()); } return(keyFrame); case DataSetMessageTypeEnum.DataDeltaFrame: if (Logger.IsDebugEnabled) { Logger.Debug("Starting decoding DeltaFrame"); } DeltaFrame deltaFrame = DeltaFrame.Decode(inputStream, dataFrame, metaFrame); if (deltaFrame == null) { Logger.Error("Unable to decode DeltaFrame"); } if (Logger.IsDebugEnabled && deltaFrame != null) { Logger.Debug(deltaFrame.ToString()); } return(deltaFrame); case DataSetMessageTypeEnum.KeepAlive: if (dataFrame.NetworkMessageHeader?.PublisherID != null) { if (Logger.IsInfoEnabled) { Logger.Info($"KeepAlive from {dataFrame.NetworkMessageHeader.PublisherID}"); } KeepAliveFrame keepAliveFrame = KeepAliveFrame.Decode(inputStream, dataFrame); if (keepAliveFrame == null) { Logger.Error("Unable to decode keep alive frame"); } if (Logger.IsDebugEnabled && keepAliveFrame != null) { Logger.Debug(keepAliveFrame.ToString()); } } return(dataFrame); } return(null); }