aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorSean Dague2008-05-21 20:18:40 +0000
committerSean Dague2008-05-21 20:18:40 +0000
commit9389429ed3de0c67e8e708a34c3820ff4f9e8ca0 (patch)
tree11819e3770ba083baa441c04851a4ad22869c5b7
parentthis removes use of the mapper for wearables, and I can confirm things (diff)
downloadopensim-SC-9389429ed3de0c67e8e708a34c3820ff4f9e8ca0.zip
opensim-SC-9389429ed3de0c67e8e708a34c3820ff4f9e8ca0.tar.gz
opensim-SC-9389429ed3de0c67e8e708a34c3820ff4f9e8ca0.tar.bz2
opensim-SC-9389429ed3de0c67e8e708a34c3820ff4f9e8ca0.tar.xz
Clean out some crufty in AvatarFactoryModule
Fix RequestUpdateInventoryItem so that asset changes generate a new asset, which is needed for editing appearance to do the right thing. Persistant appearance seems to work after this, except you need to rebake textures some times.
-rw-r--r--OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs2
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs23
-rw-r--r--OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs186
3 files changed, 18 insertions, 193 deletions
diff --git a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs
index 81e19e6..f2185ab 100644
--- a/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs
+++ b/OpenSim/Region/Environment/Modules/Agent/AssetTransaction/AgentAssetsTransactions.cs
@@ -347,6 +347,8 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
347 347
348 if (asset != null && asset.FullID == assetID) 348 if (asset != null && asset.FullID == assetID)
349 { 349 {
350 // Assets never get updated, new ones get created
351 asset.FullID = LLUUID.Random();
350 asset.Name = item.Name; 352 asset.Name = item.Name;
351 asset.Description = item.Description; 353 asset.Description = item.Description;
352 asset.InvType = (sbyte) item.InvType; 354 asset.InvType = (sbyte) item.InvType;
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index f70eb45..1aa800a 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -1456,17 +1456,7 @@ namespace OpenSim.Region.Environment.Scenes
1456 1456
1457 SendFullUpdateToAllClients(); 1457 SendFullUpdateToAllClients();
1458 SendAppearanceToAllOtherAgents(); 1458 SendAppearanceToAllOtherAgents();
1459 SendOwnAppearance(); 1459 }
1460 }
1461
1462
1463 public void SetWearable(IClientAPI client, int wearableId, AvatarWearable wearable)
1464 {
1465 m_log.Info("[APPEARANCE] Setting wearable with client, wearableid, wearable");
1466 m_appearance.SetWearable(wearableId, wearable);
1467 m_scene.CommsManager.UserService.UpdateUserAppearance(client.AgentId, m_appearance);
1468 client.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
1469 }
1470 1460
1471 /// <summary> 1461 /// <summary>
1472 /// 1462 ///
@@ -1476,6 +1466,11 @@ namespace OpenSim.Region.Environment.Scenes
1476 { 1466 {
1477 m_log.Info("[APPEARANCE] Sending Own Appearance"); 1467 m_log.Info("[APPEARANCE] Sending Own Appearance");
1478 ControllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++); 1468 ControllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
1469 ControllingClient.SendAppearance(
1470 m_appearance.Owner,
1471 m_appearance.VisualParams,
1472 m_appearance.Texture.ToBytes()
1473 );
1479 } 1474 }
1480 1475
1481 /// <summary> 1476 /// <summary>
@@ -1483,6 +1478,7 @@ namespace OpenSim.Region.Environment.Scenes
1483 /// </summary> 1478 /// </summary>
1484 public void SendAppearanceToAllOtherAgents() 1479 public void SendAppearanceToAllOtherAgents()
1485 { 1480 {
1481 m_log.Info("[APPEARANCE] Sending Appearance to All Other Agents");
1486 m_perfMonMS=System.Environment.TickCount; 1482 m_perfMonMS=System.Environment.TickCount;
1487 1483
1488 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) 1484 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
@@ -1506,7 +1502,7 @@ namespace OpenSim.Region.Environment.Scenes
1506 1502
1507 public void SetAppearance(byte[] texture, List<byte> visualParam) 1503 public void SetAppearance(byte[] texture, List<byte> visualParam)
1508 { 1504 {
1509 m_log.Warn("[APPEARANCE] Setting Appearance"); 1505 m_log.Info("[APPEARANCE] Setting Appearance");
1510 m_appearance.SetAppearance(texture, visualParam); 1506 m_appearance.SetAppearance(texture, visualParam);
1511 SetHeight(m_appearance.AvatarHeight); 1507 SetHeight(m_appearance.AvatarHeight);
1512 m_scene.CommsManager.UserService.UpdateUserAppearance(m_controllingClient.AgentId, m_appearance); 1508 m_scene.CommsManager.UserService.UpdateUserAppearance(m_controllingClient.AgentId, m_appearance);
@@ -1517,9 +1513,10 @@ namespace OpenSim.Region.Environment.Scenes
1517 1513
1518 public void SetWearable(int wearableId, AvatarWearable wearable) 1514 public void SetWearable(int wearableId, AvatarWearable wearable)
1519 { 1515 {
1520 m_log.Warn("[APPEARANCE] Setting Wearable"); 1516 m_log.Info("[APPEARANCE] Setting Wearable");
1521 m_appearance.SetWearable(wearableId, wearable); 1517 m_appearance.SetWearable(wearableId, wearable);
1522 m_scene.CommsManager.UserService.UpdateUserAppearance(m_controllingClient.AgentId, m_appearance); 1518 m_scene.CommsManager.UserService.UpdateUserAppearance(m_controllingClient.AgentId, m_appearance);
1519 m_controllingClient.SendWearables(m_appearance.Wearables, m_appearance.Serial++);
1523 } 1520 }
1524 1521
1525 // Because appearance setting is in a module, we actually need 1522 // Because appearance setting is in a module, we actually need
diff --git a/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs
index 5c5cb17..0b75e89 100644
--- a/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs
@@ -46,22 +46,13 @@ namespace OpenSim.Region.Modules.AvatarFactory
46 { 46 {
47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48 private Scene m_scene = null; 48 private Scene m_scene = null;
49 private readonly Dictionary<LLUUID, AvatarAppearance> m_avatarsAppearance = new Dictionary<LLUUID, AvatarAppearance>();
50
51 private bool m_enablePersist = false;
52 private string m_connectionString;
53 private bool m_configured = false;
54 private BaseDatabaseConnector m_databaseMapper;
55 private AppearanceTableMapper m_appearanceMapper;
56
57 private Dictionary<LLUUID, EventWaitHandle> m_fetchesInProgress = new Dictionary<LLUUID, EventWaitHandle>();
58 private object m_syncLock = new object();
59 49
60 public bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance) 50 public bool TryGetAvatarAppearance(LLUUID avatarId, out AvatarAppearance appearance)
61 { 51 {
62 appearance = m_scene.CommsManager.UserService.GetUserAppearance(avatarId); 52 appearance = m_scene.CommsManager.UserService.GetUserAppearance(avatarId);
63 if (appearance != null) 53 if (appearance != null)
64 { 54 {
55 m_log.InfoFormat("[APPEARANCE] found : {0}", appearance.ToString());
65 return true; 56 return true;
66 } 57 }
67 else 58 else
@@ -69,112 +60,6 @@ namespace OpenSim.Region.Modules.AvatarFactory
69 m_log.InfoFormat("[APPEARANCE] appearance not found for {0}", avatarId.ToString()); 60 m_log.InfoFormat("[APPEARANCE] appearance not found for {0}", avatarId.ToString());
70 return false; 61 return false;
71 } 62 }
72
73 // //should only let one thread at a time do this part
74 // EventWaitHandle waitHandle = null;
75 // bool fetchInProgress = false;
76 // lock (m_syncLock)
77 // {
78 // appearance = CheckCache(avatarId);
79 // if (appearance != null)
80 // {
81 // return true;
82 // }
83
84 // //not in cache so check to see if another thread is already fetching it
85 // if (m_fetchesInProgress.TryGetValue(avatarId, out waitHandle))
86 // {
87 // fetchInProgress = true;
88 // }
89 // else
90 // {
91 // fetchInProgress = false;
92
93 // //no thread already fetching this appearance, so add a wait handle to list
94 // //for any following threads that want the same appearance
95 // waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
96 // m_fetchesInProgress.Add(avatarId, waitHandle);
97 // }
98 // }
99
100 // if (fetchInProgress)
101 // {
102 // waitHandle.WaitOne();
103 // appearance = CheckCache(avatarId);
104 // if (appearance != null)
105 // {
106 // waitHandle = null;
107 // return true;
108 // }
109 // else
110 // {
111 // waitHandle = null;
112 // return false;
113 // }
114 // }
115 // else
116 // {
117 // // BUG: !? (Reduced from 5000 to 500 by Adam)
118 // Thread.Sleep(500); //why is this here?
119
120 // //this is the first thread to request this appearance
121 // //so let it check the db and if not found then create a default appearance
122 // //and add that to the cache
123 // appearance = CheckDatabase(avatarId);
124 // if (appearance != null)
125 // {
126 // //appearance has now been added to cache so lets pulse any waiting threads
127 // lock (m_syncLock)
128 // {
129 // m_fetchesInProgress.Remove(avatarId);
130 // waitHandle.Set();
131 // }
132 // // waitHandle.Close();
133 // waitHandle = null;
134 // return true;
135 // }
136
137 // //not found a appearance for the user, so create a new default one
138 // appearance = CreateDefault(avatarId);
139 // if (appearance != null)
140 // {
141 // //update database
142 // if (m_enablePersist)
143 // {
144 // m_appearanceMapper.Add(avatarId.UUID, appearance);
145 // }
146
147 // //add appearance to dictionary cache
148 // lock (m_avatarsAppearance)
149 // {
150 // m_avatarsAppearance[avatarId] = appearance;
151 // }
152
153 // //appearance has now been added to cache so lets pulse any waiting threads
154 // lock (m_syncLock)
155 // {
156 // m_fetchesInProgress.Remove(avatarId);
157 // waitHandle.Set();
158 // }
159 // // waitHandle.Close();
160 // waitHandle = null;
161 // return true;
162 // }
163 // else
164 // {
165 // //something went wrong, so release the wait handle and remove it
166 // //all waiting threads will fail to find cached appearance
167 // //but its better for them to fail than wait for ever
168 // lock (m_syncLock)
169 // {
170 // m_fetchesInProgress.Remove(avatarId);
171 // waitHandle.Set();
172 // }
173 // //waitHandle.Close();
174 // waitHandle = null;
175 // return false;
176 // }
177 // }
178 } 63 }
179 64
180 private AvatarAppearance CreateDefault(LLUUID avatarId) 65 private AvatarAppearance CreateDefault(LLUUID avatarId)
@@ -188,37 +73,6 @@ namespace OpenSim.Region.Modules.AvatarFactory
188 return appearance; 73 return appearance;
189 } 74 }
190 75
191 private AvatarAppearance CheckDatabase(LLUUID avatarId)
192 {
193 AvatarAppearance appearance = null;
194 if (m_enablePersist)
195 {
196 if (m_appearanceMapper.TryGetValue(avatarId.UUID, out appearance))
197 {
198 appearance.VisualParams = GetDefaultVisualParams();
199 appearance.Texture = AvatarAppearance.GetDefaultTexture();
200 lock (m_avatarsAppearance)
201 {
202 m_avatarsAppearance[avatarId] = appearance;
203 }
204 }
205 }
206 return appearance;
207 }
208
209 private AvatarAppearance CheckCache(LLUUID avatarId)
210 {
211 AvatarAppearance appearance = null;
212 lock (m_avatarsAppearance)
213 {
214 if (m_avatarsAppearance.ContainsKey(avatarId))
215 {
216 appearance = m_avatarsAppearance[avatarId];
217 }
218 }
219 return appearance;
220 }
221
222 public void Initialise(Scene scene, IConfigSource source) 76 public void Initialise(Scene scene, IConfigSource source)
223 { 77 {
224 scene.RegisterModuleInterface<IAvatarFactory>(this); 78 scene.RegisterModuleInterface<IAvatarFactory>(this);
@@ -229,31 +83,6 @@ namespace OpenSim.Region.Modules.AvatarFactory
229 m_scene = scene; 83 m_scene = scene;
230 } 84 }
231 85
232 // if (!m_configured)
233 // {
234 // m_configured = true;
235 // try
236 // {
237 // m_enablePersist = source.Configs["Startup"].GetBoolean("appearance_persist", false);
238 // }
239 // catch (Exception)
240 // {
241 // }
242 // if (m_enablePersist)
243 // {
244 // m_connectionString = source.Configs["Startup"].GetString("appearance_connection_string", "");
245
246 // string mapperTypeStr = source.Configs["Startup"].GetString("appearance_database", "MySQL");
247
248 // DataMapperFactory.MAPPER_TYPE mapperType =
249 // (DataMapperFactory.MAPPER_TYPE)
250 // Enum.Parse(typeof (DataMapperFactory.MAPPER_TYPE), mapperTypeStr);
251
252 // m_databaseMapper = DataMapperFactory.GetDataBaseMapper(mapperType, m_connectionString);
253
254 // m_appearanceMapper = new AppearanceTableMapper(m_databaseMapper, "AvatarAppearance");
255 // }
256 // }
257 } 86 }
258 87
259 public void PostInitialise() 88 public void PostInitialise()
@@ -338,20 +167,17 @@ namespace OpenSim.Region.Modules.AvatarFactory
338 } 167 }
339 } 168 }
340 169
341 public void UpdateDatabase(LLUUID userID, AvatarAppearance avatAppearance)
342 {
343 if (m_enablePersist)
344 {
345 m_appearanceMapper.Update(userID.UUID, avatAppearance);
346 }
347 }
348
349 public static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams) 170 public static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams)
350 { 171 {
351 visualParams = GetDefaultVisualParams(); 172 visualParams = GetDefaultVisualParams();
352 wearables = AvatarWearable.DefaultWearables; 173 wearables = AvatarWearable.DefaultWearables;
353 } 174 }
354 175
176 public void UpdateDatabase(LLUUID user, AvatarAppearance appearance)
177 {
178 m_scene.CommsManager.UserService.UpdateUserAppearance(user, appearance);
179 }
180
355 private static byte[] GetDefaultVisualParams() 181 private static byte[] GetDefaultVisualParams()
356 { 182 {
357 byte[] visualParams; 183 byte[] visualParams;