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