# Session 09: Server Core — Initialization & Configuration ## Summary First half of server.go: server construction, validation, account configuration, resolver setup, trusted keys, and the `Start()` method. This is the server bootstrap path. ## Scope | Go File | Features | Feature IDs | Go LOC | |---------|----------|-------------|--------| | server/server.go (lines 85–2575) | ~76 | 2974–3050 | ~1,950 | | **Total** | **~76** | | **~1,950** | ### Key Features - `New`, `NewServer`, `NewServerFromConfig` — constructors - `validateOptions`, `validateCluster`, `validatePinnedCerts` — config validation - `configureAccounts`, `configureResolver`, `checkResolvePreloads` — account setup - `processTrustedKeys`, `initStampedTrustedKeys` — JWT trust chain - `Start` — main server startup (313 LOC) - Compression helpers (`selectCompressionMode`, `s2WriterOptions`, etc.) - Account lookup/register/update methods ## .NET Classes - `NatsServer` (partial — initialization, configuration, accounts) ## Test Files | Test File | Tests | Test IDs | |-----------|-------|----------| | server/server_test.go (partial) | ~20 | 2866–2885 | | **Total** | **~20** | | ## Dependencies - Session 01 (Foundation Types) - Session 03 (Configuration — ServerOptions) - Session 04 (Logging) - Session 05 (Subscription Index) - Session 06 (Authentication) ## .NET Target Location - `dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.cs` (partial class) - Consider: `NatsServer.Init.cs`, `NatsServer.Accounts.cs` ## Notes - `Server.Start()` is 313 LOC — the single largest function. Port carefully. - Account configuration deeply intertwines with JWT and resolver subsystems - Many methods reference route, gateway, and leafnode structures (forward declarations needed)