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;