Skip to content

Commit

Permalink
Fix clients dropping values for uninitialized network variables
Browse files Browse the repository at this point in the history
  • Loading branch information
Xilophor committed Jul 30, 2024
1 parent 6c10c6e commit db7e8de
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [v3.1.1]

### Fixed
- Fixed Shutdown error for `UnnamedMessageHandler`.
- Fixed `LNetworkVariable` update error when the variable has not yet been created on the client.

## [v3.1.0]

### Added
Expand Down
9 changes: 7 additions & 2 deletions LethalNetworkAPI/Internal/UnnamedMessageHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ internal class UnnamedMessageHandler : IDisposable
private const string LibIdentifier = "LethalNetworkAPI";

internal HashSet<LNetworkVariableBase> DirtyBois { get; } = [];
internal Dictionary<string, object?> UnInitializedValues { get; } = new();
internal static event Action? VariableCheck;

internal UnnamedMessageHandler()
Expand Down Expand Up @@ -228,7 +229,7 @@ private void ReceiveMessage(ulong clientId, FastBufferReader reader)

private void HandleMessage(ulong clientId, string messageID, EMessageType messageType, object? messageData, ulong[] targetClients)
{
LNetworkVariableBase? variable;
LNetworkVariableBase variable;

var nonServerTargets = targetClients.Where(i => i != NetworkManager.ServerClientId && i != clientId).ToArray();

Expand Down Expand Up @@ -271,7 +272,11 @@ private void HandleMessage(ulong clientId, string messageID, EMessageType messag
break;

case EMessageType.Variable | EMessageType.DataUpdate:
variable = LNetworkVariables[messageID];
if (!LNetworkVariables.TryGetValue(messageID, out variable))
{
this.UnInitializedValues[messageID] = messageData;
break;
}

if (this.IsServer)
{
Expand Down
8 changes: 7 additions & 1 deletion LethalNetworkAPI/Public/LNetworkVariable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,13 @@ private LNetworkVariable(
UnnamedMessageHandler.VariableCheck += this.CheckForDirt;
UnnamedMessageHandler.LNetworkVariables.Add(this.Identifier, this);

this.SetDirty(true);
if (!(UnnamedMessageHandler.Instance?.UnInitializedValues.TryGetValue(this.Identifier, out var value) ?? false)) return;

this._value = (TData)value!;
UnnamedMessageHandler.Instance.UnInitializedValues.Remove(this.Identifier);

this.OnValueChanged?.Invoke(this._previousValue, this._value);
this._previousValue = this._value;
}

/// <summary>
Expand Down

0 comments on commit db7e8de

Please sign in to comment.