From 53bcf2139e7c8c9da2fbbcafc45704eae3bc5daa Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Wed, 21 May 2008 18:02:09 +0000 Subject: this removes use of the mapper for wearables, and I can confirm things get saved to the database. There are still issues on wearing things after a cleared cache that I'm looking at now. --- OpenSim/Data/MSSQL/MSSQLUserData.cs | 18 ++--- OpenSim/Data/MySQL/MySQLManager.cs | 86 ++++++++++++---------- OpenSim/Data/MySQL/MySQLUserData.cs | 48 +++++++----- .../MySQL/Resources/CreateAvatarAppearance.sql | 63 ++++++++-------- OpenSim/Data/NHibernate/NHibernateUserData.cs | 4 +- OpenSim/Data/SQLite/SQLiteUserData.cs | 18 ++--- OpenSim/Data/UserDataBase.cs | 30 ++++---- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 3 +- .../Modules/AvatarFactory/AvatarFactoryModule.cs | 5 ++ 9 files changed, 151 insertions(+), 124 deletions(-) diff --git a/OpenSim/Data/MSSQL/MSSQLUserData.cs b/OpenSim/Data/MSSQL/MSSQLUserData.cs index 9dc6812..0d3563f 100644 --- a/OpenSim/Data/MSSQL/MSSQLUserData.cs +++ b/OpenSim/Data/MSSQL/MSSQLUserData.cs @@ -747,15 +747,15 @@ namespace OpenSim.Data.MSSQL /// Appearance /// TODO: stubs for now to get us to a compiling state gently - // override public AvatarAppearance GetUserAppearance(LLUUID user) - // { - // return new AvatarAppearance(); - // } - - // override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) - // { - // return; - // } + override public AvatarAppearance GetUserAppearance(LLUUID user) + { + return new AvatarAppearance(); + } + + override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + { + return; + } override public void AddAttachment(LLUUID user, LLUUID item) { diff --git a/OpenSim/Data/MySQL/MySQLManager.cs b/OpenSim/Data/MySQL/MySQLManager.cs index 7e1b405..4b11739 100644 --- a/OpenSim/Data/MySQL/MySQLManager.cs +++ b/OpenSim/Data/MySQL/MySQLManager.cs @@ -191,6 +191,12 @@ namespace OpenSim.Data.MySQL cmd.ExecuteNonQuery(); } + public void ExecuteSql(string sql) + { + MySqlCommand cmd = new MySqlCommand(sql, dbcon); + cmd.ExecuteNonQuery(); + } + /// /// Given a list of tables, return the version of the tables, as seen in the database /// @@ -532,38 +538,42 @@ namespace OpenSim.Data.MySQL public AvatarAppearance readAppearanceRow(IDataReader reader) { - AvatarAppearance appearance = new AvatarAppearance(); - appearance.Owner = new LLUUID((string)reader["owner"]); - appearance.Serial = Convert.ToInt32(reader["serial"]); - appearance.VisualParams = (byte[])reader["visual_params"]; - appearance.Texture = new LLObject.TextureEntry((byte[])reader["texture"], 0, ((byte[])reader["texture"]).Length); - appearance.AvatarHeight = (float)Convert.ToDouble(reader["avatar_height"]); - appearance.BodyItem = new LLUUID((string)reader["body_item"]); - appearance.BodyAsset = new LLUUID((string)reader["body_asset"]); - appearance.SkinItem = new LLUUID((string)reader["skin_item"]); - appearance.SkinAsset = new LLUUID((string)reader["skin_asset"]); - appearance.HairItem = new LLUUID((string)reader["hair_item"]); - appearance.HairAsset = new LLUUID((string)reader["hair_asset"]); - appearance.EyesItem = new LLUUID((string)reader["eyes_item"]); - appearance.EyesAsset = new LLUUID((string)reader["eyes_asset"]); - appearance.ShirtItem = new LLUUID((string)reader["shirt_item"]); - appearance.ShirtAsset = new LLUUID((string)reader["shirt_asset"]); - appearance.PantsItem = new LLUUID((string)reader["pants_item"]); - appearance.PantsAsset = new LLUUID((string)reader["pants_asset"]); - appearance.ShoesItem = new LLUUID((string)reader["shoes_item"]); - appearance.ShoesAsset = new LLUUID((string)reader["shoes_asset"]); - appearance.SocksItem = new LLUUID((string)reader["socks_item"]); - appearance.SocksAsset = new LLUUID((string)reader["socks_asset"]); - appearance.JacketItem = new LLUUID((string)reader["jacket_item"]); - appearance.JacketAsset = new LLUUID((string)reader["jacket_asset"]); - appearance.GlovesItem = new LLUUID((string)reader["gloves_item"]); - appearance.GlovesAsset = new LLUUID((string)reader["gloves_asset"]); - appearance.UnderShirtItem = new LLUUID((string)reader["undershirt_item"]); - appearance.UnderShirtAsset = new LLUUID((string)reader["undershirt_asset"]); - appearance.UnderPantsItem = new LLUUID((string)reader["underpants_item"]); - appearance.UnderPantsAsset = new LLUUID((string)reader["underpants_asset"]); - appearance.SkirtItem = new LLUUID((string)reader["skirt_item"]); - appearance.SkirtAsset = new LLUUID((string)reader["skirt_asset"]); + AvatarAppearance appearance = null; + if (reader.Read()) + { + appearance = new AvatarAppearance(); + appearance.Owner = new LLUUID((string)reader["owner"]); + appearance.Serial = Convert.ToInt32(reader["serial"]); + appearance.VisualParams = (byte[])reader["visual_params"]; + appearance.Texture = new LLObject.TextureEntry((byte[])reader["texture"], 0, ((byte[])reader["texture"]).Length); + appearance.AvatarHeight = (float)Convert.ToDouble(reader["avatar_height"]); + appearance.BodyItem = new LLUUID((string)reader["body_item"]); + appearance.BodyAsset = new LLUUID((string)reader["body_asset"]); + appearance.SkinItem = new LLUUID((string)reader["skin_item"]); + appearance.SkinAsset = new LLUUID((string)reader["skin_asset"]); + appearance.HairItem = new LLUUID((string)reader["hair_item"]); + appearance.HairAsset = new LLUUID((string)reader["hair_asset"]); + appearance.EyesItem = new LLUUID((string)reader["eyes_item"]); + appearance.EyesAsset = new LLUUID((string)reader["eyes_asset"]); + appearance.ShirtItem = new LLUUID((string)reader["shirt_item"]); + appearance.ShirtAsset = new LLUUID((string)reader["shirt_asset"]); + appearance.PantsItem = new LLUUID((string)reader["pants_item"]); + appearance.PantsAsset = new LLUUID((string)reader["pants_asset"]); + appearance.ShoesItem = new LLUUID((string)reader["shoes_item"]); + appearance.ShoesAsset = new LLUUID((string)reader["shoes_asset"]); + appearance.SocksItem = new LLUUID((string)reader["socks_item"]); + appearance.SocksAsset = new LLUUID((string)reader["socks_asset"]); + appearance.JacketItem = new LLUUID((string)reader["jacket_item"]); + appearance.JacketAsset = new LLUUID((string)reader["jacket_asset"]); + appearance.GlovesItem = new LLUUID((string)reader["gloves_item"]); + appearance.GlovesAsset = new LLUUID((string)reader["gloves_asset"]); + appearance.UnderShirtItem = new LLUUID((string)reader["undershirt_item"]); + appearance.UnderShirtAsset = new LLUUID((string)reader["undershirt_asset"]); + appearance.UnderPantsItem = new LLUUID((string)reader["underpants_item"]); + appearance.UnderPantsAsset = new LLUUID((string)reader["underpants_asset"]); + appearance.SkirtItem = new LLUUID((string)reader["skirt_item"]); + appearance.SkirtAsset = new LLUUID((string)reader["skirt_asset"]); + } return appearance; } @@ -1007,10 +1017,10 @@ namespace OpenSim.Data.MySQL MySqlCommand cmd = (MySqlCommand) dbcon.CreateCommand(); cmd.CommandText = sql; cmd.Parameters.AddWithValue("?owner", appearance.Owner.ToString()); - cmd.Parameters.AddWithValue("?serial", appearance.Serial.ToString()); + cmd.Parameters.AddWithValue("?serial", appearance.Serial); cmd.Parameters.AddWithValue("?visual_params", appearance.VisualParams); cmd.Parameters.AddWithValue("?texture", appearance.Texture.ToBytes()); - cmd.Parameters.AddWithValue("?avatar_height", appearance.AvatarHeight.ToString()); + cmd.Parameters.AddWithValue("?avatar_height", appearance.AvatarHeight); cmd.Parameters.AddWithValue("?body_item", appearance.BodyItem.ToString()); cmd.Parameters.AddWithValue("?body_asset", appearance.BodyAsset.ToString()); cmd.Parameters.AddWithValue("?skin_item", appearance.SkinItem.ToString()); @@ -1037,12 +1047,10 @@ namespace OpenSim.Data.MySQL cmd.Parameters.AddWithValue("?underpants_asset", appearance.UnderPantsAsset.ToString()); cmd.Parameters.AddWithValue("?skirt_item", appearance.SkirtItem.ToString()); cmd.Parameters.AddWithValue("?skirt_asset", appearance.SkirtAsset.ToString()); - - int x; - if ((x = cmd.ExecuteNonQuery()) > 0) - { + + if (cmd.ExecuteNonQuery() > 0) returnval = true; - } + cmd.Dispose(); } catch (Exception e) diff --git a/OpenSim/Data/MySQL/MySQLUserData.cs b/OpenSim/Data/MySQL/MySQLUserData.cs index 56bdcbf..35bcb1d 100644 --- a/OpenSim/Data/MySQL/MySQLUserData.cs +++ b/OpenSim/Data/MySQL/MySQLUserData.cs @@ -34,8 +34,6 @@ using libsecondlife; using log4net; using OpenSim.Framework; using OpenSim.Data.Base; -using OpenSim.Data.MapperFactory; -using OpenSim.Data.MySQLMapper; namespace OpenSim.Data.MySQL { @@ -56,8 +54,6 @@ namespace OpenSim.Data.MySQL private string m_userFriendsTableName; private string m_appearanceTableName = "avatarappearance"; private string m_connectString; - private BaseDatabaseConnector m_databaseMapper; - private AppearanceTableMapper m_appearanceMapper; /// /// Loads and initialises the MySQL storage plugin @@ -107,15 +103,6 @@ namespace OpenSim.Data.MySQL database = new MySQLManager(m_connectString); } - string mapperTypeStr = "MySQL"; - DataMapperFactory.MAPPER_TYPE mapperType = - (DataMapperFactory.MAPPER_TYPE) - Enum.Parse(typeof (DataMapperFactory.MAPPER_TYPE), mapperTypeStr); - - m_databaseMapper = DataMapperFactory.GetDataBaseMapper(mapperType, m_connectString); - - m_appearanceMapper = new AppearanceTableMapper(m_databaseMapper, "AvatarAppearance"); - TestTables(); } @@ -203,6 +190,12 @@ namespace OpenSim.Data.MySQL { database.ExecuteResourceSql("CreateAvatarAppearance.sql"); return; + } + else if (oldVersion.Contains("Rev.1")) + { + database.ExecuteSql("drop table avatarappearance"); + database.ExecuteResourceSql("CreateAvatarAppearance.sql"); + return; } } @@ -676,18 +669,35 @@ namespace OpenSim.Data.MySQL // override override public AvatarAppearance GetUserAppearance(LLUUID user) { - AvatarAppearance appearance = null; - if (!m_appearanceMapper.TryGetValue(user.UUID, out appearance)) + try { + lock (database) + { + Dictionary param = new Dictionary(); + param["?owner"] = user.ToString(); + + IDbCommand result = database.Query("SELECT * FROM " + m_appearanceTableName + " WHERE owner = ?owner", param); + IDataReader reader = result.ExecuteReader(); + + AvatarAppearance appearance = database.readAppearanceRow(reader); + + reader.Close(); + result.Dispose(); + + return appearance; + } + } + catch (Exception e) { - appearance = null; + database.Reconnect(); + m_log.Error(e.ToString()); + return null; } - return appearance; } - // override override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) { - m_appearanceMapper.Update(user.UUID, appearance); + appearance.Owner = user; + database.insertAppearanceRow(appearance); } override public void AddAttachment(LLUUID user, LLUUID item) diff --git a/OpenSim/Data/MySQL/Resources/CreateAvatarAppearance.sql b/OpenSim/Data/MySQL/Resources/CreateAvatarAppearance.sql index 0deb099..475c933 100644 --- a/OpenSim/Data/MySQL/Resources/CreateAvatarAppearance.sql +++ b/OpenSim/Data/MySQL/Resources/CreateAvatarAppearance.sql @@ -4,36 +4,39 @@ DROP TABLE IF EXISTS `avatarappearance`; CREATE TABLE `avatarappearance` ( - `UUID` char(36) NOT NULL, - `Serial` int(10) unsigned NOT NULL, - `WearableItem0` char(36) NOT NULL, - `WearableAsset0` char(36) NOT NULL, - `WearableItem1` char(36) NOT NULL, - `WearableAsset1` char(36) NOT NULL, - `WearableItem2` char(36) NOT NULL, - `WearableAsset2` char(36) NOT NULL, - `WearableItem3` char(36) NOT NULL, - `WearableAsset3` char(36) NOT NULL, - `WearableItem4` char(36) NOT NULL, - `WearableAsset4` char(36) NOT NULL, - `WearableItem5` char(36) NOT NULL, - `WearableAsset5` char(36) NOT NULL, - `WearableItem6` char(36) NOT NULL, - `WearableAsset6` char(36) NOT NULL, - `WearableItem7` char(36) NOT NULL, - `WearableAsset7` char(36) NOT NULL, - `WearableItem8` char(36) NOT NULL, - `WearableAsset8` char(36) NOT NULL, - `WearableItem9` char(36) NOT NULL, - `WearableAsset9` char(36) NOT NULL, - `WearableItem10` char(36) NOT NULL, - `WearableAsset10` char(36) NOT NULL, - `WearableItem11` char(36) NOT NULL, - `WearableAsset11` char(36) NOT NULL, - `WearableItem12` char(36) NOT NULL, - `WearableAsset12` char(36) NOT NULL, + Owner char(36) NOT NULL, + Serial int(10) unsigned NOT NULL, + Visual_Params blob NOT NULL, + Texture blob NOT NULL, + Avatar_Height float NOT NULL, + Body_Item char(36) NOT NULL, + Body_Asset char(36) NOT NULL, + Skin_Item char(36) NOT NULL, + Skin_Asset char(36) NOT NULL, + Hair_Item char(36) NOT NULL, + Hair_Asset char(36) NOT NULL, + Eyes_Item char(36) NOT NULL, + Eyes_Asset char(36) NOT NULL, + Shirt_Item char(36) NOT NULL, + Shirt_Asset char(36) NOT NULL, + Pants_Item char(36) NOT NULL, + Pants_Asset char(36) NOT NULL, + Shoes_Item char(36) NOT NULL, + Shoes_Asset char(36) NOT NULL, + Socks_Item char(36) NOT NULL, + Socks_Asset char(36) NOT NULL, + Jacket_Item char(36) NOT NULL, + Jacket_Asset char(36) NOT NULL, + Gloves_Item char(36) NOT NULL, + Gloves_Asset char(36) NOT NULL, + Undershirt_Item char(36) NOT NULL, + Undershirt_Asset char(36) NOT NULL, + Underpants_Item char(36) NOT NULL, + Underpants_Asset char(36) NOT NULL, + Skirt_Item char(36) NOT NULL, + Skirt_Asset char(36) NOT NULL, - PRIMARY KEY (`UUID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Rev.1'; + PRIMARY KEY (`Owner`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Rev.2'; diff --git a/OpenSim/Data/NHibernate/NHibernateUserData.cs b/OpenSim/Data/NHibernate/NHibernateUserData.cs index 678ec04..b757496 100644 --- a/OpenSim/Data/NHibernate/NHibernateUserData.cs +++ b/OpenSim/Data/NHibernate/NHibernateUserData.cs @@ -306,7 +306,7 @@ namespace OpenSim.Data.NHibernate /// Appearance /// TODO: stubs for now to get us to a compiling state gently - public AvatarAppearance GetUserAppearance(LLUUID user) + public override AvatarAppearance GetUserAppearance(LLUUID user) { AvatarAppearance appearance; // TODO: I'm sure I'll have to do something silly here @@ -328,7 +328,7 @@ namespace OpenSim.Data.NHibernate } - public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + public override void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) { bool exists = ExistsAppearance(user); using (ISession session = factory.OpenSession()) diff --git a/OpenSim/Data/SQLite/SQLiteUserData.cs b/OpenSim/Data/SQLite/SQLiteUserData.cs index d8b140c..d943f53 100644 --- a/OpenSim/Data/SQLite/SQLiteUserData.cs +++ b/OpenSim/Data/SQLite/SQLiteUserData.cs @@ -480,15 +480,15 @@ namespace OpenSim.Data.SQLite /// Appearance /// TODO: stubs for now to get us to a compiling state gently - // override public AvatarAppearance GetUserAppearance(LLUUID user) - // { - // return new AvatarAppearance(); - // } - - // override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) - // { - // return; - // } + override public AvatarAppearance GetUserAppearance(LLUUID user) + { + return new AvatarAppearance(); + } + + override public void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) + { + return; + } override public void AddAttachment(LLUUID user, LLUUID item) { diff --git a/OpenSim/Data/UserDataBase.cs b/OpenSim/Data/UserDataBase.cs index ad40bbc..cbf24a7 100644 --- a/OpenSim/Data/UserDataBase.cs +++ b/OpenSim/Data/UserDataBase.cs @@ -59,20 +59,22 @@ namespace OpenSim.Data public abstract string Name {get;} public abstract void Initialise(string connect); public abstract List GeneratePickerResults(LLUUID queryID, string query); - public virtual AvatarAppearance GetUserAppearance(LLUUID user) { - AvatarAppearance aa = null; - try { - aa = aplist[user]; - m_log.Info("[APPEARANCE] Found appearance for " + user.ToString() + aa.ToString()); - } catch (System.Collections.Generic.KeyNotFoundException e) { - m_log.Info("[APPEARANCE] No appearance found for " + user.ToString()); - } - return aa; - } - public virtual void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) { - aplist[user] = appearance; - m_log.Info("[APPEARANCE] Setting appearance for " + user.ToString() + appearance.ToString()); - } + public abstract AvatarAppearance GetUserAppearance(LLUUID user); + public abstract void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance); + // public virtual AvatarAppearance GetUserAppearance(LLUUID user) { + // AvatarAppearance aa = null; + // try { + // aa = aplist[user]; + // m_log.Info("[APPEARANCE] Found appearance for " + user.ToString() + aa.ToString()); + // } catch (System.Collections.Generic.KeyNotFoundException e) { + // m_log.Info("[APPEARANCE] No appearance found for " + user.ToString()); + // } + // return aa; + // } + // public virtual void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance) { + // aplist[user] = appearance; + // m_log.Info("[APPEARANCE] Setting appearance for " + user.ToString() + appearance.ToString()); + // } public abstract void AddAttachment(LLUUID user, LLUUID item); public abstract void RemoveAttachment(LLUUID user, LLUUID item); public abstract List GetAttachments(LLUUID user); diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index d0b87fd..f70eb45 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -1456,8 +1456,7 @@ namespace OpenSim.Region.Environment.Scenes SendFullUpdateToAllClients(); SendAppearanceToAllOtherAgents(); - // This is probably egregious - m_controllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++); + SendOwnAppearance(); } diff --git a/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs index 37b7e8d..5c5cb17 100644 --- a/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs @@ -61,9 +61,14 @@ namespace OpenSim.Region.Modules.AvatarFactory { appearance = m_scene.CommsManager.UserService.GetUserAppearance(avatarId); if (appearance != null) + { return true; + } else + { + m_log.InfoFormat("[APPEARANCE] appearance not found for {0}", avatarId.ToString()); return false; + } // //should only let one thread at a time do this part // EventWaitHandle waitHandle = null; -- cgit v1.1