diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs index 338f2bb..85961b9 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | |||
@@ -402,6 +402,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
402 | #region Queue or Send | 402 | #region Queue or Send |
403 | 403 | ||
404 | OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category); | 404 | OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category); |
405 | outgoingPacket.Type = type; | ||
405 | 406 | ||
406 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket)) | 407 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket)) |
407 | SendPacketFinal(outgoingPacket); | 408 | SendPacketFinal(outgoingPacket); |
@@ -513,6 +514,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
513 | byte flags = buffer.Data[0]; | 514 | byte flags = buffer.Data[0]; |
514 | bool isResend = (flags & Helpers.MSG_RESENT) != 0; | 515 | bool isResend = (flags & Helpers.MSG_RESENT) != 0; |
515 | bool isReliable = (flags & Helpers.MSG_RELIABLE) != 0; | 516 | bool isReliable = (flags & Helpers.MSG_RELIABLE) != 0; |
517 | bool sendSynchronous = false; | ||
516 | LLUDPClient udpClient = outgoingPacket.Client; | 518 | LLUDPClient udpClient = outgoingPacket.Client; |
517 | 519 | ||
518 | if (!udpClient.IsConnected) | 520 | if (!udpClient.IsConnected) |
@@ -568,9 +570,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
568 | if (isReliable) | 570 | if (isReliable) |
569 | Interlocked.Add(ref udpClient.UnackedBytes, outgoingPacket.Buffer.DataLength); | 571 | Interlocked.Add(ref udpClient.UnackedBytes, outgoingPacket.Buffer.DataLength); |
570 | 572 | ||
571 | // Put the UDP payload on the wire | 573 | //Some packet types need to be sent synchonously. |
572 | AsyncBeginSend(buffer); | 574 | //Sorry, i know it's not optimal, but until the LL client |
575 | //manages packets correctly and re-orders them as required, this is necessary. | ||
573 | 576 | ||
577 | |||
578 | // Put the UDP payload on the wire | ||
579 | if (outgoingPacket.Type == PacketType.ImprovedTerseObjectUpdate) | ||
580 | { | ||
581 | SyncBeginPrioritySend(buffer, 2); // highest priority | ||
582 | } | ||
583 | else if (outgoingPacket.Type == PacketType.ObjectUpdate | ||
584 | || outgoingPacket.Type == PacketType.LayerData) | ||
585 | { | ||
586 | SyncBeginPrioritySend(buffer, 1); // medium priority | ||
587 | } | ||
588 | else | ||
589 | { | ||
590 | SyncBeginPrioritySend(buffer, 0); // normal priority | ||
591 | } | ||
592 | |||
593 | //AsyncBeginSend(buffer); | ||
594 | |||
574 | // Keep track of when this packet was sent out (right now) | 595 | // Keep track of when this packet was sent out (right now) |
575 | outgoingPacket.TickCount = Environment.TickCount & Int32.MaxValue; | 596 | outgoingPacket.TickCount = Environment.TickCount & Int32.MaxValue; |
576 | } | 597 | } |
@@ -851,7 +872,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
851 | 872 | ||
852 | Buffer.BlockCopy(packetData, 0, buffer.Data, 0, length); | 873 | Buffer.BlockCopy(packetData, 0, buffer.Data, 0, length); |
853 | 874 | ||
854 | AsyncBeginSend(buffer); | 875 | SyncBeginPrioritySend(buffer, 1); //Setting this to a medium priority should help minimise resends |
855 | } | 876 | } |
856 | 877 | ||
857 | private bool IsClientAuthorized(UseCircuitCodePacket useCircuitCode, out AuthenticateResponse sessionInfo) | 878 | private bool IsClientAuthorized(UseCircuitCodePacket useCircuitCode, out AuthenticateResponse sessionInfo) |