aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
diff options
context:
space:
mode:
authorMike Mazur2009-02-25 00:32:26 +0000
committerMike Mazur2009-02-25 00:32:26 +0000
commitbdf95e54a2da5b60e7817d748f7389289a59bc5e (patch)
treee688db1880284466aef41abb545dc9ed50ea66cc /OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
parentSetting svn:eol-style=native on new files. (diff)
downloadopensim-SC-bdf95e54a2da5b60e7817d748f7389289a59bc5e.zip
opensim-SC-bdf95e54a2da5b60e7817d748f7389289a59bc5e.tar.gz
opensim-SC-bdf95e54a2da5b60e7817d748f7389289a59bc5e.tar.bz2
opensim-SC-bdf95e54a2da5b60e7817d748f7389289a59bc5e.tar.xz
A few updates necessary for load balancer.
- handle GetUser request for nonexistent user gracefully - include throttle levels in ClientInfo - code to save/restore throttles in client stack - only update/send updates to active clients - make animation classes serializable
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs59
1 files changed, 36 insertions, 23 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
index 23118a2..4270222 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
@@ -196,13 +196,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
196 // configuration! 196 // configuration!
197 // 197 //
198 198
199 if ((m_SynchronizeClient != null) && (!m_Client.IsActive))
200 {
201 if (m_SynchronizeClient(m_Client.Scene, packet,
202 m_Client.AgentId, throttlePacketType))
203 return;
204 }
205
206 packet.Header.Sequence = 0; 199 packet.Header.Sequence = 0;
207 200
208 lock (m_NeedAck) 201 lock (m_NeedAck)
@@ -480,11 +473,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
480 if (packet == null) 473 if (packet == null)
481 return; 474 return;
482 475
483 // If this client is on another partial instance, no need 476 // When too many acks are needed to be sent, the client sends
484 // to handle packets 477 // a packet consisting of acks only
485 // 478 //
486 if (!m_Client.IsActive && packet.Type != PacketType.LogoutRequest) 479 if (packet.Type == PacketType.PacketAck)
487 { 480 {
481 PacketAckPacket ackPacket = (PacketAckPacket)packet;
482
483 foreach (PacketAckPacket.PacketsBlock block in
484 ackPacket.Packets)
485 {
486 ProcessAck(block.ID);
487 }
488
488 PacketPool.Instance.ReturnPacket(packet); 489 PacketPool.Instance.ReturnPacket(packet);
489 return; 490 return;
490 } 491 }
@@ -500,26 +501,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
500 } 501 }
501 } 502 }
502 503
503 // When too many acks are needed to be sent, the client sends 504 // If this client is on another partial instance, no need
504 // a packet consisting of acks only 505 // to handle packets
505 // 506 //
506 if (packet.Type == PacketType.PacketAck) 507 if (!m_Client.IsActive && packet.Type != PacketType.LogoutRequest)
507 { 508 {
508 PacketAckPacket ackPacket = (PacketAckPacket)packet;
509
510 foreach (PacketAckPacket.PacketsBlock block in
511 ackPacket.Packets)
512 {
513 ProcessAck(block.ID);
514 }
515
516 PacketPool.Instance.ReturnPacket(packet); 509 PacketPool.Instance.ReturnPacket(packet);
517 return; 510 return;
518 } 511 }
519 else if (packet.Type == PacketType.StartPingCheck) 512
513 if (packet.Type == PacketType.StartPingCheck)
520 { 514 {
521 StartPingCheckPacket startPing = (StartPingCheckPacket)packet; 515 StartPingCheckPacket startPing = (StartPingCheckPacket)packet;
522 CompletePingCheckPacket endPing 516 CompletePingCheckPacket endPing
523 = (CompletePingCheckPacket)PacketPool.Instance.GetPacket(PacketType.CompletePingCheck); 517 = (CompletePingCheckPacket)PacketPool.Instance.GetPacket(PacketType.CompletePingCheck);
524 518
525 endPing.PingID.PingID = startPing.PingID.PingID; 519 endPing.PingID.PingID = startPing.PingID.PingID;
@@ -639,6 +633,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
639 633
640 info.sequence = m_Sequence; 634 info.sequence = m_Sequence;
641 635
636 float multiplier = m_PacketQueue.ThrottleMultiplier;
637 info.resendThrottle = (int) (m_PacketQueue.ResendThrottle.Throttle / multiplier);
638 info.landThrottle = (int) (m_PacketQueue.LandThrottle.Throttle / multiplier);
639 info.windThrottle = (int) (m_PacketQueue.WindThrottle.Throttle / multiplier);
640 info.cloudThrottle = (int) (m_PacketQueue.CloudThrottle.Throttle / multiplier);
641 info.taskThrottle = (int) (m_PacketQueue.TaskThrottle.Throttle / multiplier);
642 info.assetThrottle = (int) (m_PacketQueue.AssetThrottle.Throttle / multiplier);
643 info.textureThrottle = (int) (m_PacketQueue.TextureThrottle.Throttle / multiplier);
644 info.totalThrottle = (int) (m_PacketQueue.TotalThrottle.Throttle / multiplier);
645
642 return info; 646 return info;
643 } 647 }
644 648
@@ -676,6 +680,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
676 } 680 }
677 681
678 m_Sequence = info.sequence; 682 m_Sequence = info.sequence;
683
684 m_PacketQueue.ResendThrottle.Throttle = info.resendThrottle;
685 m_PacketQueue.LandThrottle.Throttle = info.landThrottle;
686 m_PacketQueue.WindThrottle.Throttle = info.windThrottle;
687 m_PacketQueue.CloudThrottle.Throttle = info.cloudThrottle;
688 m_PacketQueue.TaskThrottle.Throttle = info.taskThrottle;
689 m_PacketQueue.AssetThrottle.Throttle = info.assetThrottle;
690 m_PacketQueue.TextureThrottle.Throttle = info.textureThrottle;
691 m_PacketQueue.TotalThrottle.Throttle = info.totalThrottle;
679 } 692 }
680 693
681 public void AddImportantPacket(PacketType type) 694 public void AddImportantPacket(PacketType type)