Skip to content

Middleware Pipeline

Nalix.Network has two middleware layers:

  • buffer middleware before deserialization
  • packet middleware around handler execution

Source mapping

  • src/Nalix.Network/Middleware/NetworkBufferMiddlewarePipeline.cs
  • src/Nalix.Network/Middleware/INetworkBufferMiddleware.cs
  • src/Nalix.Network/Middleware/MiddlewarePipeline.cs
  • src/Nalix.Network/Middleware/IPacketMiddleware.cs

Buffer middleware

Buffer middleware works on raw IBufferLease data before a packet exists.

Use it for:

  • decryption
  • decompression
  • low-level validation
  • early frame rejection

Contract:

Task<IBufferLease> InvokeAsync(
    IBufferLease buffer,
    IConnection connection,
    CancellationToken ct,
    Func<IBufferLease, CancellationToken, Task<IBufferLease>> next)

Packet middleware

Packet middleware works on PacketContext<TPacket> after deserialization.

Use it for:

  • permissions
  • timeouts
  • rate limiting
  • concurrency limits
  • auditing

Contract:

Task InvokeAsync(
    PacketContext<TPacket> context,
    Func<CancellationToken, Task> next)

Ordering

Ordering is driven by:

  • [MiddlewareOrder]
  • [MiddlewareStage]

The packet pipeline supports:

  • Inbound
  • Outbound
  • Both

Built-in middleware

Common built-in packet middleware:

  • PermissionMiddleware
  • RateLimitMiddleware
  • ConcurrencyMiddleware
  • TimeoutMiddleware

Mental model

socket buffer
  -> buffer middleware
  -> deserialize packet
  -> packet middleware
  -> handler
  -> response path

Basic usage

options.NetworkPipeline.Use(new SampleAuditBufferMiddleware());
options.PacketPipeline.Use(new SampleAuditMiddleware());