using SharpChat.Packet; using System; using System.Threading; namespace SharpChat.Commands { public class ShutdownRestartCommand : IUserCommand { private readonly ManualResetEvent WaitHandle; private readonly Func ShuttingDown; private readonly Action SetShutdown; public ShutdownRestartCommand( ManualResetEvent waitHandle, Func shuttingDown, Action setShutdown ) { WaitHandle = waitHandle; ShuttingDown = shuttingDown; SetShutdown = setShutdown; } public bool IsMatch(UserCommandContext ctx) { return ctx.NameEquals("shutdown") || ctx.NameEquals("restart"); } public void Dispatch(UserCommandContext ctx) { if(ctx.User.UserId != 1) { ctx.Chat.SendTo(ctx.User, new CommandNotAllowedErrorPacket(ctx.Name)); return; } if(ShuttingDown()) return; SetShutdown(ctx.NameEquals("restart")); ctx.Chat.Update(); WaitHandle?.Set(); } } }