public Message ReadMessage() { while (_stream.Position != _stream.Length) { BlockType blockType; byte[] data; BlockHelper.ReadBlock(_stream, out blockType, out data); MessageDirection direction; switch (blockType) { case BlockType.Timestamp: _time = LogHelper.BytesToTimeSpan(data); break; case BlockType.Client: direction = MessageDirection.ClientToServer; return(new Message(_time, direction, new ArraySegment <byte>(data))); case BlockType.Server: direction = MessageDirection.ServerToClient; return(new Message(_time, direction, new ArraySegment <byte>(data))); default: throw new FormatException($"Unexpected blocktype {blockType}"); } } return(null); }
private void ReadHeader() { BlockType blockType; do { byte[] data; BlockHelper.ReadBlock(_stream, out blockType, out data); } while (blockType != BlockType.Start); }
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); }