diff options
Diffstat (limited to 'OpenSim/Framework/Communications/UserManagerBase.cs')
-rw-r--r-- | OpenSim/Framework/Communications/UserManagerBase.cs | 57 |
1 files changed, 49 insertions, 8 deletions
diff --git a/OpenSim/Framework/Communications/UserManagerBase.cs b/OpenSim/Framework/Communications/UserManagerBase.cs index 3380e90..b8e3114 100644 --- a/OpenSim/Framework/Communications/UserManagerBase.cs +++ b/OpenSim/Framework/Communications/UserManagerBase.cs | |||
@@ -27,6 +27,7 @@ | |||
27 | */ | 27 | */ |
28 | 28 | ||
29 | using System; | 29 | using System; |
30 | using System.Collections; | ||
30 | using System.Collections.Generic; | 31 | using System.Collections.Generic; |
31 | using System.Reflection; | 32 | using System.Reflection; |
32 | using System.Security.Cryptography; | 33 | using System.Security.Cryptography; |
@@ -337,7 +338,7 @@ namespace OpenSim.Framework.UserManagement | |||
337 | /// <param name="request">The users loginrequest</param> | 338 | /// <param name="request">The users loginrequest</param> |
338 | public void CreateAgent(UserProfileData profile, XmlRpcRequest request) | 339 | public void CreateAgent(UserProfileData profile, XmlRpcRequest request) |
339 | { | 340 | { |
340 | //Hashtable requestData = (Hashtable) request.Params[0]; | 341 | Hashtable requestData = (Hashtable) request.Params[0]; |
341 | 342 | ||
342 | UserAgentData agent = new UserAgentData(); | 343 | UserAgentData agent = new UserAgentData(); |
343 | 344 | ||
@@ -362,9 +363,24 @@ namespace OpenSim.Framework.UserManagement | |||
362 | agent.currentPos = profile.homeLocation; | 363 | agent.currentPos = profile.homeLocation; |
363 | 364 | ||
364 | // If user specified additional start, use that | 365 | // If user specified additional start, use that |
365 | // if (requestData.ContainsKey("start")) | 366 | if (requestData.ContainsKey("start")) |
366 | // { | 367 | { |
367 | // string startLoc = ((string) requestData["start"]).Trim(); | 368 | string startLoc = ((string)requestData["start"]).Trim(); |
369 | if (("last" == startLoc) && (profile.currentAgent != null)) | ||
370 | { | ||
371 | if ((profile.currentAgent.currentPos.X > 0) | ||
372 | && (profile.currentAgent.currentPos.Y > 0) | ||
373 | && (profile.currentAgent.currentPos.Z > 0) | ||
374 | ) | ||
375 | { | ||
376 | // TODO: Right now, currentRegion has not been used in GridServer for requesting region. | ||
377 | // TODO: It is only using currentHandle. | ||
378 | agent.currentRegion = profile.currentAgent.currentRegion; | ||
379 | agent.currentHandle = profile.currentAgent.currentHandle; | ||
380 | agent.currentPos = profile.currentAgent.currentPos; | ||
381 | } | ||
382 | } | ||
383 | |||
368 | // if (!(startLoc == "last" || startLoc == "home")) | 384 | // if (!(startLoc == "last" || startLoc == "home")) |
369 | // { | 385 | // { |
370 | // // Format: uri:Ahern&162&213&34 | 386 | // // Format: uri:Ahern&162&213&34 |
@@ -381,7 +397,7 @@ namespace OpenSim.Framework.UserManagement | |||
381 | // { | 397 | // { |
382 | // } | 398 | // } |
383 | // } | 399 | // } |
384 | // } | 400 | } |
385 | 401 | ||
386 | // What time did the user login? | 402 | // What time did the user login? |
387 | agent.loginTime = Util.UnixTimeSinceEpoch(); | 403 | agent.loginTime = Util.UnixTimeSinceEpoch(); |
@@ -424,7 +440,7 @@ namespace OpenSim.Framework.UserManagement | |||
424 | { | 440 | { |
425 | userAgent.agentOnline = false; | 441 | userAgent.agentOnline = false; |
426 | userAgent.logoutTime = Util.UnixTimeSinceEpoch(); | 442 | userAgent.logoutTime = Util.UnixTimeSinceEpoch(); |
427 | userAgent.sessionID = LLUUID.Zero; | 443 | //userAgent.sessionID = LLUUID.Zero; |
428 | if (regionid != null) | 444 | if (regionid != null) |
429 | { | 445 | { |
430 | userAgent.currentRegion = regionid; | 446 | userAgent.currentRegion = regionid; |
@@ -493,8 +509,12 @@ namespace OpenSim.Framework.UserManagement | |||
493 | /// <returns>Successful?</returns> | 509 | /// <returns>Successful?</returns> |
494 | public bool CommitAgent(ref UserProfileData profile) | 510 | public bool CommitAgent(ref UserProfileData profile) |
495 | { | 511 | { |
496 | // TODO: how is this function different from setUserProfile? | 512 | // TODO: how is this function different from setUserProfile? -> Add AddUserAgent() here and commit both tables "users" and "agents" |
497 | return setUserProfile(profile); | 513 | // TODO: what is the logic should be? |
514 | bool ret = false; | ||
515 | ret = AddUserAgent(profile.currentAgent); | ||
516 | ret = ret & setUserProfile(profile); | ||
517 | return ret; | ||
498 | } | 518 | } |
499 | 519 | ||
500 | #endregion | 520 | #endregion |
@@ -558,5 +578,26 @@ namespace OpenSim.Framework.UserManagement | |||
558 | public abstract UserProfileData SetupMasterUser(string firstName, string lastName); | 578 | public abstract UserProfileData SetupMasterUser(string firstName, string lastName); |
559 | public abstract UserProfileData SetupMasterUser(string firstName, string lastName, string password); | 579 | public abstract UserProfileData SetupMasterUser(string firstName, string lastName, string password); |
560 | public abstract UserProfileData SetupMasterUser(LLUUID uuid); | 580 | public abstract UserProfileData SetupMasterUser(LLUUID uuid); |
581 | |||
582 | /// <summary> | ||
583 | /// Add agent to DB | ||
584 | /// </summary> | ||
585 | /// <param name="agentdata">The agent data to be added</param> | ||
586 | public bool AddUserAgent(UserAgentData agentdata) | ||
587 | { | ||
588 | foreach (KeyValuePair<string, IUserData> plugin in _plugins) | ||
589 | { | ||
590 | try | ||
591 | { | ||
592 | plugin.Value.AddNewUserAgent(agentdata); | ||
593 | return true; | ||
594 | } | ||
595 | catch (Exception e) | ||
596 | { | ||
597 | m_log.Info("[USERSTORAGE]: Unable to add agent via " + plugin.Key + "(" + e.ToString() + ")"); | ||
598 | } | ||
599 | } | ||
600 | return false; | ||
601 | } | ||
561 | } | 602 | } |
562 | } | 603 | } |