# Session 07: Protocol Parser

## Summary

The NATS protocol parser — parses raw bytes from client connections into protocol operations (PUB, SUB, UNSUB, CONNECT, etc.). Extremely performance-critical.

## Scope

| Go File | Features | Feature IDs | Go LOC |
|---------|----------|-------------|--------|
| server/parser.go | 5 | 2588–2592 | 1,165 |
| **Total** | **5** | | **1,165** |

## .NET Classes

- `ProtocolParser` — state-machine parser for NATS wire protocol
- `ClientConnection` (partial — parser-related methods only)

## Test Files

| Test File | Tests | Test IDs |
|-----------|-------|----------|
| server/parser_test.go | 17 | 2598–2614 |
| **Total** | **17** | |

## Dependencies

- Session 01 (Foundation Types — protocol constants, errors)

## .NET Target Location

- `dotnet/src/ZB.MOM.NatsNet.Server/Protocol/`

## Notes

- Only 5 features but 1,165 LOC — these are large state-machine functions
- Must use `ReadOnlySpan<byte>` and avoid allocations in the parse loop
- The parser is called for every byte received — benchmark after porting
- Consider using `System.IO.Pipelines` for buffer management
