# 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` 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