From d8cbd173f5996eef5badad8288096ac62844f967 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 19 Oct 2007 19:25:22 +0000 Subject: * Instant Message functionality moved into a Region Modules * You can now send instant messages to any user on the simulator, regardless of what region they are in. --- .../Environment/Modules/InstantMessageModule.cs | 43 ++++++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/Environment/Modules/InstantMessageModule.cs') diff --git a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs index 2598e54..412d8c3 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; } } } } -- cgit v1.1