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
-
IRuntimeDataContainer<INetworkManagerWrapper, ServerManager, NetworkConnection, IRuntimeDataContainer>
- 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
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
NextAllowedListRequestUtc
Per-connection cooldown tracker for character LIST requests. See InFlightListRequests.
public ConcurrentDictionary<int, DateTime> NextAllowedListRequestUtc { get; }
Property Value
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
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
OnDeinitialize()
Called when the data container is being deinitialized. Must be implemented by derived classes.
protected override void OnDeinitialize()