aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Modules/AvatarFactory
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Modules/AvatarFactory')
-rw-r--r--OpenSim/Region/Modules/AvatarFactory/AvatarFactoryModule.cs186
1 files changed, 6 insertions, 180 deletions
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;