Example #1
0
        void StreamData(IStreamReader streamReader)
        {
            var streamId        = streamReader.ReadUint32();
            var streamOffset    = streamReader.ReadUint32();
            var lastInStream    = streamReader.ReadUint8();
            var payloadInPacket = streamReader.ReadLength();
            var octetCount      = streamReader.RemainingOctetCount;

            if (octetCount != payloadInPacket)
            {
                var e = new Exception(string.Format("ERROR: {0} {1}", octetCount, payloadInPacket));
                log.Exception(e);
            }
            // log.Debug("Stream id:{0:X} offset:{1} octetCount:{2}", streamId, streamOffset, octetCount);

            var alreadyWrittenOctetCount = streamStorage.FileSize(streamId);
            var streamDataOctets         = streamReader.ReadOctets(octetCount);

            var startIndexInStreamDataOctets = alreadyWrittenOctetCount - streamOffset;

            if (startIndexInStreamDataOctets < 0)
            {
                log.Warning("We have been sent data with a 'gap'! Can not write.");
                return;
            }

            if (startIndexInStreamDataOctets >= streamDataOctets.Length)
            {
                log.Warning("This is old news and contains no new octets. Skipping...");
                return;
            }
            var startWritePosition = (uint)startIndexInStreamDataOctets;
            var octetsToWrite      = (uint)(streamDataOctets.Length - startIndexInStreamDataOctets);

            // log.Debug("Streamx id:{0:X} startIndexInData:{1} octetsToWrite:{2}", streamId, startIndexInStreamDataOctets, octetsToWrite);
            streamStorage.Append(streamId, streamDataOctets, startWritePosition, octetsToWrite);
            InternalOnStreamData(streamId, streamDataOctets, startWritePosition, octetsToWrite);
        }