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 | |
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 '')
6 files changed, 14 insertions, 71 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 | } |
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index dcee824..d651fd4 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | |||
@@ -833,6 +833,11 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
833 | set { m_circuitCode = value; } | 833 | set { m_circuitCode = value; } |
834 | } | 834 | } |
835 | 835 | ||
836 | public IPEndPoint RemoteEndPoint | ||
837 | { | ||
838 | get { return new IPEndPoint(IPAddress.Loopback, (ushort)m_circuitCode); } | ||
839 | } | ||
840 | |||
836 | public void SendBlueBoxMessage(UUID FromAvatarID, String FromAvatarName, String Message) | 841 | public void SendBlueBoxMessage(UUID FromAvatarID, String FromAvatarName, String Message) |
837 | { | 842 | { |
838 | 843 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index bb71896..7944548 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -2363,6 +2363,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2363 | /// <param name="client"></param> | 2363 | /// <param name="client"></param> |
2364 | public override void AddNewClient(IClientAPI client) | 2364 | public override void AddNewClient(IClientAPI client) |
2365 | { | 2365 | { |
2366 | ClientManager.Add(client); | ||
2367 | |||
2366 | CheckHeartbeat(); | 2368 | CheckHeartbeat(); |
2367 | SubscribeToClientEvents(client); | 2369 | SubscribeToClientEvents(client); |
2368 | ScenePresence presence; | 2370 | ScenePresence presence; |
@@ -3002,7 +3004,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3002 | agentTransactions.RemoveAgentAssetTransactions(agentID); | 3004 | agentTransactions.RemoveAgentAssetTransactions(agentID); |
3003 | } | 3005 | } |
3004 | 3006 | ||
3007 | // Remove the avatar from the scene | ||
3005 | m_sceneGraph.RemoveScenePresence(agentID); | 3008 | m_sceneGraph.RemoveScenePresence(agentID); |
3009 | ClientManager.Remove(agentID); | ||
3006 | 3010 | ||
3007 | try | 3011 | try |
3008 | { | 3012 | { |
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/IRCStackModule.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/IRCStackModule.cs index c962329..4c2a4b9 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/IRCStackModule.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/IRCStackModule.cs | |||
@@ -64,7 +64,6 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView | |||
64 | void user_OnIRCReady(IRCClientView cv) | 64 | void user_OnIRCReady(IRCClientView cv) |
65 | { | 65 | { |
66 | m_log.Info("[IRCd] Adding user..."); | 66 | m_log.Info("[IRCd] Adding user..."); |
67 | m_scene.ClientManager.Add(cv.AgentId, cv.RemoteEndPoint, cv); | ||
68 | cv.Start(); | 67 | cv.Start(); |
69 | m_log.Info("[IRCd] Added user to Scene"); | 68 | m_log.Info("[IRCd] Added user to Scene"); |
70 | } | 69 | } |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index eb7b0d7..41a6255 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | |||
@@ -155,7 +155,6 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
155 | NPCAvatar npcAvatar = new NPCAvatar(p_firstname, p_lastname, p_position, p_scene); | 155 | NPCAvatar npcAvatar = new NPCAvatar(p_firstname, p_lastname, p_position, p_scene); |
156 | npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue); | 156 | npcAvatar.CircuitCode = (uint) Util.RandomClass.Next(0, int.MaxValue); |
157 | 157 | ||
158 | p_scene.ClientManager.Add(npcAvatar.AgentId, npcAvatar.RemoteEndPoint, npcAvatar); | ||
159 | p_scene.AddNewClient(npcAvatar); | 158 | p_scene.AddNewClient(npcAvatar); |
160 | 159 | ||
161 | ScenePresence sp; | 160 | ScenePresence sp; |