0
0
Fork 0
mirror of https://github.com/Sanae6/SmoOnlineServer.git synced 2024-11-25 12:45:18 +00:00

save/load moons from file

This commit is contained in:
Jack Baron 2022-07-22 17:44:01 +01:00 committed by Sanae
parent 8d90f50fa9
commit f305c3001b

View file

@ -1,7 +1,8 @@
using System.Collections.Concurrent;
using System.Collections.Concurrent;
using System.Net;
using System.Numerics;
using System.Text;
using System.Text.Json;
using Server;
using Shared;
using Shared.Packet.Packets;
@ -15,6 +16,47 @@ Logger consoleLogger = new Logger("Console");
DiscordBot bot = new DiscordBot();
await bot.Run();
async Task PersistShines()
{
if (!Settings.Instance.PersistShines.Enabled)
{
return;
}
try
{
string shineJson = JsonSerializer.Serialize(shineBag);
await File.WriteAllTextAsync(Settings.Instance.PersistShines.Filename, shineJson);
}
catch (Exception ex)
{
consoleLogger.Error(ex);
}
}
async Task LoadShines()
{
if (!Settings.Instance.PersistShines.Enabled)
{
return;
}
try
{
string shineJson = await File.ReadAllTextAsync(Settings.Instance.PersistShines.Filename);
var loadedShines = JsonSerializer.Deserialize<HashSet<int>>(shineJson);
if (loadedShines is not null) shineBag = loadedShines;
}
catch (Exception ex)
{
consoleLogger.Error(ex);
}
}
// Load shines table from file
await LoadShines();
server.ClientJoined += (c, _) => {
if (Settings.Instance.BanList.Enabled
&& (Settings.Instance.BanList.Players.Contains(c.Id)
@ -52,6 +94,7 @@ async Task ClientSyncShineBag(Client client) {
async void SyncShineBag() {
try {
await PersistShines();
await Parallel.ForEachAsync(server.Clients.ToArray(), async (client, _) => await ClientSyncShineBag(client));
} catch {
// errors that can happen shines change will crash the server :)
@ -78,6 +121,9 @@ server.PacketHandler = (c, p) => {
c.Metadata["speedrun"] = true;
((ConcurrentBag<int>) (c.Metadata["shineSync"] ??= new ConcurrentBag<int>())).Clear();
shineBag.Clear();
Task.Run(async () => {
await PersistShines();
});
c.Logger.Info("Entered Cap on new save, preventing moon sync until Cascade");
break;
case "WaterfallWorldHomeStage":