Files
OldThink/Content.Server/_White/Jukebox/ServerJukeboxSongsSyncManager.cs

69 lines
1.7 KiB
C#

using Content.Server.GameTicking;
using Content.Shared._White.Jukebox;
using Robust.Server.Player;
using Robust.Shared.Enums;
using Robust.Shared.Network;
using Robust.Shared.Utility;
namespace Content.Server._White.Jukebox;
public sealed class ServerJukeboxSongsSyncManager : JukeboxSongsSyncManager
{
[Dependency] private readonly INetManager _netManager = default!;
public override void Initialize()
{
base.Initialize();
_netManager.Connected += OnClientConnected;
}
private void OnClientConnected(object? sender, NetChannelArgs e)
{
foreach (var (path, data) in ContentRoot.GetAllFiles())
{
var msg = new JukeboxSongUploadNetMessage
{
RelativePath = path,
Data = data
};
e.Channel.SendMessage(msg);
}
}
public (string SongName, ResPath Path) SyncSongData(string songName, List<byte> bytes)
{
if (ContentRoot.TryGetFile(new ResPath(songName + ".ogg"), out _))
{
songName += "a";
}
var msg = new JukeboxSongUploadNetMessage()
{
Data = bytes.ToArray(),
RelativePath = new ResPath(songName + ".ogg")
};
OnSongUploaded(msg);
var path = new ResPath($"{Prefix}/{songName}.ogg");
return (songName, path);
}
public override void OnSongUploaded(JukeboxSongUploadNetMessage message)
{
ContentRoot.AddOrUpdateFile(message.RelativePath, message.Data);
foreach (var channel in _netManager.Channels)
{
channel.SendMessage(message);
}
}
public void CleanUp()
{
ContentRoot.Clear();
}
}