From 31bf25d05e09395416c0427e783f8685a9e69889 Mon Sep 17 00:00:00 2001 From: CasperW Date: Sun, 20 Dec 2009 16:18:43 +0100 Subject: [PATCH] Reverted my changes to jhurliman's packet stack since it currently causes more problems than it resolves. The stack DOES need a rework particularly with regards to priorities, but this is not it. --- .../ClientStack/LindenUDP/LLUDPServer.cs | 27 +---- .../ClientStack/LindenUDP/OpenSimUDPBase.cs | 107 +----------------- .../ClientStack/LindenUDP/OutgoingPacket.cs | 4 +- 3 files changed, 6 insertions(+), 132 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs index 4d9f58f387..3c4fa72363 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs @@ -402,7 +402,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP #region Queue or Send OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category); - outgoingPacket.Type = type; if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket)) SendPacketFinal(outgoingPacket); @@ -514,7 +513,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP byte flags = buffer.Data[0]; bool isResend = (flags & Helpers.MSG_RESENT) != 0; bool isReliable = (flags & Helpers.MSG_RELIABLE) != 0; - bool sendSynchronous = false; LLUDPClient udpClient = outgoingPacket.Client; if (!udpClient.IsConnected) @@ -570,28 +568,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (isReliable) Interlocked.Add(ref udpClient.UnackedBytes, outgoingPacket.Buffer.DataLength); - //Some packet types need to be sent synchonously. - //Sorry, i know it's not optimal, but until the LL client - //manages packets correctly and re-orders them as required, this is necessary. - - // Put the UDP payload on the wire - if (outgoingPacket.Type == PacketType.ImprovedTerseObjectUpdate) - { - SyncBeginPrioritySend(buffer, 2); // highest priority - } - else if (outgoingPacket.Type == PacketType.ObjectUpdate - || outgoingPacket.Type == PacketType.LayerData) - { - SyncBeginPrioritySend(buffer, 1); // medium priority - } - else - { - SyncBeginPrioritySend(buffer, 0); // normal priority - } - - //AsyncBeginSend(buffer); - + AsyncBeginSend(buffer); + // Keep track of when this packet was sent out (right now) outgoingPacket.TickCount = Environment.TickCount & Int32.MaxValue; } @@ -872,7 +851,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP Buffer.BlockCopy(packetData, 0, buffer.Data, 0, length); - SyncBeginPrioritySend(buffer, 1); //Setting this to a medium priority should help minimise resends + AsyncBeginSend(buffer); } private bool IsClientAuthorized(UseCircuitCodePacket useCircuitCode, out AuthenticateResponse sessionInfo) diff --git a/OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs b/OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs index de2cd242c9..d2779ba302 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/OpenSimUDPBase.cs @@ -29,7 +29,6 @@ using System; using System.Net; using System.Net.Sockets; using System.Threading; -using System.Collections.Generic; using log4net; namespace OpenMetaverse @@ -53,30 +52,12 @@ namespace OpenMetaverse /// Local IP address to bind to in server mode protected IPAddress m_localBindAddress; - /// - /// Standard queue for our outgoing SyncBeginPrioritySend - /// - private List m_standardQueue = new List(); - - /// - /// Medium priority queue for our outgoing SyncBeginPrioritySend - /// - private List m_mediumPriorityQueue = new List(); - - /// - /// Prioritised queue for our outgoing SyncBeginPrioritySend - /// - private List m_priorityQueue = new List(); - /// UDP socket, used in either client or server mode private Socket m_udpSocket; /// Flag to process packets asynchronously or synchronously private bool m_asyncPacketHandling; - /// Are we currently sending data asynchronously? - private volatile bool m_sendingData = false; - /// The all important shutdown flag private volatile bool m_shutdownFlag = true; @@ -265,51 +246,7 @@ namespace OpenMetaverse } } - public void SyncBeginPrioritySend(UDPPacketBuffer buf, int Priority) - { - if (!m_shutdownFlag) - { - if (!m_sendingData) - { - m_sendingData = true; - try - { - AsyncBeginSend(buf); - } - catch (SocketException) { } - catch (ObjectDisposedException) { } - } - else - { - if (Priority == 2) - { - lock (m_priorityQueue) - { - m_priorityQueue.Add(buf); - } - } - else - { - if (Priority != 0) - { - lock (m_mediumPriorityQueue) - { - m_mediumPriorityQueue.Add(buf); - } - } - else - { - lock (m_standardQueue) - { - m_standardQueue.Add(buf); - } - } - } - } - } - } - - private void AsyncBeginSend(UDPPacketBuffer buf) + public void AsyncBeginSend(UDPPacketBuffer buf) { if (!m_shutdownFlag) { @@ -333,48 +270,8 @@ namespace OpenMetaverse { try { +// UDPPacketBuffer buf = (UDPPacketBuffer)result.AsyncState; m_udpSocket.EndSendTo(result); - - if (m_sendingData) - { - lock (m_priorityQueue) - { - if (m_priorityQueue.Count > 0) - { - UDPPacketBuffer buf = m_priorityQueue[0]; - m_priorityQueue.RemoveAt(0); - AsyncBeginSend(buf); - } - else - { - lock (m_mediumPriorityQueue) - { - if (m_mediumPriorityQueue.Count > 0) - { - UDPPacketBuffer buf = m_mediumPriorityQueue[0]; - m_mediumPriorityQueue.RemoveAt(0); - AsyncBeginSend(buf); - } - else - { - lock (m_standardQueue) - { - if (m_standardQueue.Count > 0) - { - UDPPacketBuffer buf = m_standardQueue[0]; - m_standardQueue.RemoveAt(0); - AsyncBeginSend(buf); - } - else - { - m_sendingData = false; - } - } - } - } - } - } - } } catch (SocketException) { } catch (ObjectDisposedException) { } diff --git a/OpenSim/Region/ClientStack/LindenUDP/OutgoingPacket.cs b/OpenSim/Region/ClientStack/LindenUDP/OutgoingPacket.cs index 7dc42d3f1d..1a1a1cb4e3 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/OutgoingPacket.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/OutgoingPacket.cs @@ -28,7 +28,6 @@ using System; using OpenSim.Framework; using OpenMetaverse; -using OpenMetaverse.Packets; namespace OpenSim.Region.ClientStack.LindenUDP { @@ -53,8 +52,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP public int TickCount; /// Category this packet belongs to public ThrottleOutPacketType Category; - /// The type of packet so its delivery method can be determined - public PacketType Type; + /// /// Default constructor ///