diff --git a/Assets/Scripts/TeaNet/Packets/ByteBuffer.cs b/Assets/Scripts/TeaNet/Packets/ByteBuffer.cs
index 0f0628a..c8886e2 100644
--- a/Assets/Scripts/TeaNet/Packets/ByteBuffer.cs
+++ b/Assets/Scripts/TeaNet/Packets/ByteBuffer.cs
@@ -5,6 +5,8 @@ using System.Text;
namespace NeonTea.Quakeball.TeaNet.Packets {
/// Contains a stream of bytes for sending or receiving over the internet.
public class ByteBuffer {
+ public int Size => Bytes.Count;
+
private List Bytes;
private int pos = 0;
diff --git a/Assets/Scripts/TeaNet/Peers/Connection.cs b/Assets/Scripts/TeaNet/Peers/Connection.cs
index da3a60a..a94b787 100644
--- a/Assets/Scripts/TeaNet/Peers/Connection.cs
+++ b/Assets/Scripts/TeaNet/Peers/Connection.cs
@@ -1,6 +1,4 @@
-using System.Collections;
-using System.Collections.Generic;
-using System.Net;
+using System.Net;
using System;
using NeonTea.Quakeball.TeaNet.Packets;
diff --git a/Assets/Scripts/TeaNet/Peers/ConnectionManager.cs b/Assets/Scripts/TeaNet/Peers/ConnectionManager.cs
index c304e79..a99a6dd 100644
--- a/Assets/Scripts/TeaNet/Peers/ConnectionManager.cs
+++ b/Assets/Scripts/TeaNet/Peers/ConnectionManager.cs
@@ -1,4 +1,3 @@
-using UnityEngine;
using System.Collections.Generic;
using System.Net;
using System.Threading;
@@ -22,6 +21,9 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
public long Timeout = 8000;
public long Interval = 100;
+ /// The amount of bytes sent since the last clear interval from Peer
+ public int BytesSent;
+
public ConnectionManager(Peer peer) {
Peer = peer;
UpdateThread = new Thread(new ThreadStart(UpdateThreadMethod));
@@ -163,6 +165,7 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
if (conn.Status == ConnectionStatus.Lost) {
return;
}
+ BytesSent += buffer.Size;
byte[] bytes = buffer.Pack();
Peer.ListenerThread.LastSentConnection = conn;
Peer.UdpClient.Send(bytes, bytes.Length, conn.Endpoint);
diff --git a/Assets/Scripts/TeaNet/Peers/ListenerThread.cs b/Assets/Scripts/TeaNet/Peers/ListenerThread.cs
index d41f3df..b81ed3f 100644
--- a/Assets/Scripts/TeaNet/Peers/ListenerThread.cs
+++ b/Assets/Scripts/TeaNet/Peers/ListenerThread.cs
@@ -17,6 +17,9 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
private static int[] CONN_LOST_CODES = new int[] { 10054, 10051 };
+ /// The amount of bytes received since the last clear interval from Peer
+ public int ReceivedBytes;
+
public ListenerThread(Peer peer, IPEndPoint endpoint) {
EndPoint = endpoint;
Peer = peer;
@@ -61,6 +64,7 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
}
if (Buffer.ReadFingerprint(Peer.Fingerprint)) {
Peer.ConnectionManager.Handle(Listened, Buffer);
+ ReceivedBytes += Buffer.Size;
}
}
}
diff --git a/Assets/Scripts/TeaNet/Peers/Peer.cs b/Assets/Scripts/TeaNet/Peers/Peer.cs
index ab454f6..7f1ef86 100644
--- a/Assets/Scripts/TeaNet/Peers/Peer.cs
+++ b/Assets/Scripts/TeaNet/Peers/Peer.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using UnityEngine;
using System;
using System.Net;
using System.Net.Sockets;
@@ -31,6 +30,12 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
ConnectionManager.Interval = value;
}
}
+ /// The interval of traffic analyzed before updating
+ public long TrafficDataInterval;
+ /// The amount of bytes received in the last TrafficDataIntervel
+ public int TrafficReceived { get; private set; }
+ /// The amount of bytes sent in the last TrafficDataIntervel
+ public int TrafficSent { get; private set; }
/// Whether the Peer is currently doing anything or not.null
public bool Running { get; private set; }
@@ -41,11 +46,14 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
/// Listener for messages and errors from within the Peer.
public PeerMessageListener MessageListener;
+ private long LastTrafficData;
+
/// Creates a new Peer with the given fingerprint. The fingerprint can be anything, it just must be same on both peers.
public Peer(byte[] fingerprint) {
Fingerprint = fingerprint;
ConnectionManager = new ConnectionManager(this);
MessageListener = this;
+ LastTrafficData = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
}
/// Starts the UdpClient, but does no networking as is.
@@ -150,6 +158,19 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
/// Shorthand for Peer.ConnectionManager.Update(): Handles network stuff that was received since last update.
public void Update() {
ConnectionManager.Update();
+
+ long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+ if (now - LastTrafficData > TrafficDataInterval) {
+ LastTrafficData = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+ if (ListenerThread != null) {
+ TrafficReceived = ListenerThread.ReceivedBytes;
+ ListenerThread.ReceivedBytes = 0;
+ }
+ if (ConnectionManager != null) {
+ TrafficSent = ConnectionManager.BytesSent;
+ ConnectionManager.BytesSent = 0;
+ }
+ }
}
public void Message(string msg) { }