/// <summary> /// Reboots all hosts in the given group. /// </summary> public void ShutdownGroup( WOL2Group g, bool bNoConfirm ) { string sg = g.GetName(); if (!bNoConfirm) { string sAction = "Shutdown Group " + sg; if (ConfirmAction(sAction) == false) return; } Monitor.Enter( m_LockHosts ); foreach( WOL2Host h in m_Hosts ) { if( h.GetGroups().Contains( sg ) ) ShutdownHost( h, true ); } Monitor.Exit( m_LockHosts ); lblStatus.Text = String.Format(MOE.Utility.GetStringFromRes("strSendShutdownSignal"), g.GetName()); }
/// <summary> /// Refreshes the group list /// </summary> public void WakeGroup( WOL2Group g, bool bNoConfirm ) { string sg = g.GetName(); if (!bNoConfirm) { string sAction = "Wake Group " + sg; if (ConfirmAction(sAction) == false) return; } Monitor.Enter( m_LockHosts ); foreach( WOL2Host h in m_Hosts ) { if( h.GetGroups().Contains( sg ) ) WakeHost( h, true ); DateTime dwTime = DateTime.Now.AddMilliseconds(m_iWakeDelay); while (DateTime.Now < dwTime) Application.DoEvents(); } Monitor.Exit( m_LockHosts ); lblStatus.Text = String.Format( MOE.Utility.GetStringFromRes( "strSendWOLSignal" ), g.GetName() ); }
/// <summary> /// Opens a host file /// </summary> /// <param name="sFile">The file to open.</param> public bool OpenHostList( string sFile ) { bool bRet = false; if( sFile == null ) { // Ask for a xml file OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.FileName = m_sHostFileName; openFileDialog1.Filter = "XML File (*.xml)|*.xml|All Files (*.*)|*.*" ; openFileDialog1.FilterIndex = 1; openFileDialog1.RestoreDirectory = true ; // Read and filter the raw data if(openFileDialog1.ShowDialog() == DialogResult.OK) { sFile = openFileDialog1.FileName; } } if( sFile != null ) { int iCount = 0; // Create the XML document XmlDocument xml = new XmlDocument(); try { // Try to load the file xml.Load( sFile ); // Clean the old host list Monitor.Enter( m_LockHosts ); m_Hosts.Clear(); m_Groups.Clear(); Monitor.Exit( m_LockHosts ); m_CurrentGroup = null; // Try to get the host nodes XmlNodeList xmlHosts = xml.SelectNodes( "/WakeOnLan/Hosts/Host" ); // Insert all hosts Monitor.Enter( m_LockHosts ); foreach( XmlNode hostNode in xmlHosts ) { // Insert the host WOL2Host h = new WOL2Host( ); XmlNode n = hostNode.FirstChild; if( h.DeserializeXML( n ) ) { m_Hosts.Add( h ); h.SetState( WOL2HostState.wolHostOffline ); iCount++; } } Monitor.Exit( m_LockHosts ); // Try to get the group nodes XmlNodeList xmlGroups = xml.SelectNodes( "/WakeOnLan/Groups/Group" ); // Insert all groups Monitor.Enter( m_Groups ); foreach( XmlNode groupNode in xmlGroups ) { XmlNode n = groupNode.FirstChild; WOL2Group g = new WOL2Group(); g.DeserializeXML( n ); if( g.IsValid() ) { m_Groups.Add( g.GetName(), g ); } } Monitor.Exit( m_Groups ); RefreshGroupList(); // Get the HostFile Note XmlNode tmp = xml.SelectSingleNode("/WakeOnLan/Comment"); if (tmp != null) { m_sHostFileNote = tmp.InnerText; tbtnNote.ToolTipText = m_sHostFileNote; } // File loaded... m_sHostFileName = sFile; bRet = true; RefreshHostList(); lblStatus.Text = String.Format( MOE.Utility.GetStringFromRes("strFileOpened"), iCount ); MOE.Logger.DoLog( "Opened host file " + sFile + " with " + iCount + " hosts.", Logger.LogLevel.lvlInfo ); // Add the file to the MRU list if not present yet if (m_MruList.IndexOf(sFile) == -1) { m_MruList.Insert(0, sFile); BuildMruList(); } } catch { // Some Error } } // new file m_bChangedFile = false; return bRet; }