aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorMW2009-02-19 11:54:53 +0000
committerMW2009-02-19 11:54:53 +0000
commit1b65020b414bca9120fe87998769b5e138c435cd (patch)
tree01ca7aa57f4362b7c63cd6a8c9e3a4ad76cc4979 /OpenSim/Region
parentForce plugin state update when region crossing (diff)
downloadopensim-SC-1b65020b414bca9120fe87998769b5e138c435cd.zip
opensim-SC-1b65020b414bca9120fe87998769b5e138c435cd.tar.gz
opensim-SC-1b65020b414bca9120fe87998769b5e138c435cd.tar.bz2
opensim-SC-1b65020b414bca9120fe87998769b5e138c435cd.tar.xz
Added a event to IMessageTransferModule (and MessageTransferModule) so that other modules can capture IM messages and do custom handling of them. As just attaching to Client IM events doesn't really support this, as they would still get routed through the normal process and could give back errors.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs14
-rw-r--r--OpenSim/Region/Framework/Interfaces/IMessageTransferModule.cs3
2 files changed, 17 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index 38d2d21..b8e0c29 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -48,6 +48,10 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
48 private List<Scene> m_Scenes = new List<Scene>(); 48 private List<Scene> m_Scenes = new List<Scene>();
49 private Dictionary<UUID, ulong> m_UserRegionMap = new Dictionary<UUID, ulong>(); 49 private Dictionary<UUID, ulong> m_UserRegionMap = new Dictionary<UUID, ulong>();
50 50
51 public event ExternalHandleIM OnExternalIMCapture;
52
53 private ExternalHandleIM handlerExternalIMCapture;
54
51 public void Initialise(Scene scene, IConfigSource config) 55 public void Initialise(Scene scene, IConfigSource config)
52 { 56 {
53 IConfig cnf = config.Configs["Messaging"]; 57 IConfig cnf = config.Configs["Messaging"];
@@ -95,6 +99,16 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
95 99
96 public void SendInstantMessage(GridInstantMessage im, MessageResultNotification result) 100 public void SendInstantMessage(GridInstantMessage im, MessageResultNotification result)
97 { 101 {
102 handlerExternalIMCapture = OnExternalIMCapture;
103 if (handlerExternalIMCapture != null)
104 {
105 if (handlerExternalIMCapture(im))
106 {
107 result(true);
108 return;
109 }
110 }
111
98 UUID toAgentID = new UUID(im.toAgentID); 112 UUID toAgentID = new UUID(im.toAgentID);
99 113
100 m_log.DebugFormat("[INSTANT MESSAGE]: Attempting delivery of IM from {0} to {1}", im.fromAgentName, toAgentID.ToString()); 114 m_log.DebugFormat("[INSTANT MESSAGE]: Attempting delivery of IM from {0} to {1}", im.fromAgentName, toAgentID.ToString());
diff --git a/OpenSim/Region/Framework/Interfaces/IMessageTransferModule.cs b/OpenSim/Region/Framework/Interfaces/IMessageTransferModule.cs
index ffae307..bc194b9 100644
--- a/OpenSim/Region/Framework/Interfaces/IMessageTransferModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IMessageTransferModule.cs
@@ -30,9 +30,12 @@ using OpenSim.Framework;
30namespace OpenSim.Region.Framework.Interfaces 30namespace OpenSim.Region.Framework.Interfaces
31{ 31{
32 public delegate void MessageResultNotification(bool success); 32 public delegate void MessageResultNotification(bool success);
33 public delegate bool ExternalHandleIM(GridInstantMessage im);
33 34
34 public interface IMessageTransferModule 35 public interface IMessageTransferModule
35 { 36 {
37 event ExternalHandleIM OnExternalIMCapture;
38
36 void SendInstantMessage(GridInstantMessage im, MessageResultNotification result); 39 void SendInstantMessage(GridInstantMessage im, MessageResultNotification result);
37 } 40 }
38} 41}