using SharpChat.Packet; using System; using System.Threading; namespace SharpChat.Commands { public class ShutdownRestartCommand : IChatCommand { private readonly ManualResetEvent WaitHandle; private readonly Func ShutdownCheck; public ShutdownRestartCommand(ManualResetEvent waitHandle, Func shutdownCheck) { WaitHandle = waitHandle ?? throw new ArgumentNullException(nameof(waitHandle)); ShutdownCheck = shutdownCheck ?? throw new ArgumentNullException(nameof(shutdownCheck)); } public bool IsMatch(ChatCommandContext ctx) { return ctx.NameEquals("shutdown") || ctx.NameEquals("restart"); } public void Dispatch(ChatCommandContext ctx) { if(ctx.User.UserId != 1) { ctx.Chat.SendTo(ctx.User, new CommandNotAllowedErrorPacket(ctx.Name)); return; } if(!ShutdownCheck()) return; if(ctx.NameEquals("restart")) foreach(ChatConnection conn in ctx.Chat.Connections) conn.PrepareForRestart(); ctx.Chat.Update(); WaitHandle?.Set(); } } }