diff --git a/Server/Program.cs b/Server/Program.cs index 980493a..e6ecb16 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -18,10 +18,14 @@ server.ClientJoined += async (c, type) => { }; async Task ClientSyncShineBag(Client client) { - foreach (int shine in shineBag.Except((ConcurrentBag) client.Metadata["shineSync"])) - await client.Send(new ShinePacket { - ShineId = shine - }); + try { + foreach (int shine in shineBag.Except((ConcurrentBag) client.Metadata["shineSync"])) + await client.Send(new ShinePacket { + ShineId = shine + }); + } catch { + // errors that can happen when sending will crash the server :) + } } async void SyncShineBag() { @@ -130,12 +134,18 @@ CommandHandler.RegisterCommand("flip", args => { }); CommandHandler.RegisterCommand("shine", args => { - const string optionUsage = "Valid options: list"; + const string optionUsage = "Valid options: list, clear"; if (args.Length < 1) return optionUsage; switch (args[0]) { case "list" when args.Length == 1: return $"Shines: {string.Join(", ", shineBag)}"; + case "clear" when args.Length == 1: + shineBag.Clear(); + foreach (ConcurrentBag playerBag in server.Clients.Select(serverClient => (ConcurrentBag) serverClient.Metadata["shineSync"])) { + playerBag.Clear(); + } + return "Cleared shine bags"; default: return optionUsage; }