Add support for client-side replays (#4122)

This commit is contained in:
Leon Friedrich
2023-06-19 05:23:46 +12:00
committed by GitHub
parent 35902ad839
commit 9d4105abc7
55 changed files with 1552 additions and 783 deletions

View File

@@ -1,13 +1,10 @@
using System;
using System.Collections.Generic;
using Robust.Server.Console;
using Robust.Server.Player;
using Robust.Shared;
using Robust.Shared.Configuration;
using Robust.Shared.IoC;
using Robust.Shared.Network;
using Robust.Shared.Replays;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Upload;
using Robust.Shared.ViewVariables;
@@ -18,7 +15,6 @@ public sealed class NetworkResourceManager : SharedNetworkResourceManager
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IServerNetManager _serverNetManager = default!;
[Dependency] private readonly IConfigurationManager _cfgManager = default!;
[Dependency] private readonly IReplayRecordingManager _replay = default!;
[Dependency] private readonly IConGroupController _controller = default!;
public event Action<IPlayerSession, NetworkResourceUploadMessage>? OnResourceUploaded;
@@ -33,16 +29,6 @@ public sealed class NetworkResourceManager : SharedNetworkResourceManager
_serverNetManager.Connected += ServerNetManagerOnConnected;
_cfgManager.OnValueChanged(CVars.ResourceUploadingEnabled, value => Enabled = value, true);
_cfgManager.OnValueChanged(CVars.ResourceUploadingLimitMb, value => SizeLimit = value, true);
_replay.OnRecordingStarted += OnStartReplayRecording;
}
private void OnStartReplayRecording((MappingDataNode, List<object>) initReplayData)
{
// replays will need information about currently loaded extra resources
foreach (var (path, data) in ContentRoot.GetAllFiles())
{
initReplayData.Item2.Add(new ReplayResourceUploadMsg { RelativePath = path, Data = data });
}
}
/// <summary>
@@ -67,7 +53,7 @@ public sealed class NetworkResourceManager : SharedNetworkResourceManager
if (SizeLimit > 0f && msg.Data.Length * BytesToMegabytes > SizeLimit)
return;
ContentRoot.AddOrUpdateFile(msg.RelativePath, msg.Data);
base.ResourceUploadMsg(msg);
// Now we broadcast the message!
foreach (var channel in _serverNetManager.Channels)
@@ -75,7 +61,6 @@ public sealed class NetworkResourceManager : SharedNetworkResourceManager
channel.SendMessage(msg);
}
_replay.QueueReplayMessage(new ReplayResourceUploadMsg { RelativePath = msg.RelativePath, Data = msg.Data });
OnResourceUploaded?.Invoke(session, msg);
}