From bf23e5d66cf091d310c660877380f3727d0b0234 Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Fri, 23 May 2008 10:24:26 +0000 Subject: i've refactored the ChatModule into two modules: ChatModule and IRCBridgeModule. ChatModule is now only doing in-world chat. IRCBridgeModule is only doing, well, bridging chat to/from IRC. Both modules are now using a new OnChatFromWorld event handler (which Scene.PacketHandler is feeding for chat from in-world instead of going via the Interface method). This refactoring will allow us to easily add other bridge modules (e.g., an XMPP bridge module). there is still a bug in IRCBridgeModule (inherited from the old ChatModule) where FindClientRegion does not really find the client region... --- OpenSim/Region/Environment/Scenes/EventManager.cs | 18 ++++++++++++ .../Environment/Scenes/Scene.PacketHandlers.cs | 33 ++++++++++------------ 2 files changed, 33 insertions(+), 18 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes') diff --git a/OpenSim/Region/Environment/Scenes/EventManager.cs b/OpenSim/Region/Environment/Scenes/EventManager.cs index 7ff9213..e0a24a6 100644 --- a/OpenSim/Region/Environment/Scenes/EventManager.cs +++ b/OpenSim/Region/Environment/Scenes/EventManager.cs @@ -182,6 +182,13 @@ namespace OpenSim.Region.Environment.Scenes /// public delegate void DeregisterCapsEvent(LLUUID agentID, Caps caps); public event DeregisterCapsEvent OnDeregisterCaps; + /// + /// ChatFromWorldEvent is called via Scene when a chat message + /// from world comes in (chat from viewer is available via + /// client.OnChatFromViewer). + /// + public delegate void ChatFromWorldEvent(Object sender, ChatFromViewerArgs chat); + public event ChatFromWorldEvent OnChatFromWorld; public class MoneyTransferArgs : EventArgs { @@ -283,6 +290,7 @@ namespace OpenSim.Region.Environment.Scenes private OnTerrainTickDelegate handlerTerrainTick = null; // OnTerainTick; private RegisterCapsEvent handlerRegisterCaps = null; // OnRegisterCaps; private DeregisterCapsEvent handlerDeregisterCaps = null; // OnDeregisterCaps; + private ChatFromWorldEvent handlerChatFromWorld = null; // OnChatFromWorld; private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete = null; private RequestChangeWaterHeight handlerRequestChangeWaterHeight = null; //OnRequestChangeWaterHeight private ScriptControlEvent handlerScriptControlEvent = null; @@ -625,6 +633,16 @@ namespace OpenSim.Region.Environment.Scenes } } + + public void TriggerOnChatFromWorld(Object sender, ChatFromViewerArgs chat) + { + handlerChatFromWorld = OnChatFromWorld; + if (handlerChatFromWorld != null) + { + handlerChatFromWorld(sender, chat); + } + } + internal void TriggerControlEvent(uint p, LLUUID scriptUUID, LLUUID avatarID, uint held, uint _changed) { handlerScriptControlEvent = OnScriptControlEvent; diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 1b25f13..9eb86cb 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -45,28 +45,25 @@ namespace OpenSim.Region.Environment.Scenes public void SimChat(byte[] message, ChatTypeEnum type, int channel, LLVector3 fromPos, string fromName, LLUUID fromAgentID) { - if (m_simChatModule != null) - { - ChatFromViewerArgs args = new ChatFromViewerArgs(); - - args.Message = Helpers.FieldToUTF8String(message); - args.Channel = channel; - args.Type = type; - args.Position = fromPos; - args.SenderUUID = fromAgentID; + ChatFromViewerArgs args = new ChatFromViewerArgs(); + args.Message = Helpers.FieldToUTF8String(message); + args.Channel = channel; + args.Type = type; + args.Position = fromPos; + args.SenderUUID = fromAgentID; + args.Scene = this; - ScenePresence user = GetScenePresence(fromAgentID); - if (user != null) - args.Sender = user.ControllingClient; - else - args.Sender = null; + ScenePresence user = GetScenePresence(fromAgentID); + if (user != null) + args.Sender = user.ControllingClient; + else + args.Sender = null; - args.From = fromName; - //args. + args.From = fromName; + //args. - m_simChatModule.SimChat(this, args); - } + EventManager.TriggerOnChatFromWorld(this, args); } /// -- cgit v1.1