diff options
author | John Hurliman | 2009-10-13 17:33:45 -0700 |
---|---|---|
committer | John Hurliman | 2009-10-13 17:33:45 -0700 |
commit | dc11643c007adf7a640ec4fbabe25995352aaa18 (patch) | |
tree | 108b5f7234756c5395d4ca518cfeb03454f62ace /OpenSim/Region/ClientStack/LindenUDP | |
parent | * Fixed a bug where clients were being added to ClientManager twice (diff) | |
download | opensim-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.cs | 61 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | 13 |
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 | } |