public bool AcpiPowerOff(IMachineMetadata machine, int waitLimitInMilliseconds) { if (machine == null) { throw new ArgumentNullException(nameof(machine)); } using var instance = factory.Create(version); var session = instance.LockMachine(machine.Uuid); if (session == null) { return(false); } if (!session.AcpiPowerOff()) { return(false); } var stopwatch = new Stopwatch(); stopwatch.Start(); while (stopwatch.ElapsedMilliseconds < waitLimitInMilliseconds && session.IsLocked) { Thread.Sleep(250); } return(session.Machine.State == VirtualMachineState.PoweredOff); }
public bool Start(IMachineMetadata machine, bool headless) { if (machine == null) { throw new ArgumentNullException(nameof(machine)); } using var instance = factory.Create(version); return(instance.PowerOn(machine.Uuid, headless).CheckForSuccess()); }
public bool PowerOff(IMachineMetadata machine) { if (machine == null) { throw new ArgumentNullException(nameof(machine)); } using var instance = factory.Create(version); var session = instance.LockMachine(machine.Uuid); return(session?.PowerDown().CheckForSuccess() == true); }
public bool Reset(IMachineMetadata machine) { if (machine == null) { throw new ArgumentNullException(nameof(machine)); } using var instance = factory.Create(version); var session = instance.LockMachine(machine.Uuid); return(session?.Reset() == true); }
private ToolStripItem[] BuildSubMenu(IMachineMetadata machine) { return(new ToolStripItem[] { new MachineStatusToolStripItem(machine), new ToolStripSeparator(), new ToolStripMenuItem( "Headless start", null, (_, __) => new Task(() => machineController.Start(machine, true)).Start() ), new ToolStripMenuItem( "Normal start", null, (_, __) => new Task(() => machineController.Start(machine, false)).Start() ), new ToolStripSeparator(), new ToolStripMenuItem( "Save State", null, (_, __) => new Task(() => machineController.SaveState(machine)).Start() ), new ToolStripMenuItem( "ACPI Shutdown", null, (_, __) => new Task(() => machineController.AcpiPowerOff(machine, 90000)).Start() ), new ToolStripMenuItem( "Power off", null, (_, __) => new Task(() => machineController.PowerOff(machine)).Start() ), new ToolStripSeparator(), new ToolStripMenuItem( "Reset", null, (_, __) => machineController.Reset(machine) ) }); }
public void Update(IMachineMetadata machine) { var text = new StringBuilder(); text.Append(Regex.Replace(machine.State.ToString(), "([a-z])_?([A-Z])", "$1 $2")); if (machine is MachineMetadata metadata) { text.Append(" since "); text.Append( metadata.LastAction.Date == DateTime.Today ? metadata.LastAction.ToString("t", CultureInfo.CurrentCulture) : metadata.LastAction.ToString("g", CultureInfo.CurrentCulture) ); if (!string.IsNullOrWhiteSpace(metadata.SessionName)) { text.Append(" (").Append(metadata.SessionName).Append(')'); } } Text = text.ToString(); }
public MachineStatusToolStripItem(IMachineMetadata machine) { Update(machine); }