using SharpChat.Packet; using System; using System.Threading; namespace SharpChat.Commands { public class ShutdownRestartCommand : IUserCommand { private readonly ManualResetEvent WaitHandle; private readonly Func ShutdownCheck; public ShutdownRestartCommand(ManualResetEvent waitHandle, Func shutdownCheck) { WaitHandle = waitHandle; ShutdownCheck = shutdownCheck; } 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(!ShutdownCheck()) return; if(ctx.NameEquals("restart")) foreach(ConnectionInfo conn in ctx.Chat.Connections) conn.PrepareForRestart(); ctx.Chat.Update(); WaitHandle?.Set(); } } }