sharp-chat/SharpChat/Commands/ShutdownRestartCommand.cs

40 lines
1.1 KiB
C#

using SharpChat.Packet;
using System;
using System.Threading;
namespace SharpChat.Commands {
public class ShutdownRestartCommand : IUserCommand {
private readonly ManualResetEvent WaitHandle;
private readonly Func<bool> ShuttingDown;
private readonly Action<bool> SetShutdown;
public ShutdownRestartCommand(
ManualResetEvent waitHandle,
Func<bool> shuttingDown,
Action<bool> 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();
}
}
}