aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/LindenUDP
diff options
context:
space:
mode:
authorJohn Hurliman2009-10-13 17:33:45 -0700
committerJohn Hurliman2009-10-13 17:33:45 -0700
commitdc11643c007adf7a640ec4fbabe25995352aaa18 (patch)
tree108b5f7234756c5395d4ca518cfeb03454f62ace /OpenSim/Region/ClientStack/LindenUDP
parent* Fixed a bug where clients were being added to ClientManager twice (diff)
downloadopensim-SC-dc11643c007adf7a640ec4fbabe25995352aaa18.zip
opensim-SC-dc11643c007adf7a640ec4fbabe25995352aaa18.tar.gz
opensim-SC-dc11643c007adf7a640ec4fbabe25995352aaa18.tar.bz2
opensim-SC-dc11643c007adf7a640ec4fbabe25995352aaa18.tar.xz
* Consolidated adding / removing ClientManager IClientAPIs to two places in Scene
* Added some missing implementations of IClientAPI.RemoteEndPoint * Added a ClientManager.Remove(UUID) overload * Removed a reference to a missing project from prebuild.xml
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs61
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs13
2 files changed, 5 insertions, 69 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index aecb362..0acf6e8 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -324,6 +324,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
324 #region Properties 324 #region Properties
325 325
326 public LLUDPClient UDPClient { get { return m_udpClient; } } 326 public LLUDPClient UDPClient { get { return m_udpClient; } }
327 public IPEndPoint RemoteEndPoint { get { return m_udpClient.RemoteEndPoint; } }
327 public UUID SecureSessionId { get { return m_secureSessionId; } } 328 public UUID SecureSessionId { get { return m_secureSessionId; } }
328 public IScene Scene { get { return m_scene; } } 329 public IScene Scene { get { return m_scene; } }
329 public UUID SessionId { get { return m_sessionId; } } 330 public UUID SessionId { get { return m_sessionId; } }
@@ -431,7 +432,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
431 432
432 // Remove ourselves from the scene 433 // Remove ourselves from the scene
433 m_scene.RemoveClient(AgentId); 434 m_scene.RemoveClient(AgentId);
434 m_scene.ClientManager.Remove(this);
435 435
436 //m_log.InfoFormat("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false)); 436 //m_log.InfoFormat("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false));
437 //GC.Collect(); 437 //GC.Collect();
@@ -586,11 +586,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
586 586
587 # region Setup 587 # region Setup
588 588
589 /// <summary> 589 public virtual void Start()
590 /// Starts up the timers to check the client and resend unacked packets
591 /// Adds the client to the OpenSim.Region.Framework.Scenes.Scene
592 /// </summary>
593 protected virtual void InitNewClient()
594 { 590 {
595 m_avatarTerseUpdateTimer = new Timer(m_avatarTerseUpdateRate); 591 m_avatarTerseUpdateTimer = new Timer(m_avatarTerseUpdateRate);
596 m_avatarTerseUpdateTimer.Elapsed += new ElapsedEventHandler(ProcessAvatarTerseUpdates); 592 m_avatarTerseUpdateTimer.Elapsed += new ElapsedEventHandler(ProcessAvatarTerseUpdates);
@@ -609,59 +605,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
609 RefreshGroupMembership(); 605 RefreshGroupMembership();
610 } 606 }
611 607
612 public virtual void Start()
613 {
614 // This sets up all the timers
615 InitNewClient();
616 }
617
618 /// <summary>
619 /// Run a user session. This method lies at the base of the entire client thread.
620 /// </summary>
621 protected void RunUserSession()
622 {
623 try
624 {
625
626 }
627 catch (Exception e)
628 {
629 if (e is ThreadAbortException)
630 throw;
631
632 if (StatsManager.SimExtraStats != null)
633 StatsManager.SimExtraStats.AddAbnormalClientThreadTermination();
634
635 // Don't let a failure in an individual client thread crash the whole sim.
636 m_log.ErrorFormat(
637 "[CLIENT]: Client thread for {0} {1} crashed. Logging them out.", Name, AgentId);
638 m_log.Error(e.ToString());
639
640 try
641 {
642 // Make an attempt to alert the user that their session has crashed
643 AgentAlertMessagePacket packet
644 = BuildAgentAlertPacket(
645 "Unfortunately the session for this client on the server has crashed.\n"
646 + "Any further actions taken will not be processed.\n"
647 + "Please relog", true);
648
649 OutPacket(packet, ThrottleOutPacketType.Unknown);
650
651 // There may be a better way to do this. Perhaps kick? Not sure this propogates notifications to
652 // listeners yet, though.
653 Logout(this);
654 }
655 catch (Exception e2)
656 {
657 if (e2 is ThreadAbortException)
658 throw;
659
660 m_log.ErrorFormat("[CLIENT]: Further exception thrown on forced session logout. {0}", e2);
661 }
662 }
663 }
664
665 # endregion 608 # endregion
666 609
667 public void ActivateGesture(UUID assetId, UUID gestureId) 610 public void ActivateGesture(UUID assetId, UUID gestureId)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 22c275c..8689af3 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -646,7 +646,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
646 client.OnConnectionClosed += ConnectionClosedHandler; 646 client.OnConnectionClosed += ConnectionClosedHandler;
647 647
648 // Start the IClientAPI 648 // Start the IClientAPI
649 m_scene.ClientManager.Add(client);
650 client.Start(); 649 client.Start();
651 } 650 }
652 else 651 else
@@ -658,10 +657,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
658 657
659 private void RemoveClient(LLUDPClient udpClient) 658 private void RemoveClient(LLUDPClient udpClient)
660 { 659 {
661 // Remove this client from the scene ClientManager 660 // Remove this client from the scene
662 IClientAPI client; 661 IClientAPI client;
663 if (m_scene.ClientManager.TryGetValue(udpClient.AgentID, out client)) 662 if (m_scene.ClientManager.TryGetValue(udpClient.AgentID, out client))
664 Util.FireAndForget(delegate(object o) { client.Close(); }); 663 client.Close();
665 } 664 }
666 665
667 private void AcknowledgePacket(LLUDPClient client, uint ack, int currentTime, bool fromResend) 666 private void AcknowledgePacket(LLUDPClient client, uint ack, int currentTime, bool fromResend)
@@ -810,19 +809,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
810 private void LogoutHandler(IClientAPI client) 809 private void LogoutHandler(IClientAPI client)
811 { 810 {
812 client.OnLogout -= LogoutHandler; 811 client.OnLogout -= LogoutHandler;
813
814 client.SendLogoutPacket(); 812 client.SendLogoutPacket();
815
816 if (client is LLClientView)
817 RemoveClient(((LLClientView)client).UDPClient);
818 } 813 }
819 814
820 private void ConnectionClosedHandler(IClientAPI client) 815 private void ConnectionClosedHandler(IClientAPI client)
821 { 816 {
822 client.OnConnectionClosed -= ConnectionClosedHandler; 817 client.OnConnectionClosed -= ConnectionClosedHandler;
823 818 RemoveClient(((LLClientView)client).UDPClient);
824 if (client is LLClientView)
825 RemoveClient(((LLClientView)client).UDPClient);
826 } 819 }
827 } 820 }
828} 821}