Exemplo n.º 1
0
        public void Append(Message message)
        {
            if (_stream == null)
            {
                throw new ObjectDisposedException("LogWriter");
            }

            if (message.Time != _time)
            {
                BlockHelper.WriteBlock(_stream, BlockType.Timestamp,
                                       new ArraySegment <byte>(LogHelper.DateTimeToBytes(message.Time)));
                _time = message.Time;
            }

            var blockType = message.Direction == MessageDirection.ClientToServer ? BlockType.Client : BlockType.Server;

            BlockHelper.WriteBlock(_stream, blockType, message.Data);

            _stream.Flush();
        }
Exemplo n.º 2
0
        private void ReadHeader()
        {
            BlockType blockType;

            byte[] data;

            {
                // magic bytes
                BlockHelper.ReadBlock(_stream, out blockType, out data);
                if (blockType != BlockType.MagicBytes)
                {
                    throw new FormatException("First block must be a MagicBytes block");
                }
                if (!data.SequenceEqual(LogHelper.Encoding.GetBytes(LogHelper.MagicBytes)))
                {
                    throw new FormatException("Incorrect magic bytes");
                }
            }

            do
            {
                BlockHelper.ReadBlock(_stream, out blockType, out data);
                switch (blockType)
                {
                case BlockType.Start:
                    break;

                case BlockType.Region:
                    Header.Region = LogHelper.Encoding.GetString(data);
                    break;

                case BlockType.MagicBytes:
                case BlockType.Timestamp:
                case BlockType.Server:
                case BlockType.Client:
                    throw new FormatException($"Unexpected block type in header '{blockType}'");
                }
            } while (blockType != BlockType.Start);
        }