mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-23 04:32:50 -04:00
Now /ping also includes lowest ping
This commit is contained in:
parent
cea92a00b0
commit
58830d3d13
@ -23,7 +23,12 @@ namespace MCGalaxy.Network {
|
|||||||
public struct PingEntry {
|
public struct PingEntry {
|
||||||
public DateTime TimeSent, TimeReceived;
|
public DateTime TimeSent, TimeReceived;
|
||||||
public ushort Data;
|
public ushort Data;
|
||||||
|
public double Latency { get {
|
||||||
|
// Half, because received->reply time is actually twice time it takes to send data
|
||||||
|
return (TimeReceived - TimeSent).TotalMilliseconds * 0.5;
|
||||||
|
} }
|
||||||
}
|
}
|
||||||
|
|
||||||
public PingEntry[] Entries = new PingEntry[10];
|
public PingEntry[] Entries = new PingEntry[10];
|
||||||
|
|
||||||
|
|
||||||
@ -45,9 +50,9 @@ namespace MCGalaxy.Network {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ushort SetTwoWayPing(int i, ushort prev) {
|
ushort SetTwoWayPing(int i, ushort prev) {
|
||||||
Entries[i].Data = (ushort)(prev + 1);
|
Entries[i].Data = (ushort)(prev + 1);
|
||||||
Entries[i].TimeSent = DateTime.UtcNow;
|
Entries[i].TimeSent = DateTime.UtcNow;
|
||||||
return (ushort)(prev + 1);
|
return (ushort)(prev + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update(ushort data) {
|
public void Update(ushort data) {
|
||||||
@ -59,39 +64,42 @@ namespace MCGalaxy.Network {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary> Gets best ping in milliseconds, or 0 if no ping measures. </summary>
|
||||||
|
public double BestPingMilliseconds() {
|
||||||
|
double totalMs = 100000000;
|
||||||
|
foreach (PingEntry ping in Entries) {
|
||||||
|
if (ping.TimeSent.Ticks == 0 || ping.TimeReceived.Ticks == 0) continue;
|
||||||
|
totalMs = Math.Min(totalMs, ping.Latency);
|
||||||
|
}
|
||||||
|
return totalMs;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary> Gets average ping in milliseconds, or 0 if no ping measures. </summary>
|
/// <summary> Gets average ping in milliseconds, or 0 if no ping measures. </summary>
|
||||||
public double AveragePingMilliseconds() {
|
public double AveragePingMilliseconds() {
|
||||||
double totalMs = 0;
|
double totalMs = 0;
|
||||||
int measures = 0;
|
int measures = 0;
|
||||||
|
|
||||||
foreach (PingEntry ping in Entries) {
|
foreach (PingEntry ping in Entries) {
|
||||||
if (ping.TimeSent.Ticks == 0 || ping.TimeReceived.Ticks == 0) continue;
|
if (ping.TimeSent.Ticks == 0 || ping.TimeReceived.Ticks == 0) continue;
|
||||||
|
totalMs += ping.Latency; measures++;
|
||||||
// Half, because received->reply time is actually twice time it takes to send data
|
|
||||||
totalMs += (ping.TimeReceived - ping.TimeSent).TotalMilliseconds * 0.5;
|
|
||||||
measures++;
|
|
||||||
}
|
}
|
||||||
return measures == 0 ? 0 : (totalMs / measures);
|
return measures == 0 ? 0 : (totalMs / measures);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary> Gets worst ping in milliseconds, or 0 if no ping measures. </summary>
|
/// <summary> Gets worst ping in milliseconds, or 0 if no ping measures. </summary>
|
||||||
public double WorstPingMilliseconds() {
|
public double WorstPingMilliseconds() {
|
||||||
double totalMs = 0;
|
double totalMs = 0;
|
||||||
|
|
||||||
foreach (PingEntry ping in Entries) {
|
foreach (PingEntry ping in Entries) {
|
||||||
if (ping.TimeSent.Ticks == 0 || ping.TimeReceived.Ticks == 0) continue;
|
if (ping.TimeSent.Ticks == 0 || ping.TimeReceived.Ticks == 0) continue;
|
||||||
|
totalMs = Math.Max(totalMs, ping.Latency);
|
||||||
double ms = (ping.TimeReceived - ping.TimeSent).TotalMilliseconds * 0.5;
|
|
||||||
totalMs = Math.Max(totalMs, ms);
|
|
||||||
}
|
}
|
||||||
return totalMs;
|
return totalMs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Format() {
|
public string Format() {
|
||||||
return String.Format("Worst ping {0}ms, average {1}ms",
|
return String.Format("Lowest ping {0}ms, average {1} ms, highest {2}ms",
|
||||||
WorstPingMilliseconds().ToString("N0"),
|
(int)BestPingMilliseconds(),
|
||||||
AveragePingMilliseconds().ToString("N0"));
|
(int)AveragePingMilliseconds(),
|
||||||
|
(int)WorstPingMilliseconds());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user