Table of Contents

Class CharacterSelectSystemRuntimeData

Namespace
FishMMO.Server.Implementation.LoginServer
Assembly
FishMMO.Server.dll

Runtime data container for CharacterSelectSystem mutable state.

public class CharacterSelectSystemRuntimeData : RuntimeDataContainer, IRuntimeDataContainer<INetworkManagerWrapper, ServerManager, NetworkConnection, IRuntimeDataContainer>, IRuntimeDataContainer, IServerComponent<INetworkManagerWrapper, ServerManager, NetworkConnection, IRuntimeDataContainer>, IServerComponent
Inheritance
CharacterSelectSystemRuntimeData
Implements
Inherited Members

Properties

InFlightListRequests

Per-connection in-flight gate for character LIST requests, tracked separately from select/delete.

public ConcurrentDictionary<int, byte> InFlightListRequests { get; }

Property Value

ConcurrentDictionary<int, byte>

Remarks

These were one shared pair, so the list request's cooldown also throttled selection. The client requests the list on arrival and the player then clicks Play — well inside the two-second window the list had just armed — and the selection was refused as "cooldown or request already in flight", surfacing as "Character selection failed. Please try again." Waiting a moment and clicking again worked, which is what made it look intermittent rather than systematic.

They are separate operations: the list is worth rate-limiting because a player can hold down Refresh, whereas a selection is a single deliberate act that follows the list immediately by design. Sharing one gate made the second impossible to do promptly after the first.

InFlightRequests

Per-connection in-flight gate for character select/delete requests.

public ConcurrentDictionary<int, byte> InFlightRequests { get; }

Property Value

ConcurrentDictionary<int, byte>

NextAllowedListRequestUtc

Per-connection cooldown tracker for character LIST requests. See InFlightListRequests.

public ConcurrentDictionary<int, DateTime> NextAllowedListRequestUtc { get; }

Property Value

ConcurrentDictionary<int, DateTime>

NextAllowedRequestUtc

Per-connection cooldown tracker: maps clientId to the earliest UTC time the next request is allowed.

public ConcurrentDictionary<int, DateTime> NextAllowedRequestUtc { get; }

Property Value

ConcurrentDictionary<int, DateTime>

Methods

Clear()

Clears all runtime data in this container, resetting it to initial state. Must be implemented by derived classes.

public override void Clear()

InitializeOnce()

Called once to initialize the data container. Must be implemented by derived classes.

public override ServerComponentInitializationStatus InitializeOnce()

Returns

ServerComponentInitializationStatus

OnDeinitialize()

Called when the data container is being deinitialized. Must be implemented by derived classes.

protected override void OnDeinitialize()