прокачали поиск сццм

This commit is contained in:
klavirshik 2024-10-24 18:58:33 +02:00
commit 2afe9b8d92
20 changed files with 308 additions and 5 deletions

Binary file not shown.

View File

@ -101,6 +101,7 @@
this.Controls.Add(this.CompNameLB);
this.Name = "Finder";
this.Text = "Новое подключение";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Finder_FormClosed);
this.SeaherPanel.ResumeLayout(false);
this.SeaherPanel.PerformLayout();
this.ResumeLayout(false);

View File

@ -1,4 +1,5 @@
using Remontor.Connector;
using Remontor.Pinger;
using Remontor.Seacher;
using System;
using System.Collections.Generic;
@ -51,16 +52,18 @@ namespace Remontor.Finder
{
PreSelected = -1;
SelectedItem = null;
SeaherPanel.SuspendLayout();
SeaherPanel.Controls.Clear();
int countItem = 0;
foreach (ISeacherResult item in Items)
{
SessionItemControl itemControl = new SessionItemControl(item, UpdateActiv, countItem++);
SeaherPanel.Controls.Add(itemControl);
}
SeaherPanel.ResumeLayout();
}
@ -149,5 +152,10 @@ namespace Remontor.Finder
}
}
private void Finder_FormClosed(object sender, FormClosedEventArgs e)
{
PingManager.StopPing();
}
}
}

View File

@ -0,0 +1,111 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Remontor.Pinger
{
internal static class PingManager
{
static Dictionary<string, PingResult> ResultPing = new Dictionary<string, PingResult>();
static List<PingTask> TaskList = new List<PingTask>();
static int LifeTimePing = 20;
static Thread PingerHost = new Thread(PingHost);
static public void NewTaskPing(Panel panel, IComp comp)
{
if (ResultPing.ContainsKey(comp.GetNetName()))
{
if ((DateTime.Now - ResultPing[comp.GetNetName()].timePing).Seconds > LifeTimePing)
{
// panel.Visible = true;
// panel.BackColor = Color.Gold;
ResultPing.Remove(comp.GetNetName());
PingTask pingTask = new PingTask(panel, comp);
TaskList.Add(pingTask);
}
else
{
//panel.Visible = true;
if (ResultPing[comp.GetNetName()].Succes)
{
panel.BackColor = Color.Lime;
}
else
{
panel.BackColor = Color.OrangeRed;
}
}
}
else
{
//panel.Visible = true;
// panel.BackColor = Color.Gold;
PingTask pingTask = new PingTask(panel, comp);
TaskList.Add(pingTask);
//if(PingerHost.ThreadState == ThreadState.Unstarted)
//{
// PingerHost.Start();
//}else if(PingerHost.ThreadState == ThreadState.Stopped)
//{
// PingerHost = new Thread(PingHost);
// PingerHost.Start();
//}
}
}
static public void PingHost()
{
// while ()
// {
Thread.Sleep(300);
PingTask[] TaskListBuff = new PingTask[TaskList.Count];
TaskList.CopyTo(TaskListBuff);
TaskList.Clear();
System.Console.WriteLine(TaskListBuff.Length.ToString());
foreach (PingTask Task in TaskListBuff)
{
// Task.PingHost();
}
if (TaskList.Count > 0) PingHost();
else
{
}
// }
}
static public void StopPing()
{
// PingerHost.Join();
}
static public void WriteResult(PingResult pingResult)
{
try
{
ResultPing.Add(pingResult.NameOrAddress, pingResult);
}
catch
{
}
}
}
}

View File

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Remontor.Pinger
{
internal class PingResult
{
public long Ping { get; set; }
public int TimeoutPing { get; set; }
public IPAddress Ip;
public DateTime timePing;
public bool TimedOut;
public bool Succes;
public string NameOrAddress;
public PingResult(long ping, int timeoutPing, IPAddress ip, bool timedOut, bool succes, string NameOrAddress)
{
Ping = ping;
TimeoutPing = timeoutPing;
Ip = ip;
TimedOut = timedOut;
Succes = succes;
timePing = DateTime.Now;
this.NameOrAddress = NameOrAddress;
}
public PingResult(long ping, int timeoutPing, IPAddress ip, bool timedOut)
{
Ping = ping;
TimeoutPing = timeoutPing;
Ip = ip;
TimedOut = timedOut;
Succes = false;
}
}
}

129
Remontor/Pinger/PingTask.cs Normal file
View File

@ -0,0 +1,129 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace Remontor.Pinger
{
internal class PingTask
{
private string NameOrAddress;
private int TimeoutCount;
private IPAddress Ip;
private IComp Comp;
private Panel panel;
private Ping pinger;
public PingTask(Panel panel, IComp comp)
{
this.panel = panel;
this.Comp = comp;
this.NameOrAddress = comp.GetNetName();
pinger = new Ping();
pinger.PingCompleted += Pinger_PingCompleted;
try
{
pinger.SendPingAsync(NameOrAddress,3);
}
catch
{
pinger.SendAsyncCancel();
if (panel != null) panel.BackColor = Color.OrangeRed;
}
}
private void Pinger_PingCompleted(object sender, PingCompletedEventArgs e)
{
if (e.Reply == null)
{
if (panel != null) panel.BackColor = Color.OrangeRed;
return;
}
bool pingable;
bool succes;
long ping;
pingable = e.Reply.Status == IPStatus.TimedOut;
succes = e.Reply.Status == IPStatus.Success;
ping = e.Reply.RoundtripTime;
Ip = e.Reply.Address;
if (!succes)
{
if (panel != null) panel.BackColor = Color.OrangeRed;
TimeoutCount++;
}
else
{
if (panel != null) panel.BackColor = Color.Lime;
Comp.SetIP(Ip);
}
PingResult pingResult = new PingResult(ping, TimeoutCount, Ip, pingable, succes, NameOrAddress);
PingManager.WriteResult(pingResult);
//throw new NotImplementedException();
}
public PingTask(string nameOrAddress)
{
this.NameOrAddress = nameOrAddress;
}
public int Timeout()
{
return TimeoutCount;
}
// public PingResult PingHost()
//{
// bool pingable = false;
// bool succes = false;
// long ping = 0;
// try
// {
// pinger = new Ping();
// PingReply reply = pinger.Send(this.NameOrAddress);
// pingable = reply.Status == IPStatus.TimedOut;
// succes = reply.Status == IPStatus.Success;
// ping = reply.RoundtripTime;
// Ip = reply.Address;
// }
// catch (PingException)
// {
// // Discard PingExceptions and return false;
// }
// finally
// {
// if (pinger != null)
// {
// pinger.Dispose();
// }
// }
// if (!succes)
// {
// if (panel != null) panel.BackColor = Color.OrangeRed;
// TimeoutCount++;
// }
// else
// {
// if (panel != null) panel.BackColor = Color.Lime;
// Comp.SetIP(Ip);
// }
// PingResult pingResult = new PingResult(ping, TimeoutCount, Ip, pingable, succes, NameOrAddress);
// PingManager.WriteResult(pingResult);
// return pingResult;
//}
}
}

View File

@ -107,6 +107,9 @@
<Compile Include="History\HistoryItem.cs" />
<Compile Include="History\HistoryList.cs" />
<Compile Include="History\SHistory.cs" />
<Compile Include="Pinger\PingManager.cs" />
<Compile Include="Pinger\PingResult.cs" />
<Compile Include="Pinger\PingTask.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SCCMsearch\AuthLogin.cs" />

View File

@ -110,6 +110,7 @@
this.Margin = new System.Windows.Forms.Padding(1);
this.Name = "SessionItemControl";
this.Size = new System.Drawing.Size(353, 55);
this.Load += new System.EventHandler(this.SessionItemControl_Load);
this.Click += new System.EventHandler(this.SessionItemControl_Click);
((System.ComponentModel.ISupportInitialize)(this.PbPerson)).EndInit();
this.ResumeLayout(false);

View File

@ -1,4 +1,5 @@
using Remontor.Seacher;
using Remontor.Pinger;
using Remontor.Seacher;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@ -51,7 +52,7 @@ namespace Remontor
LbData.Text = "last connect:" + result.GetLastConnect();
Select += UpdateAct;
Index = index;
}
else if (seacherResult is SCCMResult)
@ -112,5 +113,15 @@ namespace Remontor
}
private void SessionItemControl_Load(object sender, EventArgs e)
{
if (seacherResult is HistoryResult)
{
HistoryResult result = (HistoryResult)seacherResult;
PingManager.NewTaskPing(PPingStat, result.GetComp());
}
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
15aad57089c73c036769b7df150a74520e07d0a0
8715987b8e28705d0f46bc923af3b41a4afd1d49

Binary file not shown.

Binary file not shown.