From e0fc854f05b137c353196356e5b26d11b6ee6867 Mon Sep 17 00:00:00 2001 From: Melanie Date: Mon, 28 Dec 2009 23:42:08 +0000 Subject: Adding new fields and home location methid to presence. Adding cleanup (deleting all but one presence record) on logout so that they don't pile up. --- OpenSim/Data/MySQL/MySQLGenericTableHandler.cs | 2 + OpenSim/Data/MySQL/MySQLPresenceData.cs | 52 ++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) (limited to 'OpenSim/Data/MySQL') diff --git a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs index b2bd5f6..873d6d4 100644 --- a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs +++ b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs @@ -177,6 +177,8 @@ namespace OpenSim.Data.MySQL result.Add(row); } + reader.Close(); + CloseReaderCommand(cmd); return result.ToArray(); diff --git a/OpenSim/Data/MySQL/MySQLPresenceData.cs b/OpenSim/Data/MySQL/MySQLPresenceData.cs index 8ccad90..72b8a0c 100644 --- a/OpenSim/Data/MySQL/MySQLPresenceData.cs +++ b/OpenSim/Data/MySQL/MySQLPresenceData.cs @@ -93,5 +93,57 @@ namespace OpenSim.Data.MySQL return true; } + + public bool SetHomeLocation(string userID, UUID regionID, Vector3 position, Vector3 lookAt) + { + PresenceData[] pd = Get("UserID", userID); + if (pd.Length == 0) + return false; + + MySqlCommand cmd = new MySqlCommand(); + + cmd.CommandText = String.Format("update {0} set HomeRegionID=?HomeRegionID, HomePosition=?HomePosition, HomeLookAt=?HomeLookAt where UserID=?UserID", m_Realm); + + cmd.Parameters.AddWithValue("?UserID", userID); + cmd.Parameters.AddWithValue("?HomeRegionID", regionID.ToString()); + cmd.Parameters.AddWithValue("?HomePosition", position); + cmd.Parameters.AddWithValue("?HomeLookAt", lookAt); + + if (ExecuteNonQuery(cmd) == 0) + return false; + + return true; + } + + public void Prune(string userID) + { + MySqlCommand cmd = new MySqlCommand(); + + cmd.CommandText = String.Format("select * from {0} where UserID=?UserID", m_Realm); + + cmd.Parameters.AddWithValue("?UserID", userID); + + IDataReader reader = ExecuteReader(cmd); + + List deleteSessions = new List(); + int online = 0; + + while(reader.Read()) + { + if (bool.Parse(reader["Online"].ToString())) + online++; + else + deleteSessions.Add(new UUID(reader["SessionID"].ToString())); + } + + if (online == 0 && deleteSessions.Count > 0) + deleteSessions.RemoveAt(0); + + reader.Close(); + CloseReaderCommand(cmd); + + foreach (UUID s in deleteSessions) + Delete("SessionID", s.ToString()); + } } } -- cgit v1.1