chore: added ping bground service

This commit is contained in:
Wainaina George (Swagfin) 2023-03-09 22:55:17 +03:00
parent 94dea561f0
commit b06964169e
5 changed files with 116 additions and 19 deletions

View File

@ -13,6 +13,7 @@ namespace PortProxyGUI.Data
public int ConnectPort { get; set; } public int ConnectPort { get; set; }
public string Comment { get; set; } public string Comment { get; set; }
public string Group { get; set; } public string Group { get; set; }
public string PingStatus { get; set; }
public bool Valid => ListenPort > 0 && ConnectPort > 0; public bool Valid => ListenPort > 0 && ConnectPort > 0;

View File

@ -37,6 +37,7 @@
this.columnHeader4 = new System.Windows.Forms.ColumnHeader(); this.columnHeader4 = new System.Windows.Forms.ColumnHeader();
this.columnHeader5 = new System.Windows.Forms.ColumnHeader(); this.columnHeader5 = new System.Windows.Forms.ColumnHeader();
this.columnHeader6 = new System.Windows.Forms.ColumnHeader(); this.columnHeader6 = new System.Windows.Forms.ColumnHeader();
this.columnPingStatus = new System.Windows.Forms.ColumnHeader();
this.columnHeader7 = new System.Windows.Forms.ColumnHeader(); this.columnHeader7 = new System.Windows.Forms.ColumnHeader();
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.toolStripMenuItem_Enable = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem_Enable = new System.Windows.Forms.ToolStripMenuItem();
@ -51,6 +52,7 @@
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
this.imageListProxies = new System.Windows.Forms.ImageList(this.components); this.imageListProxies = new System.Windows.Forms.ImageList(this.components);
this.TimerPingTargets = new System.Windows.Forms.Timer(this.components);
this.contextMenuStrip1.SuspendLayout(); this.contextMenuStrip1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -64,6 +66,7 @@
this.columnHeader4, this.columnHeader4,
this.columnHeader5, this.columnHeader5,
this.columnHeader6, this.columnHeader6,
this.columnPingStatus,
this.columnHeader7}); this.columnHeader7});
this.listViewProxies.ContextMenuStrip = this.contextMenuStrip1; this.listViewProxies.ContextMenuStrip = this.contextMenuStrip1;
resources.ApplyResources(this.listViewProxies, "listViewProxies"); resources.ApplyResources(this.listViewProxies, "listViewProxies");
@ -104,6 +107,10 @@
this.columnHeader6.Tag = ""; this.columnHeader6.Tag = "";
resources.ApplyResources(this.columnHeader6, "columnHeader6"); resources.ApplyResources(this.columnHeader6, "columnHeader6");
// //
// columnPingStatus
//
resources.ApplyResources(this.columnPingStatus, "columnPingStatus");
//
// columnHeader7 // columnHeader7
// //
resources.ApplyResources(this.columnHeader7, "columnHeader7"); resources.ApplyResources(this.columnHeader7, "columnHeader7");
@ -189,6 +196,12 @@
this.imageListProxies.Images.SetKeyName(0, "disable.png"); this.imageListProxies.Images.SetKeyName(0, "disable.png");
this.imageListProxies.Images.SetKeyName(1, "enable.png"); this.imageListProxies.Images.SetKeyName(1, "enable.png");
// //
// TimerPingTargets
//
this.TimerPingTargets.Enabled = true;
this.TimerPingTargets.Interval = 5000;
this.TimerPingTargets.Tick += new System.EventHandler(this.TimerPingTargets_Tick);
//
// PortProxyGUI // PortProxyGUI
// //
resources.ApplyResources(this, "$this"); resources.ApplyResources(this, "$this");
@ -224,6 +237,8 @@
private System.Windows.Forms.ColumnHeader columnHeader7; private System.Windows.Forms.ColumnHeader columnHeader7;
internal System.Windows.Forms.ListView listViewProxies; internal System.Windows.Forms.ListView listViewProxies;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_FlushDnsCache; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_FlushDnsCache;
private System.Windows.Forms.ColumnHeader columnPingStatus;
private System.Windows.Forms.Timer TimerPingTargets;
} }
} }

View File

@ -2,6 +2,7 @@
using System; using System;
using System.Data; using System.Data;
using System.Linq; using System.Linq;
using System.Net.NetworkInformation;
using System.Windows.Forms; using System.Windows.Forms;
using static System.Windows.Forms.ListViewItem; using static System.Windows.Forms.ListViewItem;
@ -46,7 +47,8 @@ namespace PortProxyGUI
ListenPort = listenPort, ListenPort = listenPort,
ConnectTo = subItems[4].Text.Trim(), ConnectTo = subItems[4].Text.Trim(),
ConnectPort = connectPort, ConnectPort = connectPort,
Comment = subItems[6].Text.Trim(), PingStatus = subItems[6].Text.Trim(),
Comment = subItems[7].Text.Trim(),
Group = item.Group?.Header.Trim(), Group = item.Group?.Header.Trim(),
}; };
return rule; return rule;
@ -154,7 +156,8 @@ namespace PortProxyGUI
new ListViewSubItem(item, rule.ListenPort.ToString()) { Tag = "Number" }, new ListViewSubItem(item, rule.ListenPort.ToString()) { Tag = "Number" },
new ListViewSubItem(item, rule.ConnectTo), new ListViewSubItem(item, rule.ConnectTo),
new ListViewSubItem(item, rule.ConnectPort.ToString ()) { Tag = "Number" }, new ListViewSubItem(item, rule.ConnectPort.ToString ()) { Tag = "Number" },
new ListViewSubItem(item, rule.Comment ?? ""), new ListViewSubItem(item, rule.PingStatus ?? string.Empty),
new ListViewSubItem(item, rule.Comment ?? string.Empty)
}); });
if (rule.Group.IsNullOrWhiteSpace()) item.Group = null; if (rule.Group.IsNullOrWhiteSpace()) item.Group = null;
@ -314,5 +317,28 @@ namespace PortProxyGUI
if (e.KeyCode == Keys.Delete) DeleteSelectedProxies(); if (e.KeyCode == Keys.Delete) DeleteSelectedProxies();
} }
} }
private void TimerPingTargets_Tick(object sender, EventArgs e)
{
TimerPingTargets.Stop();
try
{
var items = listViewProxies.Items.OfType<ListViewItem>();
foreach (var item in items)
{
try
{
var rule = ParseRule(item);
//Ping Host
PingCheckerUtil.GetPingResult(rule.ConnectTo, 2, out IPStatus ipStatus, out _, out _);
rule.PingStatus = ipStatus.ToString();
UpdateListViewItem(item, rule, item.ImageIndex);
}
catch { }
}
}
catch { }
TimerPingTargets.Start();
}
} }
} }

View File

@ -94,6 +94,12 @@
<data name="columnHeader6.Width" type="System.Int32, mscorlib"> <data name="columnHeader6.Width" type="System.Int32, mscorlib">
<value>100</value> <value>100</value>
</data> </data>
<data name="columnPingStatus.Text" xml:space="preserve">
<value>Ping Status</value>
</data>
<data name="columnPingStatus.Width" type="System.Int32, mscorlib">
<value>104</value>
</data>
<data name="columnHeader7.Text" xml:space="preserve"> <data name="columnHeader7.Text" xml:space="preserve">
<value>Comment</value> <value>Comment</value>
</data> </data>
@ -105,28 +111,28 @@
</metadata> </metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="toolStripMenuItem_Enable.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem_Enable.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value> <value>164, 22</value>
</data> </data>
<data name="toolStripMenuItem_Enable.Text" xml:space="preserve"> <data name="toolStripMenuItem_Enable.Text" xml:space="preserve">
<value>Enable (&amp;E)</value> <value>Enable (&amp;E)</value>
</data> </data>
<data name="toolStripMenuItem_Disable.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem_Disable.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value> <value>164, 22</value>
</data> </data>
<data name="toolStripMenuItem_Disable.Text" xml:space="preserve"> <data name="toolStripMenuItem_Disable.Text" xml:space="preserve">
<value>Disable (&amp;I)</value> <value>Disable (&amp;I)</value>
</data> </data>
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 6</value> <value>161, 6</value>
</data> </data>
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value> <value>164, 22</value>
</data> </data>
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve"> <data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
<value>Refresh (&amp;F)</value> <value>Refresh (&amp;F)</value>
</data> </data>
<data name="toolStripMenuItem_FlushDnsCache.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem_FlushDnsCache.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value> <value>164, 22</value>
</data> </data>
<data name="toolStripMenuItem_FlushDnsCache.Text" xml:space="preserve"> <data name="toolStripMenuItem_FlushDnsCache.Text" xml:space="preserve">
<value>Flush DNS Cache</value> <value>Flush DNS Cache</value>
@ -135,37 +141,37 @@
<value>Will perform ipconfig/flushDNS</value> <value>Will perform ipconfig/flushDNS</value>
</data> </data>
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 6</value> <value>161, 6</value>
</data> </data>
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value> <value>164, 22</value>
</data> </data>
<data name="toolStripMenuItem_New.Text" xml:space="preserve"> <data name="toolStripMenuItem_New.Text" xml:space="preserve">
<value>New (&amp;N) ...</value> <value>New (&amp;N) ...</value>
</data> </data>
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value> <value>164, 22</value>
</data> </data>
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve"> <data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
<value>Modify (&amp;M) ...</value> <value>Modify (&amp;M) ...</value>
</data> </data>
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value> <value>164, 22</value>
</data> </data>
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve"> <data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
<value>Delete (&amp;D)</value> <value>Delete (&amp;D)</value>
</data> </data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 6</value> <value>161, 6</value>
</data> </data>
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value> <value>164, 22</value>
</data> </data>
<data name="toolStripMenuItem_About.Text" xml:space="preserve"> <data name="toolStripMenuItem_About.Text" xml:space="preserve">
<value>About</value> <value>About</value>
</data> </data>
<data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing"> <data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing">
<value>181, 220</value> <value>165, 198</value>
</data> </data>
<data name="&gt;&gt;contextMenuStrip1.Name" xml:space="preserve"> <data name="&gt;&gt;contextMenuStrip1.Name" xml:space="preserve">
<value>contextMenuStrip1</value> <value>contextMenuStrip1</value>
@ -184,10 +190,10 @@
<value>0, 0</value> <value>0, 0</value>
</data> </data>
<data name="listViewProxies.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"> <data name="listViewProxies.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 3, 4, 3</value> <value>5, 3, 5, 3</value>
</data> </data>
<data name="listViewProxies.Size" type="System.Drawing.Size, System.Drawing"> <data name="listViewProxies.Size" type="System.Drawing.Size, System.Drawing">
<value>704, 456</value> <value>797, 456</value>
</data> </data>
<metadata name="imageListProxies.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="imageListProxies.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>182, 17</value> <value>182, 17</value>
@ -197,7 +203,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs
LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu
SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA3AgAAAJNU0Z0AUkBTAIBAQIB SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA3AgAAAJNU0Z0AUkBTAIBAQIB
AAEwAQEBMAEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG AAFYAQEBWAEBARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMAAUADAAEQAwABAQEAAQgG
AAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB AAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEAAfABygGmAQABMwUAATMB
AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB AAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEAAYABfAH/AQACUAH/AQAB
kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC kwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFmAwABmQMAAcwCAAEzAwAC
@ -252,14 +258,20 @@
<data name="&gt;&gt;listViewProxies.ZOrder" xml:space="preserve"> <data name="&gt;&gt;listViewProxies.ZOrder" xml:space="preserve">
<value>1</value> <value>1</value>
</data> </data>
<metadata name="TimerPingTargets.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>324, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing"> <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value> <value>7, 15</value>
</data> </data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>704, 456</value> <value>797, 456</value>
</data>
<data name="$this.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9pt</value>
</data> </data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
@ -2464,6 +2476,12 @@
<data name="&gt;&gt;columnHeader6.Type" xml:space="preserve"> <data name="&gt;&gt;columnHeader6.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;columnPingStatus.Name" xml:space="preserve">
<value>columnPingStatus</value>
</data>
<data name="&gt;&gt;columnPingStatus.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;columnHeader7.Name" xml:space="preserve"> <data name="&gt;&gt;columnHeader7.Name" xml:space="preserve">
<value>columnHeader7</value> <value>columnHeader7</value>
</data> </data>
@ -2542,6 +2560,12 @@
<data name="&gt;&gt;imageListProxies.Type" xml:space="preserve"> <data name="&gt;&gt;imageListProxies.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.ImageList, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;TimerPingTargets.Name" xml:space="preserve">
<value>TimerPingTargets</value>
</data>
<data name="&gt;&gt;TimerPingTargets.Type" xml:space="preserve">
<value>System.Windows.Forms.Timer, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve"> <data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>PortProxyGUI</value> <value>PortProxyGUI</value>
</data> </data>

View File

@ -0,0 +1,31 @@
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
namespace PortProxyGUI
{
public static class PingCheckerUtil
{
// Adapted from https://docs.microsoft.com/en-us/dotnet/api/system.net.networkinformation.ping.send
public static bool GetPingResult(string ipAddress, int timeout, out IPStatus responseStatus, out IPAddress responseIpAddress, out long responseTime)
{
//Defaults
responseIpAddress = null;
responseTime = 0;
responseStatus = IPStatus.Unknown;
try
{
//Sending 32bytes
byte[] buffer = Encoding.ASCII.GetBytes("12345678901234567890123456789012");
Ping pingSender = new Ping();
PingOptions options = new PingOptions(64, true);
PingReply reply = pingSender.Send(ipAddress, timeout, buffer, options);
responseIpAddress = reply.Address;
responseTime = reply.RoundtripTime;
responseStatus = reply.Status;
return (reply.Status == IPStatus.Success) ? true : false;
}
catch { return false; }
}
}
}