aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
authorTeravus Ovares2008-05-31 12:18:29 +0000
committerTeravus Ovares2008-05-31 12:18:29 +0000
commitfebe78d06249cd4d36a86e97610dd45ab518a757 (patch)
tree7b9733fc14045f09e874440b923cfe443b781b6a /OpenSim/Region/Environment
parentMantis#1425. Thank you kindly, Melanie for a patch that: (diff)
downloadopensim-SC_OLD-febe78d06249cd4d36a86e97610dd45ab518a757.zip
opensim-SC_OLD-febe78d06249cd4d36a86e97610dd45ab518a757.tar.gz
opensim-SC_OLD-febe78d06249cd4d36a86e97610dd45ab518a757.tar.bz2
opensim-SC_OLD-febe78d06249cd4d36a86e97610dd45ab518a757.tar.xz
* Implements UserServer logoff in a few situations
* User tries to log-in but is already logged in. Userserver will send message to simulator user was in to log the user out there. * From the UserServer, admin types 'logoff-user firstname lastname message'. * Some regions may not get the message because they're not updated yet.
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs34
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs13
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs1
3 files changed, 46 insertions, 2 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 6916c6d..c74dca4 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -2003,8 +2003,8 @@ namespace OpenSim.Region.Environment.Scenes
2003 m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate; 2003 m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate;
2004 m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup; 2004 m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup;
2005 m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar; 2005 m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar;
2006 2006 m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid;
2007 m_sceneGridService.KillObject = SendKillObject; 2007 m_sceneGridService.KillObject += SendKillObject;
2008 } 2008 }
2009 2009
2010 /// <summary> 2010 /// <summary>
@@ -2012,6 +2012,8 @@ namespace OpenSim.Region.Environment.Scenes
2012 /// </summary> 2012 /// </summary>
2013 public void UnRegisterReginWithComms() 2013 public void UnRegisterReginWithComms()
2014 { 2014 {
2015 m_sceneGridService.KillObject -= SendKillObject;
2016 m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid;
2015 m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar; 2017 m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar;
2016 m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup; 2018 m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup;
2017 m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate; 2019 m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate;
@@ -2064,6 +2066,34 @@ namespace OpenSim.Region.Environment.Scenes
2064 } 2066 }
2065 } 2067 }
2066 2068
2069 protected void HandleLogOffUserFromGrid(ulong regionHandle, LLUUID AvatarID, LLUUID RegionSecret, string message)
2070 {
2071 if (RegionInfo.RegionHandle == regionHandle)
2072 {
2073 ScenePresence loggingOffUser = null;
2074 loggingOffUser = GetScenePresence(AvatarID);
2075 if (loggingOffUser != null)
2076 {
2077 if (RegionSecret == loggingOffUser.ControllingClient.SecureSessionId)
2078 {
2079 loggingOffUser.ControllingClient.Kick(message);
2080 // Give them a second to receive the message!
2081 System.Threading.Thread.Sleep(1000);
2082 loggingOffUser.ControllingClient.Close(true);
2083 }
2084 else
2085 {
2086 m_log.Info("[USERLOGOFF]: System sending the LogOff user message failed to sucessfully authenticate");
2087 }
2088 }
2089 else
2090 {
2091 m_log.InfoFormat("[USERLOGOFF]: Got a logoff request for {0} but the user isn't here. The user might already have been logged out", AvatarID.ToString());
2092 }
2093 }
2094
2095
2096 }
2067 /// <summary> 2097 /// <summary>
2068 /// Add a caps handler for the given agent. If the CAPS handler already exists for this agent, 2098 /// Add a caps handler for the given agent. If the CAPS handler already exists for this agent,
2069 /// then it is replaced by a new CAPS handler. 2099 /// then it is replaced by a new CAPS handler.
diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
index d2d75e8..e841ad4 100644
--- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
@@ -58,6 +58,7 @@ namespace OpenSim.Region.Environment.Scenes
58 public event RegionUp OnRegionUp; 58 public event RegionUp OnRegionUp;
59 public event ChildAgentUpdate OnChildAgentUpdate; 59 public event ChildAgentUpdate OnChildAgentUpdate;
60 public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar; 60 public event RemoveKnownRegionsFromAvatarList OnRemoveKnownRegionFromAvatar;
61 public event LogOffUser OnLogOffUser;
61 62
62 private AgentCrossing handlerAvatarCrossingIntoRegion = null; // OnAvatarCrossingIntoRegion; 63 private AgentCrossing handlerAvatarCrossingIntoRegion = null; // OnAvatarCrossingIntoRegion;
63 private ExpectUserDelegate handlerExpectUser = null; // OnExpectUser; 64 private ExpectUserDelegate handlerExpectUser = null; // OnExpectUser;
@@ -67,6 +68,7 @@ namespace OpenSim.Region.Environment.Scenes
67 private RegionUp handlerRegionUp = null; // OnRegionUp; 68 private RegionUp handlerRegionUp = null; // OnRegionUp;
68 private ChildAgentUpdate handlerChildAgentUpdate = null; // OnChildAgentUpdate; 69 private ChildAgentUpdate handlerChildAgentUpdate = null; // OnChildAgentUpdate;
69 private RemoveKnownRegionsFromAvatarList handlerRemoveKnownRegionFromAvatar = null; // OnRemoveKnownRegionFromAvatar; 70 private RemoveKnownRegionsFromAvatarList handlerRemoveKnownRegionFromAvatar = null; // OnRemoveKnownRegionFromAvatar;
71 private LogOffUser handlerLogOffUser = null;
70 72
71 public KillObjectDelegate KillObject; 73 public KillObjectDelegate KillObject;
72 public string _debugRegionName = String.Empty; 74 public string _debugRegionName = String.Empty;
@@ -105,6 +107,7 @@ namespace OpenSim.Region.Environment.Scenes
105 regionCommsHost.OnCloseAgentConnection += CloseConnection; 107 regionCommsHost.OnCloseAgentConnection += CloseConnection;
106 regionCommsHost.OnRegionUp += newRegionUp; 108 regionCommsHost.OnRegionUp += newRegionUp;
107 regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate; 109 regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate;
110 regionCommsHost.OnLogOffUser += GridLogOffUser;
108 } 111 }
109 else 112 else
110 { 113 {
@@ -121,6 +124,7 @@ namespace OpenSim.Region.Environment.Scenes
121 { 124 {
122 if (regionCommsHost != null) 125 if (regionCommsHost != null)
123 { 126 {
127 regionCommsHost.OnLogOffUser -= GridLogOffUser;
124 regionCommsHost.OnChildAgentUpdate -= ChildAgentUpdate; 128 regionCommsHost.OnChildAgentUpdate -= ChildAgentUpdate;
125 regionCommsHost.OnRegionUp -= newRegionUp; 129 regionCommsHost.OnRegionUp -= newRegionUp;
126 regionCommsHost.OnExpectUser -= NewUserConnection; 130 regionCommsHost.OnExpectUser -= NewUserConnection;
@@ -150,6 +154,15 @@ namespace OpenSim.Region.Environment.Scenes
150 } 154 }
151 } 155 }
152 156
157 protected void GridLogOffUser(ulong regionHandle, LLUUID AgentID, LLUUID RegionSecret, string message)
158 {
159 handlerLogOffUser = OnLogOffUser;
160 if (handlerLogOffUser != null)
161 {
162 handlerLogOffUser(regionHandle, AgentID, RegionSecret, message);
163 }
164 }
165
153 protected bool newRegionUp(RegionInfo region) 166 protected bool newRegionUp(RegionInfo region)
154 { 167 {
155 handlerRegionUp = OnRegionUp; 168 handlerRegionUp = OnRegionUp;
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index 30075da..0fdd720 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -596,6 +596,7 @@ namespace OpenSim.Region.Environment.Scenes
596 m_scene.SendAllSceneObjectsToClient(this); 596 m_scene.SendAllSceneObjectsToClient(this);
597 597
598 m_scene.EventManager.TriggerOnMakeRootAgent(this); 598 m_scene.EventManager.TriggerOnMakeRootAgent(this);
599 m_scene.CommsManager.UserService.UpdateUserCurrentRegion(UUID, m_scene.RegionInfo.RegionID, m_scene.RegionInfo.RegionHandle);
599 600
600 //m_gotAllObjectsInScene = true; 601 //m_gotAllObjectsInScene = true;
601 //} 602 //}