Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }