/// <summary> /// Method used to signal the <see cref="Cde"/>. /// </summary> protected void SignalCde() { try { Cde.Signal(); } catch (InvalidOperationException) { // todo Add trace logging } }
/// <summary> /// Method verifies and resets the <see cref="Cde"/> count to the requested count. /// </summary> /// <param name="count">The number of signals required to set the <see cref="CountdownEvent"/></param> protected virtual void VerifyAndResetCountdown(int count) { if ((Cde != null && Cde.IsSet)) { Cde.Reset(count); } else { Cde = new CountdownEvent(count); } }
private static void HostThreadWorker(List <IPAddress> list, int nrOfHosts, int nrOfThreads, int i, MutexClass m) { int totalNrOfHosts = list.Count; int counter = 0; IPAddress ipAddrScanned = new IPAddress(0); PortList portListing = new PortList(1, 600); Cde cdeobj = new Cde(); cdeobj._countdownEvent = new CountdownEvent(nrOfThreads); while ((i + counter) <= (totalNrOfHosts - 1)) { { ipAddrScanned = list[i + counter]; portListing = new PortList(1, 65535); cdeobj = new Cde(); cdeobj._countdownEvent = new CountdownEvent(nrOfThreads); m._mutex.WaitOne(); try { counter += nrOfHosts; } finally { m._mutex.ReleaseMutex(); } } string str = string.Concat("Machine ", ipAddrScanned, " is being scanned"); Console.WriteLine(str); str.WriteDebug(); for (int j = 0; j < nrOfThreads; j++) { int k = j; IPAddress ip = ipAddrScanned; PortList p = portListing; Cde cdevent = cdeobj; var portThread = new Thread(() => PortThreadWorker(ip, k, cdevent, p)); portThread.Start(); } cdeobj._countdownEvent.Wait(); } }
private static void PortThreadWorker(IPAddress ipAddrScannned, int j, Cde cdeevent, PortList portListing) { TcpClient tcpClientobj = new TcpClient(); UdpClient udpClientobj = new UdpClient(); Mutex mut = new Mutex(); int port = 1; while (port != -1) { mut.WaitOne(); try { port = portListing.getNext(); } finally { mut.ReleaseMutex(); } try { tcpClientobj = new TcpClient(ipAddrScannned.ToString(), port); udpClientobj = new UdpClient(ipAddrScannned.ToString(), port); } catch { continue; } finally { try { tcpClientobj.Close(); udpClientobj.Close(); } catch { } } string s = string.Concat("Port ", port, " is open on machine ", ipAddrScannned); Console.WriteLine(s); s.WriteDebug(); } cdeevent._countdownEvent.Signal(); }
protected override async Task ListUpdatedHandler(MessageBase <IList <Domain.Todo> > messageBase) { await base.ListUpdatedHandler(messageBase); Cde.Wait(1000); var userPresentation = Mvx.IoCProvider.Resolve <ISinglePresentation <int, Observable.LoggedInUser> >(); if (!userPresentation.SelectedObservable.IsTransient()) { var dispatcher = Mvx.IoCProvider.Resolve <IMvxMainThreadAsyncDispatcher>(); dispatcher.ExecuteOnMainThreadAsync(() => { CurrentUserTodoObservables.Clear(); }); var todosFromUser = Observables.Where(x => x.UserId.Equals(userPresentation.SelectedObservable.Id)).Take(5); foreach (var todo in todosFromUser) { dispatcher.ExecuteOnMainThreadAsync(() => { CurrentUserTodoObservables.Add(todo); }); } } }