protected override void ExecuteCore(SelectedItemCollection selection) { List <AsyncAction> actions = new List <AsyncAction>(); foreach (Host host in selection.AsXenObjects <Host>()) { string opaque_ref = host.opaque_ref; Pool pool = Helpers.GetPool(host.Connection); if (selection.Count == 1 && pool.master == host.opaque_ref) { // Trying to remove the master from a pool. using (var dlg = new ThreeButtonDialog( new ThreeButtonDialog.Details( SystemIcons.Error, Messages.MESSAGEBOX_POOL_MASTER_REMOVE, Messages.XENCENTER))) { dlg.ShowDialog(MainWindowCommandInterface.Form); } return; } // Optimistically, add the ejected host as a standalone host (but don't connect to it yet) IXenConnection connection = new XenConnection(); connection.Hostname = host.address; connection.Username = host.Connection.Username; connection.Password = host.Connection.Password; connection.FriendlyName = host.Name(); lock (ConnectionsManager.ConnectionsLock) { ConnectionsManager.XenConnections.Add(connection); } Program.HideObject(opaque_ref); var action = new EjectHostFromPoolAction(pool, host); action.Completed += delegate { if (action.Succeeded) { ThreadPool.QueueUserWorkItem(WaitForReboot, connection); } else { Program.ShowObject(opaque_ref); MainWindowCommandInterface.RemoveConnection(connection); } }; actions.Add(action); } RunMultipleActions(actions, Messages.REMOVING_SERVERS_FROM_POOL, Messages.POOLCREATE_REMOVING, Messages.POOLCREATE_REMOVED, true); }
protected override void ExecuteCore(SelectedItemCollection selection) { MainWindowCommandInterface.SelectObjectInTree(null); foreach (Host host in selection.AsXenObjects <Host>()) { string msg = string.Format(Messages.MAINWINDOW_LOG_REMOVECONNECTION, host.Connection.Hostname); log.Info($"Removed connection to {host.Connection.Hostname}"); new ActionBase(msg, msg, false, true); MainWindowCommandInterface.CloseActiveWizards(host.Connection); host.Connection.EndConnect(); MainWindowCommandInterface.RemoveConnection(host.Connection); } MainWindowCommandInterface.SaveServerList(); }