/// <summary> /// This method checks the completed message. /// </summary> /// <param name="sender"> The object sender. </param> /// <param name="e"> The byte event args. </param> private void CheckCompletedMessage(object sender, ByteMessageEventArgs e) { ProcessListMessage messageType = new ProcessListMessage(); Ping pingType = new Ping(); if (e.Message[0] == (byte)messageType.Type) { List <byte> list = e.Message.ToList(); List <byte> hostname = new List <byte>(); list.RemoveAt(0); int hostNameLength = list[0]; for (int i = 0; i < hostNameLength; i++) { hostname.Add(list[i + 1]); } this.HostName = Encoding.UTF8.GetString(hostname.ToArray()); list.RemoveRange(0, hostname.Count + 1); ProcessListContainer container = NetworkDeSerealizer.DesSerealize(list.ToArray()); this.FireOnMessageCompleted(new ProcessListEventArgs(container)); this.ResetTimer(); } else if (e.Message[0] == (byte)pingType.Type) { this.ResetTimer(); } }
/// <summary> /// This method gets a container that contains all current processes. /// </summary> /// <returns> It returns a <see cref="ProcessListContainer"/>. </returns> public ProcessListContainer InitializeNewProcesses() { ProcessListContainer listContainer = new ProcessListContainer(); listContainer.NewProcesses = this.OldProcessList; listContainer.OldProcesses = this.OldProcessList; return(listContainer); }
/// <summary> /// This method gets all current processes. /// </summary> private void GetAllCurrentProcesses() { foreach (var item in Process.GetProcesses()) { this.OldProcessList.Add(new ProcessContainer(item)); } ProcessListContainer init = new ProcessListContainer(); init.NewProcesses = this.OldProcessList; this.FireOnProcessChanged(new ProcessListEventArgs(init)); }
/// <summary> /// This method fires when a client has been connected. And starts either the process watcher or sends the current processes to the new client. /// </summary> /// <param name="sender"> The object sender. </param> /// <param name="e"> The event args. </param> public void ClientConnected(object sender, EventArgs e) { if (this.watcher.IsRunning != true) { try { this.watcher.Start(); } catch (Exception ex) { this.FireOnErrorMessagePrint(new StringEventArgs(ex.Message)); } } else { ProcessListContainer listContainer = this.watcher.InitializeNewProcesses(); this.OnProcessChanged(null, new ProcessListEventArgs(listContainer)); } }
/// <summary> /// This method compares the new processes with the old processes. /// </summary> /// <returns> It returns a container with the changed processes. </returns> private ProcessListContainer CompareNewProcessesWithCurrentProcesses() { ProcessListContainer processListContainer = new ProcessListContainer(); foreach (var item in this.NewProcessList) { if (this.OldProcessList.Where(x => x.Id == item.Id).Count() == 0) { // New Process processListContainer.NewProcesses.Add(item); continue; } for (int i = 0; i < this.OldProcessList.Count; i++) { if (item.Id == this.OldProcessList[i].Id) { // Changed Process if (this.OldProcessList[i].IsProcessDifferent(item)) { processListContainer.OldProcesses.Add(this.OldProcessList[i]); processListContainer.NewProcesses.Add(item); } break; } } } foreach (var item in this.OldProcessList) { if (this.NewProcessList.Where(x => x.Id == item.Id).Count() == 0) { // Process killed processListContainer.OldProcesses.Add(item); continue; } } return(processListContainer); }
/// <summary> /// This method updates the processes. /// </summary> /// <param name="sender"> The object sender. </param> /// <param name="e"> The process list. </param> private void GetNewProcesses(object sender, ProcessListEventArgs e) { List <ProcessContainer> temp = new List <ProcessContainer>(); foreach (var item in this.Processes) { temp.Add(item); } if (this.Processes.Count > 0) { foreach (var item in e.List.OldProcesses) { foreach (var oldProcesses in this.Processes) { if (item.Id == oldProcesses.Id) { temp.Remove(oldProcesses); } } } } this.Processes = temp; foreach (var item in e.List.NewProcesses) { this.Processes.Add(item); } ProcessListContainer container = new ProcessListContainer(); foreach (var item in this.Processes) { container.NewProcesses.Add(item); } this.FireOnProcessChanged(new ProcessListEventArgs(container)); }