using System;
using System.Buffers.Binary;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Robust.Shared.Asynchronous;
using Robust.Shared.ContentPack;
using Robust.Shared.IoC;
using Robust.Shared.Log;
using Robust.Shared.Network;
using Robust.Shared.Network.Transfer;
using Robust.Shared.Replays;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Utility;
namespace Robust.Shared.Upload;
///
/// Manager that allows resources to be added at runtime by admins.
/// They will be sent to all clients automatically.
///
public abstract class SharedNetworkResourceManager : IDisposable, IPostInjectInit
{
///
/// Transfer key for client -> server uploads by privileged clients.
///
internal const string TransferKeyNetworkUpload = "TransferKeyNetworkUpload";
///
/// Transfer key for server -> client downloads
///
internal const string TransferKeyNetworkDownload = "TransferKeyNetworkDownload";
[Dependency] private readonly IReplayRecordingManager _replay = default!;
[Dependency] protected readonly INetManager NetManager = default!;
[Dependency] protected readonly IResourceManager ResourceManager = default!;
[Dependency] protected readonly ITransferManager TransferManager = default!;
[Dependency] protected readonly ILogManager LogManager = default!;
[Dependency] private readonly ITaskManager _taskManager = default!;
protected ISawmill Sawmill = default!;
public const double BytesToMegabytes = 0.000001d;
///
/// The prefix for any and all downloaded network resources.
///
private static readonly ResPath Prefix = ResPath.Root / "Uploaded";
protected readonly MemoryContentRoot ContentRoot = new();
public bool FileExists(ResPath path)
=> ContentRoot.FileExists(path);
internal virtual void Initialize()
{
// Add our content root to the resource manager.
ResourceManager.AddRoot(Prefix, ContentRoot);
_replay.RecordingStarted += OnStartReplayRecording;
}
private void OnStartReplayRecording(MappingDataNode metadata, List