private async void BtHost_Click(object sender, RoutedEventArgs e) { LeaderServer.Leader.ServerDNSName = tbLeaderName.Text.Trim(); LeaderServer.Leader.VisibleName = tbYourName.Text.Trim(); LeaderServer.Leader.ServerIP = Miscelanious.ResolveIP(tbLeaderName.Text.Trim()).FirstOrDefault(); if (ClientMaintaining.IsRunningAsLocalAdmin()) { if (ServerMaintaining.host.State != CommunicationState.Opened && ServerMaintaining.host.State != CommunicationState.Opening) { imgCircleArrows.RenderTransform = new RotateTransform(); IsScanningForServers = false; ClientMaintaining.scan.ScanCancel(); bool ServerSuccessfullyStarted = false; try { ServerSuccessfullyStarted = await Task.Run(async() => { ServerMaintaining.ServerStart(); return(true); }); } catch (InvalidOperationException exception) { System.Windows.MessageBox.Show( ClientUIPresenter.GetString("ThehostnameandportarealreadyinuseWaitforalittle") + exception.Message, ClientUIPresenter.GetString("Error") , MessageBoxButton.OK, MessageBoxImage.Error); ClientMaintaining.Disconnect(); } catch (AddressAlreadyInUseException exception) { System.Windows.MessageBox.Show( ClientUIPresenter.GetString("Thehostnameandportarealreadyinuse") , ClientUIPresenter.GetString("Error") , MessageBoxButton.OK, MessageBoxImage.Error); ClientMaintaining.Disconnect(); } if (ServerSuccessfullyStarted) { ClientMaintaining.isSelfServer = true; expander.IsExpanded = false; Expander_Collapsed(this, null); LeaderServer.Leader.ServerState = ServerStates.DelivererSet; //ServerStatus.Current.ServerState = ServerStates.DelivererSet; GridContainerForUC.Children.Clear(); GridContainerForUC.Children.Add(new ucSelector()); Log.Instance.W(this, "Server is launched now trying to connect to ourselves"); ClientMaintaining.Join(tbYourName.Text, true); //if (ClientMaintaining.GetConnectionStatus()) //{ // ClientMaintaining.SendMessage("Hello to Everyone!"); //} } } else { string infoString = ClientUIPresenter.GetString("Yourserverisalreadystarted") ; if (LeaderServer.Leader.ServerDNSName != string.Empty) { infoString += Environment.NewLine + ClientUIPresenter.GetString("Itiscalled") + LeaderServer.Leader.VisibleName + Environment.NewLine + ClientUIPresenter.GetString("Theotherusersoughttolookfor") + LeaderServer.Leader.ServerDNSName; foreach (var ip in NetworkComputers.ResolveIP(LeaderServer.Leader.ServerDNSName).Select(x => x.ToString()).Distinct()) { infoString += Environment.NewLine + ClientUIPresenter.GetString("or") + ip; } } System.Windows.MessageBox.Show(infoString , "Информация", MessageBoxButton.OK, MessageBoxImage.Information); } } else { System.Windows.MessageBox.Show(ClientUIPresenter.GetString("TolaunchyourownserveryouneedtoRunthisappasAdministrator") , ClientUIPresenter.GetString("Insufficientrightstolaunchaserver") , MessageBoxButton.OK, MessageBoxImage.Warning); } }
/// <summary> /// Enumerate the hosts of type serverType in the specified domain /// </summary> /// <param name="serverType">Server type filter</param> /// <param name="domain">The domain to search for computers in</param> public ComputerBrowser(uint serverType, string domainName) { int entriesread; // number of entries actually read int totalentries; // total visible servers and workstations int result; // result of the call to NetServerEnum // Pointer to buffer that receives the data IntPtr pBuf = IntPtr.Zero; Type svType = typeof(SERVER_INFO_101); // structure containing info about the server SERVER_INFO_101 si; try { result = NetServerEnum(null, 101, out pBuf, -1, out entriesread, out totalentries, serverType, domainName, IntPtr.Zero); // Successful? if(result != 0) { switch (result) { case ERROR_MORE_DATA: _lastError = "More data is available"; break; case ERROR_ACCESS_DENIED: _lastError = "Access was denied"; break; case ERROR_NO_SERVERS: _lastError = "No servers available for this domain"; break; default: _lastError = "Unknown error code "+result; break; } return; } else { _computers = new NetworkComputers[entriesread]; int tmp = (int)pBuf; for(int i = 0; i < entriesread; i++ ) { // fill our struct si = (SERVER_INFO_101)Marshal.PtrToStructure((IntPtr)tmp, svType); _computers[i] = new NetworkComputers(si); // next struct tmp += Marshal.SizeOf(svType); } } } finally { // free the buffer NetApiBufferFree(pBuf); pBuf = IntPtr.Zero; } }
internal ComputerEnumerator(NetworkComputers[] networkComputers) { aryComputers = networkComputers; indexer = -1; }
/// <summary> /// Populates with broadcasting computers. /// </summary> /// <param name="serverType">Server type filter</param> /// <param name="domain">The domain to search for computers in</param> public ComputerEnum(uint serverType, string domainName) { int entriesread; // number of entries actually read int totalentries; // total visible servers and workstations int result; // result of the call to NetServerEnum // Pointer to buffer that receives the data IntPtr pBuf = IntPtr.Zero; Type svType = typeof(SERVER_INFO_101); // structure containing info about the server SERVER_INFO_101 si; try { result = NetServerEnum( null, 101, out pBuf, -1, out entriesread, out totalentries, serverType, domainName, IntPtr.Zero); // Successful? if (result != 0) { switch (result) { case ERROR_MORE_DATA: _lastError = "More data is available"; break; case ERROR_ACCESS_DENIED: _lastError = "Access was denied"; break; default: _lastError = "Unknown error code " + result; break; } return; } else { _computers = new NetworkComputers[entriesread]; int tmp = (int)pBuf; for (int i = 0; i < entriesread; i++) { // fill our struct si = (SERVER_INFO_101)Marshal.PtrToStructure((IntPtr)tmp, svType); _computers[i] = new NetworkComputers(si); // next struct tmp += Marshal.SizeOf(svType); } } } finally { // free the buffer NetApiBufferFree(pBuf); pBuf = IntPtr.Zero; } }