diff --git a/Assets/Scripts/TeaNet/Packets/Packet.cs b/Assets/Scripts/TeaNet/Packets/Packet.cs
index 5d9646e..f864b03 100644
--- a/Assets/Scripts/TeaNet/Packets/Packet.cs
+++ b/Assets/Scripts/TeaNet/Packets/Packet.cs
@@ -15,13 +15,11 @@ namespace NeonTea.Quakeball.TeaNet.Packets {
/// Reads packet meta-information from the buffer.
public void ReadMeta(ByteBuffer buffer) {
- PacketId = buffer.ReadInt();
PacketIsReliable = buffer.ReadBool();
}
/// Writes packet meta-information to the buffer.
public void WriteMeta(ByteBuffer buffer) {
- buffer.Write(PacketId);
buffer.Write(PacketIsReliable);
}
diff --git a/Assets/Scripts/TeaNet/Packets/Protocol.cs b/Assets/Scripts/TeaNet/Packets/Protocol.cs
index 8b6d5ec..2840126 100644
--- a/Assets/Scripts/TeaNet/Packets/Protocol.cs
+++ b/Assets/Scripts/TeaNet/Packets/Protocol.cs
@@ -37,7 +37,7 @@ namespace NeonTea.Quakeball.TeaNet.Packets {
return id;
}
- public ByteBuffer BuildMessage(Connection connection) {
+ public ByteBuffer BuildMessage(Connection connection, int firstId) {
ByteBuffer buffer = new ByteBuffer();
foreach (byte b in Peer.Fingerprint) {
buffer.Write(b);
@@ -54,7 +54,7 @@ namespace NeonTea.Quakeball.TeaNet.Packets {
} else if (connection.Status == ConnectionStatus.Ready) {
buffer.Write((byte)PacketStage.Ready);
buffer.Write(connection.Internal.LatestInwardReliable);
- buffer.Write(connection.Internal.CurrentFirstPacket);
+ buffer.Write(firstId);
}
return buffer;
}
diff --git a/Assets/Scripts/TeaNet/Peers/Connection.cs b/Assets/Scripts/TeaNet/Peers/Connection.cs
index e85927d..a94b787 100644
--- a/Assets/Scripts/TeaNet/Peers/Connection.cs
+++ b/Assets/Scripts/TeaNet/Peers/Connection.cs
@@ -57,9 +57,6 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
/// Last unreliable Packet ID we've received from the connection
public int LatestInwardUnreliable;
- /// The id of the first packet in the queue to be sent
- public int CurrentFirstPacket;
-
/// Reliable Packet ID counter for packets we're sending them
public int ReliablePacketIDCounter;
/// Unreliable Packet ID counter for packets we're sending them
diff --git a/Assets/Scripts/TeaNet/Peers/ConnectionManager.cs b/Assets/Scripts/TeaNet/Peers/ConnectionManager.cs
index bcdd7d1..5375a42 100644
--- a/Assets/Scripts/TeaNet/Peers/ConnectionManager.cs
+++ b/Assets/Scripts/TeaNet/Peers/ConnectionManager.cs
@@ -92,8 +92,12 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
Connection conn = Connections[uid];
Protocol protocol = Peer.GetProtocol(conn.Internal.AssignedProtocol);
if (protocol != null && conn.IsReady()) {
- ByteBuffer buffer = protocol.BuildMessage(conn);
Packet[] list = PacketQueue[uid].ToArray();
+ int firstId = Int32.MaxValue;
+ if (list.Length > 0) {
+ firstId = list[0].PacketId;
+ }
+ ByteBuffer buffer = protocol.BuildMessage(conn, firstId);
buffer.Write(list.Length);
foreach (Packet p in list) {
buffer.WritePacket(protocol, p);
@@ -118,7 +122,7 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
p.PacketIsReliable = false;
Protocol protocol = Peer.GetProtocol(conn.Internal.AssignedProtocol);
if (protocol != null && conn.IsReady()) {
- ByteBuffer buffer = protocol.BuildMessage(conn);
+ ByteBuffer buffer = protocol.BuildMessage(conn, p.PacketId);
buffer.Write(1);
buffer.WritePacket(protocol, p);
Send(conn, buffer);
@@ -170,7 +174,7 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
private void SendPlain(Connection conn) {
Protocol protocol = Peer.GetProtocol(conn.Internal.AssignedProtocol);
if (protocol != null) {
- ByteBuffer buffer = protocol.BuildMessage(conn);
+ ByteBuffer buffer = protocol.BuildMessage(conn, Int32.MaxValue);
Send(conn, buffer);
}
}
@@ -244,23 +248,19 @@ namespace NeonTea.Quakeball.TeaNet.Peers {
ConcurrentQueue queue = PacketQueue[conn.uid];
Packet peeked;
while (queue.TryPeek(out peeked)) {
- if (peeked.PacketId <= conn.Internal.LatestOutwardReliable) {
- Packet discarded;
- queue.TryDequeue(out discarded);
- continue;
+ if (peeked.PacketId > conn.Internal.LatestOutwardReliable) {
+ break;
+ } else {
+ Packet LastRemoved;
+ queue.TryDequeue(out LastRemoved);
}
- conn.Internal.CurrentFirstPacket = peeked.PacketId;
- break;
}
PacketQueue[conn.uid] = queue;
int PacketAmount = buffer.ReadInt();
for (int i = 0; i < PacketAmount; i++) {
Packet p = buffer.ReadPacket(protocol);
- //p.PacketId = FirstPacketId + i;
- if (i == 0 && p.PacketId == FirstPacketId) {
- //Debug.Log("Matched!");
- }
+ p.PacketId = FirstPacketId + i;
if (p.PacketIsReliable) {
if (p.PacketId > conn.Internal.LatestInwardReliable) {
conn.Internal.LatestInwardReliable = p.PacketId;