sharp-chat/SharpChat/Commands/ShutdownRestartCommand.cs

38 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> ShutdownCheck;
public ShutdownRestartCommand(ManualResetEvent waitHandle, Func<bool> 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();
}
}
}