diff --git a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs index 2598e54fba..412d8c3880 100644 --- a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs +++ b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs @@ -26,18 +26,55 @@ * */ +using System.Collections.Generic; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; +using OpenSim.Framework.Console; namespace OpenSim.Region.Environment.Modules { public class InstantMessageModule : IRegionModule { - private Scene m_scene; + private List m_scenes; + private LogBase m_log; public void Initialise(Scene scene) { - m_scene = scene; + if (!m_scenes.Contains(scene)) + m_scenes.Add(scene); + + scene.EventManager.OnNewClient += OnNewClient; + m_log = OpenSim.Framework.Console.MainLog.Instance; + } + + void OnNewClient(OpenSim.Framework.Interfaces.IClientAPI client) + { + client.OnInstantMessage += OnInstantMessage; + } + + void OnInstantMessage(libsecondlife.LLUUID fromAgentID, + libsecondlife.LLUUID fromAgentSession, libsecondlife.LLUUID toAgentID, + libsecondlife.LLUUID imSessionID, uint timestamp, string fromAgentName, + string message, byte dialog) + { + // TODO: Remove after debugging. Privacy implications. + m_log.Verbose("IM",fromAgentName + ": " + message); + + foreach (Scene m_scene in m_scenes) + { + if (m_scene.Entities.ContainsKey(toAgentID) && m_scene.Entities[toAgentID] is ScenePresence) + { + // Local Message + ScenePresence user = (ScenePresence)m_scene.Entities[toAgentID]; + user.ControllingClient.SendInstantMessage(fromAgentID, fromAgentSession, message, + toAgentID, imSessionID, user.Firstname + " " + user.Lastname, dialog, timestamp); + + // Message sent + return; + } + } + + // Still here, try send via Grid } public void PostInitialise() @@ -55,7 +92,7 @@ namespace OpenSim.Region.Environment.Modules public bool IsSharedModule { - get { return false; } + get { return true; } } } } diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 43a9d8603e..df8b19037c 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -57,40 +57,6 @@ namespace OpenSim.Region.Environment.Scenes Terrain.ModifyTerrain(height, seconds, brushsize, action, north, west, remoteUser); } - /// - /// - /// - /// Inefficient. TODO: Fixme - /// - /// - /// - /// - /// - public void InstantMessage(LLUUID fromAgentID, LLUUID fromAgentSession, LLUUID toAgentID, LLUUID imSessionID, - uint timestamp, string fromAgentName, string message, byte dialog) - { - if (m_scenePresences.ContainsKey(toAgentID)) - { - if (m_scenePresences.ContainsKey(fromAgentID)) - { - // Local sim message - ScenePresence fromAvatar = m_scenePresences[fromAgentID]; - ScenePresence toAvatar = m_scenePresences[toAgentID]; - string fromName = fromAvatar.Firstname + " " + fromAvatar.Lastname; - toAvatar.ControllingClient.SendInstantMessage(fromAgentID, fromAgentSession, message, toAgentID, - imSessionID, fromName, dialog, timestamp); - } - else - { - // Message came from a user outside the sim, ignore? - } - } - else - { - // Grid message - } - } - /// /// /// @@ -531,4 +497,4 @@ namespace OpenSim.Region.Environment.Scenes } } } -} \ No newline at end of file +} diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 83432d49d9..ab94842877 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -739,7 +739,6 @@ namespace OpenSim.Region.Environment.Scenes //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims); client.OnModifyTerrain += ModifyTerrain; //client.OnChatFromViewer += SimChat; - client.OnInstantMessage += InstantMessage; client.OnRequestWearables += InformClientOfNeighbours; client.OnAddPrim += AddNewPrim; client.OnUpdatePrimGroupPosition += UpdatePrimPosition;