aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Communications
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/Framework/Communications
parentMantis#1425. Thank you kindly, Melanie for a patch that: (diff)
downloadopensim-SC-febe78d06249cd4d36a86e97610dd45ab518a757.zip
opensim-SC-febe78d06249cd4d36a86e97610dd45ab518a757.tar.gz
opensim-SC-febe78d06249cd4d36a86e97610dd45ab518a757.tar.bz2
opensim-SC-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/Framework/Communications')
-rw-r--r--OpenSim/Framework/Communications/IUserService.cs7
-rw-r--r--OpenSim/Framework/Communications/LoginService.cs15
-rw-r--r--OpenSim/Framework/Communications/UserManagerBase.cs15
3 files changed, 36 insertions, 1 deletions
diff --git a/OpenSim/Framework/Communications/IUserService.cs b/OpenSim/Framework/Communications/IUserService.cs
index 67a8c78..59ad188 100644
--- a/OpenSim/Framework/Communications/IUserService.cs
+++ b/OpenSim/Framework/Communications/IUserService.cs
@@ -113,6 +113,13 @@ namespace OpenSim.Framework.Communications
113 /// Get's the User Appearance 113 /// Get's the User Appearance
114 AvatarAppearance GetUserAppearance(LLUUID user); 114 AvatarAppearance GetUserAppearance(LLUUID user);
115 115
116 /// <summary>
117 /// Updates the current region the User is in
118 /// </summary>
119 /// <param name="avatarid">User Region the Avatar is IN</param>
120 /// <param name="retionuuid">User Region the Avatar is IN</param>
121 void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle);
122
116 void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance); 123 void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance);
117 124
118 void AddAttachment(LLUUID user, LLUUID attach); 125 void AddAttachment(LLUUID user, LLUUID attach);
diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs
index bd0fa53..08b071f 100644
--- a/OpenSim/Framework/Communications/LoginService.cs
+++ b/OpenSim/Framework/Communications/LoginService.cs
@@ -79,7 +79,15 @@ namespace OpenSim.Framework.Communications
79 /// <param name="response">The existing response</param> 79 /// <param name="response">The existing response</param>
80 /// <param name="theUser">The user profile</param> 80 /// <param name="theUser">The user profile</param>
81 public abstract void CustomiseResponse(LoginResponse response, UserProfileData theUser, string startLocationRequest); 81 public abstract void CustomiseResponse(LoginResponse response, UserProfileData theUser, string startLocationRequest);
82
83 /// <summary>
84 /// If the user is already logged in, try to notify the region that the user they've got is dead.
85 /// </summary>
86 /// <param name="theUser"></param>
87 public virtual void LogOffUser(UserProfileData theUser, string message)
88 {
82 89
90 }
83 /// <summary> 91 /// <summary>
84 /// Get the initial login inventory skeleton (in other words, the folder structure) for the given user. 92 /// Get the initial login inventory skeleton (in other words, the folder structure) for the given user.
85 /// </summary> 93 /// </summary>
@@ -196,9 +204,14 @@ namespace OpenSim.Framework.Communications
196 // because of some problem, for instance, the crashment of server or client, 204 // because of some problem, for instance, the crashment of server or client,
197 // the user cannot log in any longer. 205 // the user cannot log in any longer.
198 userProfile.CurrentAgent.AgentOnline = false; 206 userProfile.CurrentAgent.AgentOnline = false;
199 m_userManager.CommitAgent(ref userProfile);
200 207
208 m_userManager.CommitAgent(ref userProfile);
209
210 // try to tell the region that their user is dead.
211 LogOffUser(userProfile, "You were logged off because you logged in from another location");
212
201 // Reject the login 213 // Reject the login
214
202 215
203 m_log.InfoFormat( 216 m_log.InfoFormat(
204 "[LOGIN END]: Notifying user {0} {1} that they are already logged in", 217 "[LOGIN END]: Notifying user {0} {1} that they are already logged in",
diff --git a/OpenSim/Framework/Communications/UserManagerBase.cs b/OpenSim/Framework/Communications/UserManagerBase.cs
index 87e06f1..8985bb6 100644
--- a/OpenSim/Framework/Communications/UserManagerBase.cs
+++ b/OpenSim/Framework/Communications/UserManagerBase.cs
@@ -187,6 +187,21 @@ namespace OpenSim.Framework.Communications
187 return null; 187 return null;
188 } 188 }
189 189
190 public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid, ulong regionhandle)
191 {
192 foreach (KeyValuePair<string, IUserData> plugin in _plugins)
193 {
194 try
195 {
196 plugin.Value.UpdateUserCurrentRegion(avatarid, regionuuid, regionhandle);
197 }
198 catch (Exception e)
199 {
200 m_log.Info("[USERSTORAGE]: Unable to updateuser location via " + plugin.Key + "(" + e.ToString() + ")");
201 }
202 }
203 }
204
190 /// <summary> 205 /// <summary>
191 /// Loads a user's friend list 206 /// Loads a user's friend list
192 /// </summary> 207 /// </summary>