diff options
author | Dr Scofield | 2008-10-20 17:31:54 +0000 |
---|---|---|
committer | Dr Scofield | 2008-10-20 17:31:54 +0000 |
commit | 72a388a7b6dfba8f93ffc5c5c45db4c44bb46480 (patch) | |
tree | db9ab06f6820806d8c2b3fc32029383971e955b7 /OpenSim/Region/Environment/Modules/Scripting | |
parent | Mantis #2438 (diff) | |
download | opensim-SC_OLD-72a388a7b6dfba8f93ffc5c5c45db4c44bb46480.zip opensim-SC_OLD-72a388a7b6dfba8f93ffc5c5c45db4c44bb46480.tar.gz opensim-SC_OLD-72a388a7b6dfba8f93ffc5c5c45db4c44bb46480.tar.bz2 opensim-SC_OLD-72a388a7b6dfba8f93ffc5c5c45db4c44bb46480.tar.xz |
cleaning up IRCBridgeModule to allow for configuration from in-world,
chat relaying via private channels, and old IRCBridgeModule
behaviour. also cleaning up IRCBridgeModule's OpenSim.ini
configuration variable names (still supporting "old" variable
names). refactored IRCChatModule into IRCConnector and incorporating
watchdog from IRCBridgeModule into IRCConnector.
enabling ChatModule to be used as a super-class and utilizing it in
ConciergeModule.
Diffstat (limited to 'OpenSim/Region/Environment/Modules/Scripting')
-rw-r--r-- | OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs | 71 |
1 files changed, 29 insertions, 42 deletions
diff --git a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs index f8e933d..36add06 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/WorldComm/WorldCommModule.cs | |||
@@ -34,6 +34,10 @@ using OpenSim.Framework; | |||
34 | using OpenSim.Region.Environment.Interfaces; | 34 | using OpenSim.Region.Environment.Interfaces; |
35 | using OpenSim.Region.Environment.Scenes; | 35 | using OpenSim.Region.Environment.Scenes; |
36 | 36 | ||
37 | // using log4net; | ||
38 | // using System.Reflection; | ||
39 | |||
40 | |||
37 | /***************************************************** | 41 | /***************************************************** |
38 | * | 42 | * |
39 | * WorldCommModule | 43 | * WorldCommModule |
@@ -83,6 +87,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
83 | { | 87 | { |
84 | public class WorldCommModule : IRegionModule, IWorldComm | 88 | public class WorldCommModule : IRegionModule, IWorldComm |
85 | { | 89 | { |
90 | // private static readonly ILog m_log = | ||
91 | // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
92 | |||
86 | private ListenerManager m_listenerManager; | 93 | private ListenerManager m_listenerManager; |
87 | private Queue m_pending; | 94 | private Queue m_pending; |
88 | private Queue m_pendingQ; | 95 | private Queue m_pendingQ; |
@@ -117,6 +124,7 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
117 | m_scene.RegisterModuleInterface<IWorldComm>(this); | 124 | m_scene.RegisterModuleInterface<IWorldComm>(this); |
118 | m_listenerManager = new ListenerManager(maxlisteners, maxhandles); | 125 | m_listenerManager = new ListenerManager(maxlisteners, maxhandles); |
119 | m_scene.EventManager.OnChatFromClient += DeliverClientMessage; | 126 | m_scene.EventManager.OnChatFromClient += DeliverClientMessage; |
127 | m_scene.EventManager.OnChatBroadcast += DeliverClientMessage; | ||
120 | m_pendingQ = new Queue(); | 128 | m_pendingQ = new Queue(); |
121 | m_pending = Queue.Synchronized(m_pendingQ); | 129 | m_pending = Queue.Synchronized(m_pendingQ); |
122 | } | 130 | } |
@@ -197,6 +205,22 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
197 | m_listenerManager.DeleteListener(itemID); | 205 | m_listenerManager.DeleteListener(itemID); |
198 | } | 206 | } |
199 | 207 | ||
208 | public void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg) | ||
209 | { | ||
210 | Vector3 position; | ||
211 | SceneObjectPart source; | ||
212 | ScenePresence avatar; | ||
213 | |||
214 | if ((source = m_scene.GetSceneObjectPart(id)) != null) | ||
215 | position = source.AbsolutePosition; | ||
216 | else if ((avatar = m_scene.GetScenePresence(id)) != null) | ||
217 | position = avatar.AbsolutePosition; | ||
218 | else | ||
219 | return; | ||
220 | |||
221 | DeliverMessage(type, channel, name, id, msg, position); | ||
222 | } | ||
223 | |||
200 | /// <summary> | 224 | /// <summary> |
201 | /// This method scans over the objects which registered an interest in listen callbacks. | 225 | /// This method scans over the objects which registered an interest in listen callbacks. |
202 | /// For everyone it finds, it checks if it fits the given filter. If it does, then | 226 | /// For everyone it finds, it checks if it fits the given filter. If it does, then |
@@ -210,39 +234,8 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
210 | /// <param name="name">name of sender (object or avatar)</param> | 234 | /// <param name="name">name of sender (object or avatar)</param> |
211 | /// <param name="id">key of sender (object or avatar)</param> | 235 | /// <param name="id">key of sender (object or avatar)</param> |
212 | /// <param name="msg">msg to sent</param> | 236 | /// <param name="msg">msg to sent</param> |
213 | public void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg) | 237 | public void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg, Vector3 position) |
214 | { | 238 | { |
215 | SceneObjectPart source = null; | ||
216 | ScenePresence avatar = null; | ||
217 | Vector3 position; | ||
218 | |||
219 | source = m_scene.GetSceneObjectPart(id); | ||
220 | if (source != null) | ||
221 | position = source.AbsolutePosition; | ||
222 | else { | ||
223 | avatar = m_scene.GetScenePresence(id); | ||
224 | if (avatar != null) | ||
225 | { | ||
226 | position = avatar.AbsolutePosition; | ||
227 | } | ||
228 | else | ||
229 | { | ||
230 | // This is potentially problematic, though I don't | ||
231 | // see how to take advantage of it, basically a request | ||
232 | // to send a message to the region does not have to come | ||
233 | // from something in the region (eg a plugin can send it) | ||
234 | if (type == ChatTypeEnum.Region) | ||
235 | { | ||
236 | position = new Vector3(128, 128, 20); | ||
237 | } | ||
238 | else | ||
239 | { | ||
240 | // bail out early, given source could not be found | ||
241 | return; | ||
242 | } | ||
243 | } | ||
244 | } | ||
245 | |||
246 | // Determine which listen event filters match the given set of arguments, this results | 239 | // Determine which listen event filters match the given set of arguments, this results |
247 | // in a limited set of listeners, each belonging a host. If the host is in range, add them | 240 | // in a limited set of listeners, each belonging a host. If the host is in range, add them |
248 | // to the pending queue. | 241 | // to the pending queue. |
@@ -326,11 +319,6 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
326 | 319 | ||
327 | #endregion | 320 | #endregion |
328 | 321 | ||
329 | // private void NewClient(IClientAPI client) | ||
330 | // { | ||
331 | // client.OnChatFromViewer += DeliverClientMessage; | ||
332 | // } | ||
333 | |||
334 | /******************************************************************** | 322 | /******************************************************************** |
335 | * | 323 | * |
336 | * Listener Stuff | 324 | * Listener Stuff |
@@ -339,11 +327,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.WorldComm | |||
339 | 327 | ||
340 | private void DeliverClientMessage(Object sender, OSChatMessage e) | 328 | private void DeliverClientMessage(Object sender, OSChatMessage e) |
341 | { | 329 | { |
342 | DeliverMessage(e.Type, | 330 | if (null != e.Sender) |
343 | e.Channel, | 331 | DeliverMessage(e.Type, e.Channel, e.Sender.Name, e.Sender.AgentId, e.Message, e.Position); |
344 | e.Sender.Name, | 332 | else |
345 | e.Sender.AgentId, | 333 | DeliverMessage(e.Type, e.Channel, e.From, UUID.Zero, e.Message, e.Position); |
346 | e.Message); | ||
347 | } | 334 | } |
348 | 335 | ||
349 | public Object[] GetSerializationData(UUID itemID) | 336 | public Object[] GetSerializationData(UUID itemID) |