100 lines
3.2 KiB
C#
100 lines
3.2 KiB
C#
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Barotrauma.Networking
|
|
{
|
|
class NetStats
|
|
{
|
|
public enum NetStatType
|
|
{
|
|
SentBytes = 0,
|
|
ReceivedBytes = 1,
|
|
ResentMessages = 2
|
|
}
|
|
|
|
private Graph[] graphs;
|
|
|
|
private float[] totalValue;
|
|
private float[] lastValue;
|
|
|
|
const float UpdateInterval = 0.1f;
|
|
float updateTimer;
|
|
|
|
public NetStats()
|
|
{
|
|
graphs = new Graph[3];
|
|
|
|
totalValue = new float[3];
|
|
lastValue = new float[3];
|
|
for (int i = 0; i < 3; i++ )
|
|
{
|
|
graphs[i] = new Graph();
|
|
}
|
|
}
|
|
|
|
public void AddValue(NetStatType statType, float value)
|
|
{
|
|
float valueChange = value - lastValue[(int)statType];
|
|
|
|
totalValue[(int)statType] += valueChange;
|
|
|
|
lastValue[(int)statType] = value;
|
|
}
|
|
|
|
public void Update(float deltaTime)
|
|
{
|
|
updateTimer -= deltaTime;
|
|
|
|
if (updateTimer > 0.0f) return;
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
|
|
graphs[i].Update(totalValue[i] / UpdateInterval);
|
|
totalValue[i] = 0.0f;
|
|
}
|
|
|
|
updateTimer = UpdateInterval;
|
|
}
|
|
|
|
public void Draw(SpriteBatch spriteBatch, Rectangle rect)
|
|
{
|
|
GUI.DrawRectangle(spriteBatch, rect, Color.Black * 0.4f, true);
|
|
|
|
graphs[(int)NetStatType.ReceivedBytes].Draw(spriteBatch, rect, null, 0.0f, Color.Cyan);
|
|
|
|
graphs[(int)NetStatType.SentBytes].Draw(spriteBatch, rect, null, 0.0f, Color.Orange);
|
|
|
|
graphs[(int)NetStatType.ResentMessages].Draw(spriteBatch, rect, null, 0.0f, Color.Red);
|
|
|
|
GUI.SmallFont.DrawString(spriteBatch,
|
|
"Peak received: " + MathUtils.GetBytesReadable((int)graphs[(int)NetStatType.ReceivedBytes].LargestValue()) + "/s " +
|
|
"Avg received: " + MathUtils.GetBytesReadable((int)graphs[(int)NetStatType.ReceivedBytes].Average()) + "/s",
|
|
new Vector2(rect.Right + 10, rect.Y + 10), Color.Cyan);
|
|
|
|
|
|
GUI.SmallFont.DrawString(spriteBatch, "Peak sent: " + MathUtils.GetBytesReadable((int)graphs[(int)NetStatType.SentBytes].LargestValue()) + "/s " +
|
|
"Avg sent: " + MathUtils.GetBytesReadable((int)graphs[(int)NetStatType.SentBytes].Average()) + "/s",
|
|
new Vector2(rect.Right + 10, rect.Y + 30), Color.Orange);
|
|
|
|
GUI.SmallFont.DrawString(spriteBatch, "Peak resent: " + graphs[(int)NetStatType.ResentMessages].LargestValue() + " messages/s",
|
|
new Vector2(rect.Right + 10, rect.Y + 50), Color.Red);
|
|
#if DEBUG
|
|
/*int y = 10;
|
|
|
|
foreach (KeyValuePair<string, long> msgBytesSent in server.messageCount.OrderBy(key => -key.Value))
|
|
{
|
|
GUI.SmallFont.DrawString(spriteBatch, msgBytesSent.Key + ": " + MathUtils.GetBytesReadable(msgBytesSent.Value),
|
|
new Vector2(rect.Right - 200, rect.Y + y), Color.Red);
|
|
|
|
y += 15;
|
|
}
|
|
|
|
TODO: reimplement?*/
|
|
#endif
|
|
}
|
|
}
|
|
}
|