diff options
author | Melanie Thielker | 2008-08-07 14:48:45 +0000 |
---|---|---|
committer | Melanie Thielker | 2008-08-07 14:48:45 +0000 |
commit | 51f90af4b735efbe0c6bdccd93c887b266f91488 (patch) | |
tree | 9bf4a3463da24290eac50b1c1aa375a5a5790d30 /OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |
parent | Minor formatting cleanup. (diff) | |
download | opensim-SC-51f90af4b735efbe0c6bdccd93c887b266f91488.zip opensim-SC-51f90af4b735efbe0c6bdccd93c887b266f91488.tar.gz opensim-SC-51f90af4b735efbe0c6bdccd93c887b266f91488.tar.bz2 opensim-SC-51f90af4b735efbe0c6bdccd93c887b266f91488.tar.xz |
Patch #9158
Refactor packet sending into LLPacketHandler. Change packet sequencing
and ack lists to ensure packet sequences conform to wire order.
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 52 |
1 files changed, 7 insertions, 45 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index ec945cd..a1e270b 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -392,7 +392,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
392 | // in it to process. It's an on-purpose threadlock though because | 392 | // in it to process. It's an on-purpose threadlock though because |
393 | // without it, the clientloop will suck up all sim resources. | 393 | // without it, the clientloop will suck up all sim resources. |
394 | 394 | ||
395 | m_PacketHandler = new LLPacketHandler(this); | 395 | m_PacketHandler = new LLPacketHandler(this, m_networkServer); |
396 | m_PacketHandler.SynchronizeClient = SynchronizeClient; | 396 | m_PacketHandler.SynchronizeClient = SynchronizeClient; |
397 | 397 | ||
398 | RegisterLocalPacketHandlers(); | 398 | RegisterLocalPacketHandlers(); |
@@ -616,12 +616,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
616 | if (nextPacket.Incoming) | 616 | if (nextPacket.Incoming) |
617 | { | 617 | { |
618 | DebugPacket("IN", nextPacket.Packet); | 618 | DebugPacket("IN", nextPacket.Packet); |
619 | m_PacketHandler.ProcessInPacket(nextPacket.Packet); | 619 | m_PacketHandler.ProcessInPacket(nextPacket); |
620 | } | 620 | } |
621 | else | 621 | else |
622 | { | 622 | { |
623 | DebugPacket("OUT", nextPacket.Packet); | 623 | DebugPacket("OUT", nextPacket.Packet); |
624 | ProcessOutPacket(nextPacket.Packet); | 624 | m_PacketHandler.ProcessOutPacket(nextPacket); |
625 | } | 625 | } |
626 | } | 626 | } |
627 | } | 627 | } |
@@ -745,7 +745,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
745 | + "Any further actions taken will not be processed.\n" | 745 | + "Any further actions taken will not be processed.\n" |
746 | + "Please relog", true); | 746 | + "Please relog", true); |
747 | 747 | ||
748 | ProcessOutPacket(packet); | 748 | LLQueItem item = new LLQueItem(); |
749 | item.Packet = packet; | ||
750 | |||
751 | m_PacketHandler.ProcessOutPacket(item); | ||
749 | 752 | ||
750 | // There may be a better way to do this. Perhaps kick? Not sure this propogates notifications to | 753 | // There may be a better way to do this. Perhaps kick? Not sure this propogates notifications to |
751 | // listeners yet, though. | 754 | // listeners yet, though. |
@@ -3685,47 +3688,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3685 | m_PacketHandler.PacketQueue.SetThrottleFromClient(throttles); | 3688 | m_PacketHandler.PacketQueue.SetThrottleFromClient(throttles); |
3686 | } | 3689 | } |
3687 | 3690 | ||
3688 | // Previously ClientView.m_packetQueue | ||
3689 | |||
3690 | /// <summary> | ||
3691 | /// Helper routine to prepare the packet for sending to UDP client | ||
3692 | /// This converts it to bytes and puts it on the outgoing buffer | ||
3693 | /// </summary> | ||
3694 | /// <param name="Pack"></param> | ||
3695 | protected virtual void ProcessOutPacket(Packet Pack) | ||
3696 | { | ||
3697 | // Keep track of when this packet was sent out | ||
3698 | Pack.TickCount = System.Environment.TickCount; | ||
3699 | |||
3700 | // Actually make the byte array and send it | ||
3701 | try | ||
3702 | { | ||
3703 | byte[] sendbuffer = Pack.ToBytes(); | ||
3704 | PacketPool.Instance.ReturnPacket(Pack); | ||
3705 | |||
3706 | if (Pack.Header.Zerocoded) | ||
3707 | { | ||
3708 | int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer); | ||
3709 | m_networkServer.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, m_circuitCode); | ||
3710 | } | ||
3711 | else | ||
3712 | { | ||
3713 | //Need some extra space in case we need to add proxy information to the message later | ||
3714 | Buffer.BlockCopy(sendbuffer, 0, ZeroOutBuffer, 0, sendbuffer.Length); | ||
3715 | m_networkServer.SendPacketTo(ZeroOutBuffer, sendbuffer.Length, SocketFlags.None, m_circuitCode); | ||
3716 | } | ||
3717 | } | ||
3718 | catch (Exception e) | ||
3719 | { | ||
3720 | m_log.Warn("[client]: " + | ||
3721 | "ClientView.m_packetQueue.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + | ||
3722 | m_userEndPoint.ToString() + " - killing thread"); | ||
3723 | m_log.Error(e.ToString()); | ||
3724 | Close(true); | ||
3725 | } | ||
3726 | } | ||
3727 | |||
3728 | /// <summary> | ||
3729 | /// method gets called when a new packet has arrived from the UDP server. This happens after it's been decoded into a libsl object | 3691 | /// method gets called when a new packet has arrived from the UDP server. This happens after it's been decoded into a libsl object |
3730 | /// </summary> | 3692 | /// </summary> |
3731 | /// <param name="NewPack"></param> | 3693 | /// <param name="NewPack"></param> |