Token-condensed architecture reference for LLM navigation and modification.
src/
├── NexNet/ # Core library
├── NexNet.Generator/ # Roslyn source generator
├── NexNet.Quic/ # QUIC transport
├── NexNet.Asp/ # ASP.NET Core integration
├── NexNet.IntegrationTests/ # Integration tests (NUnit)
└── NexNet.Generator.Tests/ # Generator tests
Build: dotnet build src -c Release
Test: dotnet test src/NexNet.IntegrationTests -c Release
Single test: dotnet test ... --filter "FullyQualifiedName~TestName"
NexusClient.cs- Generic client managing connection, reconnection, proxy access, ping/timeoutNexusServer.cs- Generic server with Listener/Receiver modes, rate limiting, session managementNexusClientPool.cs- Connection pool with health checking, idle timeout, semaphore-controlled rental
NexusAttribute.cs-[Nexus<TNexus,TProxy>]marks classes for generation; NexusType=Server/ClientNexusMethodAttribute.cs- Optional[NexusMethod(id)]for manual method ID assignmentNexusVersionAttribute.cs-[NexusVersion]enables interface versioning with hash validationNexusAuthorizeAttribute.cs-[NexusAuthorize<TPermission>(...)]marks methods/collections for authorization;CacheDurationSecondsproperty (-1=server config, 0=never, >0=override)AuthorizeResult.cs- Enum: Allowed, Unauthorized, Disconnect
Base Classes:
NexusBase.cs- Common base; implements IMethodInvoker; manages CTS registry, pipe registration, poolingServerNexusBase.cs- Server base; OnAuthenticate, OnNexusInitialize, OnAuthorize virtuals; CheckAuthorization with ConcurrentDictionary cache; InvalidateAuthorizationCache() overloadsClientNexusBase.cs- Client base; OnReconnecting virtual
Contexts:
SessionContext.cs- Base context with session infoServerSessionContext.cs- Server context with session ID, client identityClientSessionContext.cs- Client context with server proxyLocalSessionContext.cs- Local session registry and key-value store
Proxy Infrastructure:
ProxyInvocationBase.cs- Base for generated proxies; Configure() sets session/mode; supports All/Client/Group modes; handles Unauthorized stateProxyUnauthorizedException.cs- Thrown client-side when server denies method invocationIProxyBase.cs- Interface for proxy client selection (All, Client(id), Group(name), etc.)
Routing & Registry:
IInvocationRouter.cs- Routes invocations to target sessionsLocalInvocationRouter.cs- Single-server routing implementationLocalSessionRegistry.cs- ConcurrentDictionary<long, INexusSession> session trackingLocalGroupRegistry.cs- Group membership with LocalSessionGroup managementNexusCollectionManager.cs- Manages synchronized collections per nexusSessionStore.cs- Per-session ConcurrentDictionary<string, object> for custom data
Protocol:
MessageType.cs- Enum: Ping, Disconnect variants (20-34 incl. DisconnectUnauthorized), DuplexPipeWrite (50), Greetings (100-105), Invocation (110-112)IInvocationMessage.cs- InvocationId, MethodId, Flags, Arguments; MaxArgumentSize=65,521 bytesClientGreetingMessage.cs- Client handshake: protocol version, nexus hash, auth tokenServerGreetingMessage.cs- Server response: session ID, server nexus hashInvocationMessage.cs- Remote method invocation payloadInvocationResultMessage.cs- Return value, exception, or Unauthorized from invocation; StateType: Unset, CompletedResult, Exception, UnauthorizedInvocationCancellationMessage.cs- Cancel ongoing invocation
Core Session:
NexusSession.cs- Central lifecycle: protocol, framing, routing; NnP protocol header [N][n][P][0x14][3 reserved][Version=1]NexusSession.Sending.cs- Write logic with MutexSlim serializationNexusSession.Receiving.cs- Read loop and message dispatchNexusSessionConfigurations.cs- Immutable session config passed at creationMessageHeader.cs- Mutable struct: Type + BodyLength for framingRegisteredInvocationState.cs- Pending invocation with TaskCompletionSource<Memory>
Internal State Flags: ProtocolConfirmed, InitialClientGreetingReceived, InitialServerGreetingReceived, NexusCompletedConnection, ReconnectingInProgress
Abstraction:
ITransport.cs- Extends IDuplexPipe; Input/Output pipes, RemoteAddress, RemotePort, CloseAsyncITransportListener.cs- Accepts incoming connections
Implementation:
SocketTransport.cs- Wraps System.Net.Sockets.Socket via SocketConnectionSocketTransportListener.cs- Socket-based listener
Configuration:
ConfigBase.cs- Base: Timeout, PingInterval, Logger, PipeOptionsClientConfig.cs- ConnectionTimeout, ReconnectionPolicy, Authenticate funcServerConfig.cs- AcceptorBacklog, Authenticate bool, RateLimiting config, AuthorizationCacheDuration (nullable TimeSpan)
Socket Pipeline (src/NexNet/Internals/Pipelines/):
SocketConnection.cs- Low-level socket-to-pipe adapter with read/write loopsSocketConnection.Connect.cs- Connection establishmentSocketConnection.Receive.cs- Receive loopSocketConnection.Send.cs- Send loop
Modes: NexusCollectionMode enum - Unset, ServerToClient (one-way), BiDirectional (two-way), Relay (read-only hierarchical)
Core:
INexusCollection.cs- Base interface for synchronized collectionsINexusList.cs- List interface: Add, Remove, Insert, Clear, CountNexusCollectionAttribute.cs- Decorates properties with sync mode
Lists (src/NexNet/Collections/Lists/):
NexusListServer.cs- Server-side with VersionedList; broadcasts via NexusBroadcastServerNexusListClient.cs- Client-side list implementationNexusListRelay.cs- Relay mode for hierarchical distributionNexusListTransformers.cs- Converts operations to/from sync messages
Versioned Operations (src/NexNet/Internals/Collections/Versioned/):
VersionedList.cs- Internal list with version counter and operation historyOperation.cs- Base: Insert, Remove, Modify, Move, Clear, Noop
PoolManager.cs- Central manager: message pools (offset=100), CTS pool, PipeManager pool, BufferWriter poolPoolBase.cs- Base pool classResettablePool.cs- Pool for resettable objectsMessagePool.cs- Pool for message objectsCancellationTokenSourcePool.cs- Pools CTS instancesBufferWriter.cs(Internals/Pipelines/Buffers/) - Custom IBufferWriter for message payloads
Session Pooling:
SessionPoolManager.cs- Manages proxy instance pooling per sessionProxyPool.cs- Pool of proxy instances
MutexSlim.cs- Lock-free async mutex; LockToken (sync), PendingLockToken (async)MutexSlim.LockState.cs- Lock state managementMutexSlim.AsyncDirectPendingLockSlab.cs- Efficient async waiting
INexusDuplexPipe.cs- Bidirectional pipe: Id, ReadyTask, CompleteTask, CompleteAsync()NexusPipeManager.cs- Manages duplex pipes for large data transfers
INexusLogger.cs- Hierarchical logger: Behaviors, FormattedPath, Log(), CreateLogger()NexusLogLevel.cs- Trace, Debug, Info, Warning, Error, CriticalConsoleLogger.cs- Console output implementationRollingLogger.cs- File rotation support
ConnectionRateLimiter.cs- Thread-safe: global limit, per-IP rate (sliding window), IP banning, whitelistConnectionRateLimitConfig.cs- MaxConcurrentConnections, MaxConnectionsPerSecond, BanDurationSecondsConnectionRateLimitResult.cs- Allowed, MaxConcurrentConnectionsExceeded, MaxConnectionsPerSecondExceeded, IpBanned
NexusGenerator.cs implements IIncrementalGenerator using ForAttributeWithMetadataName for incremental caching.
Three Phases:
-
Extraction:
Extraction/NexusDataExtractor.csparses [Nexus<,>]; extracts namespace, type, modifiers, generics, interfaces, methods, collections, authorization data (permissions, enum type, cache duration). -
Validation:
Validation/NexusValidator.csvalidates class partial/not nested/not generic/not abstract; method signatures; collection modes; version hashes; authorization (client nexus check, OnAuthorize override, mixed enum types, enum underlying type). -
Emission (Emission/):
NexusEmitter.cs- Generates partial class: CreateServer/CreateClient factories, collection propertiesMethodEmitter.cs- Generates method invoker delegatesInvocationInterfaceEmitter.cs- Generates proxy implementationCollectionEmitter.cs- Generates collection property code
NexusGenerationData.cs- Root record with all extracted dataNexusAttributeData.cs- IsServer, NexusTypeInvocationInterfaceData.cs- Methods, collections, versionMethodData.cs- Name, return type, parameters, method IDMethodParameterData.cs- Name, type, serializable flagCollectionData.cs- Name, type, mode, element type, AuthorizeData?AuthorizeData.cs- Permissions (ImmutableArray), PermissionEnumFQN, IsUnderlyingTypeCompatible, CacheDurationSeconds
TypeHasher.cs- xxHash32-based interface signature hashing for versioningDiagnosticDescriptors.cs- Error/warning/info definitions; NEXNET001-027 (024-027 are authorization: client nexus, missing OnAuthorize, mixed enums, non-int enum)SymbolUtilities.cs- Symbol inspection helpers
QuicTransport.cs- ITransport wrapping QuicConnection; adapts QuicStream to pipesQuicTransportListener.cs- ITransportListener managing QuicListenerQuicConfigs.cs- QuicServerConfig (SslServerAuthenticationOptions), QuicClientConfig
NexNetMiddlewareExtensions.cs provides AddNexusServer<>() for IServiceCollection and ApplyAuthentication().
WebSocket: WebSocket/WebSocketServerConfig.cs provides WebSocket-specific server config.
HttpSocket (HttpSocket/):
HttpSocketMiddleware.cs- ASP.NET middleware for dynamic HTTP/WebSocket upgradeHttpSocketServerConfig.cs- HttpSocket transport config
Utilities:
NexusILoggerBridgeLogger.cs- Adapts Microsoft.Extensions.Logging to INexusLoggerProxyHeaderResolver.cs- Extracts client IP from X-Forwarded-For
BaseTests.cs- Abstract base: lifecycle (SetUp/TearDown), transport type enum (Uds/Tcp/TcpTls/Quic/WebSocket/HttpSocket), config creation, port allocation, TLS cert loading, cleanup trackingBasePipeTests.cs- Pipe test base: LogMode enum (None/OnTestFail/Always), Setup() with auto server/client connectionNexusCollectionBaseTests.cs(Collections/) - Collection base: ConnectServerAndClient(), CreateRelayCollectionClientServers() for relay topologyBaseAspTests.cs- ASP.NET base: AspCreateAuthServices(), AspAppAuthConfigure()
NexusServerFactory.cs- Generic server wrapper tracking created nexuses in ConcurrentQueueTestInterfaces/BasicTestsInterfaces.cs- IClientNexus, IServerNexus interfaces; ClientNexus, ServerNexus implementations with event callbacksTestInterfaces/VersionedTestsInterfaces.cs- Version-specific test interfacesTestInterfaces/AuthorizationTestInterfaces.cs- Authorization test nexuses with delegate handlers and cache invalidation helpersUtilities.cs- Dequeue(), GetBytes(), GetValue(), InvokeAndNotifyAwait()TaskExtensions.cs- Timeout() overloads, AssertTimeout()Collections/CollectionHelpers.cs- WaitForEvent() extension, WaitForActionHandlerPipeStateManagerStub.cs- IPipeStateManager mock
Client Tests (7 files):
NexusClientTests.cs- Connection lifecycleNexusClientTests_Cancellation.cs- CancellationToken handlingNexusClientTests_InvalidInvocations.cs- Error casesNexusClientTests_ReceiveInvocation.cs- Receiving server callsNexusClientTests_SendInvocation.cs- Sending method callsNexusClientPoolTests.cs- Connection poolingInvocationIdTests.cs- ID management
Server Tests (7 files):
NexusServerTests.cs- Lifecycle and basic opsNexusServerTests_Cancellation.cs- CancellationTokenNexusServerTests_ReceiveInvocation.cs- Receiving client callsNexusServerTests_SendInvocation.cs- BroadcastingNexusServerTests_NexusInvocations.cs- Nexus-to-nexusNexusServerTests_NexusGroupInvocations.cs- Group invocationsNexusServerTests_Versioned.cs- VersioningNexusServerTests_Authorization.cs- Authorization: allow/deny/disconnect, collections, caching (TTL, expiry, invalidation, concurrent access), multi-permission
Collections (Collections/, 24 files):
NexusCollectionAckTests.cs- AcknowledgmentsNexusCollectionEventTests.cs- Change eventsNexusCollectionRelayTests.cs- Relay mode syncLists/NexusListTests.cs- CRUD operationsLists/NexusListTests_Events.cs- List eventsLists/FuzzTests.cs- Random operation testingLists/Transform*Tests.cs- Operation transforms (Insert/Remove/Modify/Move/Clear)
Pipes (Pipes/, 18 files):
NexusChannelReaderTests.cs/NexusChannelWriterTests.cs- Channel opsNexusPipeReaderTests.cs/NexusPipeWriterTests.cs- Pipe opsNexusDuplexPipeReaderTests.cs/NexusDuplexPipeWriterTests.cs- Duplex opsNexusClientTests_NexusDuplexPipe.cs/NexusServerTests_NexusDuplexPipe.cs- Integration
Security (Security/, 10 files):
AuthenticationTokenTests.cs- Token validationProtocolSecurityTests.cs- Protocol-levelRateLimitingTests.cs- Rate limitingConnectionRateLimiterUnitTests.cs- Unit testsServerVersionValidationTests.cs- Version validationRawTcpClient.cs- Raw TCP for protocol testing
Session Management (SessionManagement/, 6 files):
LocalSessionRegistryTests.cs- Registry opsLocalInvocationRouterTests.cs- RoutingLocalGroupRegistryTests.cs- Group managementMockNexusSession.cs- INexusSession mock with ShouldFailSend flag
Sockets (Sockets/, 7 files):
BufferWriterTests.cs- Buffer opsConnectTests.cs- Connection establishmentMutexSlimTests.cs- Sync primitivesSequenceTests.cs- ReadOnlySequence ops
Multi-Transport: [TestCase(Type.Uds)], [TestCase(Type.Tcp)], etc. for cross-transport coverage
Async Pattern: All async ops wrapped with .Timeout(seconds) using TaskExtensions
Setup Pattern:
var (server, client, clientNexus) = CreateServerClient(config, config);
await server.StartAsync().Timeout(1);
await client.ConnectAsync().Timeout(1);
Event Assertions: Set delegates on test nexus before operations, verify in callbacks
CSharpGeneratorRunner.cs runs NexusGenerator with source code via InitializeCompilation() and RunGenerator() returning Diagnostic[].
GeneratorTests.cs- Class modifier validation (partial, not abstract), interface validationGeneratorChannelTests.cs- Channel parameter generationGeneratorPipeTests.cs- Pipe parameter generationGeneratorCollectionTests.cs- Collection property generationTypeHasherTests.cs- Type hashing for method IDsVersioningTests.cs- Version string parsing, [NexusVersion] + [NexusMethod(id)] validationGeneratorAuthorizationTests.cs- Authorization attribute validation: client nexus error, missing OnAuthorize, mixed enums, non-int enum, cache duration, collection auth
Test Pattern: Pass C# source string to RunGenerator(), check Diagnostic[] for expected IDs (MustBePartial, etc.)
- NnP Header: 8 bytes
[N][n][P][0x14][reserved x3][Version=1] - Framing: Length-prefixed messages with MessageType
- Handshake: Client greeting -> Server greeting with version hash validation
- MemoryPack for method arguments
- 65,535-byte limit per invocation (use INexusDuplexPipe for larger)
- Client: Create -> ConnectAsync -> Proxy.Method() -> DisconnectAsync
- Server: Create -> StartAsync -> Accept connections -> OnConnected -> StopAsync
- Session: ITransport -> NexusSession -> Handshake -> InvokeMethod routing -> Disconnect
- All, AllExcept, Client, Clients, Group, Groups, GroupExceptCaller, GroupsExceptCaller
- ServerToClient: One-way push
- BiDirectional: Two-way sync
- Relay: Read-only hierarchical distribution
CreateServer(config, nexusFactory)/CreateClient(config, nexus)factory methods- Proxy implementations with method invokers
- Collection property getters/setters
Add new transport: Implement ITransport + ITransportListener; create Config extending ClientConfig/ServerConfig
Add hub method: Define in interface; generator creates invoker automatically
Add collection: Define INexusList property with [NexusCollection(mode)] attribute
Add test: Inherit from appropriate base (BaseTests/BasePipeTests/NexusCollectionBaseTests); use [TestCase(Type.X)] for transport coverage
Debug generator: Use Generator.Tests with CSharpGeneratorRunner.RunGenerator(); check Diagnostic[] output