aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/Chat
diff options
context:
space:
mode:
authorMelanie2010-10-23 00:21:42 +0100
committerMelanie2010-10-23 00:21:42 +0100
commit7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e (patch)
tree73f156f1f7dc7d199a946d351828c7e725ebfbda /OpenSim/Region/CoreModules/Avatar/Chat
parentChange some exception to use ToString(). e.Message is not sufficient to fix (diff)
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-SC_OLD-7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e.zip
opensim-SC_OLD-7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e.tar.gz
opensim-SC_OLD-7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e.tar.bz2
opensim-SC_OLD-7f74dc1b14d3ef31a9f20bb3a76ef8d587779f7e.tar.xz
Merge branch 'master' into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Chat')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs43
1 files changed, 35 insertions, 8 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
index 2a590f1..8ab4391 100644
--- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
@@ -169,7 +169,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
169 // sanity check: 169 // sanity check:
170 if (c.Sender == null) 170 if (c.Sender == null)
171 { 171 {
172 m_log.ErrorFormat("[CHAT] OnChatFromClient from {0} has empty Sender field!", sender); 172 m_log.ErrorFormat("[CHAT]: OnChatFromClient from {0} has empty Sender field!", sender);
173 return; 173 return;
174 } 174 }
175 175
@@ -234,8 +234,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
234 if (message.Length >= 1000) // libomv limit 234 if (message.Length >= 1000) // libomv limit
235 message = message.Substring(0, 1000); 235 message = message.Substring(0, 1000);
236 236
237 // m_log.DebugFormat("[CHAT]: DCTA: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, c.Type, sourceType); 237// m_log.DebugFormat(
238// "[CHAT]: DCTA: fromID {0} fromName {1}, region{2}, cType {3}, sType {4}",
239// fromID, fromName, scene.RegionInfo.RegionName, c.Type, sourceType);
238 240
241 HashSet<UUID> receiverIDs = new HashSet<UUID>();
242
239 foreach (Scene s in m_scenes) 243 foreach (Scene s in m_scenes)
240 { 244 {
241 s.ForEachScenePresence( 245 s.ForEachScenePresence(
@@ -250,13 +254,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
250 // objects on a parcel with access restrictions 254 // objects on a parcel with access restrictions
251 if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true) 255 if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true)
252 { 256 {
253 TrySendChatMessage(presence, fromPos, regionPos, fromID, fromNamePrefix+fromName, c.Type, message, sourceType); 257 if (TrySendChatMessage(presence, fromPos, regionPos, fromID, fromNamePrefix + fromName, c.Type, message, sourceType))
258 receiverIDs.Add(presence.UUID);
254 } 259 }
255 } 260 }
256 261
257 } 262 }
258 ); 263 );
259 } 264 }
265
266 (scene as Scene).EventManager.TriggerOnChatToClients(
267 fromID, receiverIDs, message, c.Type, fromPos, fromName, sourceType, ChatAudibleLevel.Fully);
260 } 268 }
261 269
262 static private Vector3 CenterOfRegion = new Vector3(128, 128, 30); 270 static private Vector3 CenterOfRegion = new Vector3(128, 128, 30);
@@ -294,6 +302,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
294 } 302 }
295 303
296 // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType); 304 // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType);
305 HashSet<UUID> receiverIDs = new HashSet<UUID>();
306
297 if (c.Scene != null) 307 if (c.Scene != null)
298 { 308 {
299 ((Scene)c.Scene).ForEachScenePresence 309 ((Scene)c.Scene).ForEachScenePresence
@@ -314,18 +324,33 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
314 324
315 client.SendChatMessage(c.Message, (byte)cType, CenterOfRegion, fromName, fromID, 325 client.SendChatMessage(c.Message, (byte)cType, CenterOfRegion, fromName, fromID,
316 (byte)sourceType, (byte)ChatAudibleLevel.Fully); 326 (byte)sourceType, (byte)ChatAudibleLevel.Fully);
327 receiverIDs.Add(presence.UUID);
317 } 328 }
318 ); 329 );
330 (c.Scene as Scene).EventManager.TriggerOnChatToClients(
331 fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully);
319 } 332 }
320 } 333 }
321 334
322 335 /// <summary>
323 protected virtual void TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos, 336 /// Try to send a message to the given presence
337 /// </summary>
338 /// <param name="presence">The receiver</param>
339 /// <param name="fromPos"></param>
340 /// <param name="regionPos">/param>
341 /// <param name="fromAgentID"></param>
342 /// <param name="fromName"></param>
343 /// <param name="type"></param>
344 /// <param name="message"></param>
345 /// <param name="src"></param>
346 /// <returns>true if the message was sent to the receiver, false if it was not sent due to failing a
347 /// precondition</returns>
348 protected virtual bool TrySendChatMessage(ScenePresence presence, Vector3 fromPos, Vector3 regionPos,
324 UUID fromAgentID, string fromName, ChatTypeEnum type, 349 UUID fromAgentID, string fromName, ChatTypeEnum type,
325 string message, ChatSourceType src) 350 string message, ChatSourceType src)
326 { 351 {
327 // don't send stuff to child agents 352 // don't send stuff to child agents
328 if (presence.IsChildAgent) return; 353 if (presence.IsChildAgent) return false;
329 354
330 Vector3 fromRegionPos = fromPos + regionPos; 355 Vector3 fromRegionPos = fromPos + regionPos;
331 Vector3 toRegionPos = presence.AbsolutePosition + 356 Vector3 toRegionPos = presence.AbsolutePosition +
@@ -338,12 +363,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
338 type == ChatTypeEnum.Say && dis > m_saydistance || 363 type == ChatTypeEnum.Say && dis > m_saydistance ||
339 type == ChatTypeEnum.Shout && dis > m_shoutdistance) 364 type == ChatTypeEnum.Shout && dis > m_shoutdistance)
340 { 365 {
341 return; 366 return false;
342 } 367 }
343 368
344 // TODO: should change so the message is sent through the avatar rather than direct to the ClientView 369 // TODO: should change so the message is sent through the avatar rather than direct to the ClientView
345 presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName, 370 presence.ControllingClient.SendChatMessage(message, (byte) type, fromPos, fromName,
346 fromAgentID,(byte)src,(byte)ChatAudibleLevel.Fully); 371 fromAgentID, (byte)src, (byte)ChatAudibleLevel.Fully);
372
373 return true;
347 } 374 }
348 375
349 Dictionary<UUID, System.Threading.Timer> Timers = new Dictionary<UUID, System.Threading.Timer>(); 376 Dictionary<UUID, System.Threading.Timer> Timers = new Dictionary<UUID, System.Threading.Timer>();