using SharpChat.SockChat.PacketsS2C; using System; using System.Threading; namespace SharpChat.SockChat.Commands { public class ShutdownRestartCommand : ISockChatClientCommand { 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(SockChatClientCommandContext ctx) { return ctx.NameEquals("shutdown") || ctx.NameEquals("restart"); } public void Dispatch(SockChatClientCommandContext ctx) { if(ctx.User.UserId != 1) { ctx.Chat.SendTo(ctx.User, new CommandNotAllowedErrorS2CPacket(ctx.Name)); return; } if(ShuttingDown()) return; SetShutdown(ctx.NameEquals("restart")); ctx.Chat.Update(); WaitHandle?.Set(); } } }