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.

GenericGridServerConcept
MW 2009-02-19 11:54:53 +00:00
parent eb143d556d
commit 1b65020b41
2 changed files with 17 additions and 0 deletions

View File

@ -48,6 +48,10 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
private List<Scene> m_Scenes = new List<Scene>();
private Dictionary<UUID, ulong> m_UserRegionMap = new Dictionary<UUID, ulong>();
public event ExternalHandleIM OnExternalIMCapture;
private ExternalHandleIM handlerExternalIMCapture;
public void Initialise(Scene scene, IConfigSource config)
{
IConfig cnf = config.Configs["Messaging"];
@ -95,6 +99,16 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
public void SendInstantMessage(GridInstantMessage im, MessageResultNotification result)
{
handlerExternalIMCapture = OnExternalIMCapture;
if (handlerExternalIMCapture != null)
{
if (handlerExternalIMCapture(im))
{
result(true);
return;
}
}
UUID toAgentID = new UUID(im.toAgentID);
m_log.DebugFormat("[INSTANT MESSAGE]: Attempting delivery of IM from {0} to {1}", im.fromAgentName, toAgentID.ToString());

View File

@ -30,9 +30,12 @@ using OpenSim.Framework;
namespace OpenSim.Region.Framework.Interfaces
{
public delegate void MessageResultNotification(bool success);
public delegate bool ExternalHandleIM(GridInstantMessage im);
public interface IMessageTransferModule
{
event ExternalHandleIM OnExternalIMCapture;
void SendInstantMessage(GridInstantMessage im, MessageResultNotification result);
}
}