diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs index c84c22452b..7a49ccde05 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs @@ -529,20 +529,29 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule OnLocalScriptReset((uint)evArgs[0], (UUID)evArgs[1]); return; case EventManager.EventNames.ChatFromClient: - if (evArgs.Length < 2) + /*if (evArgs.Length < 2) { m_log.Error(LogHeader + " not enough event args for ChatFromClient"); return; } OnLocalChatFromClient(evArgs[0], (OSChatMessage)evArgs[1]); - return; + return;*/ case EventManager.EventNames.ChatFromWorld: - if (evArgs.Length < 2) + /*if (evArgs.Length < 2) { m_log.Error(LogHeader + " not enough event args for ChatFromWorld"); return; } OnLocalChatFromWorld(evArgs[0], (OSChatMessage)evArgs[1]); + return;*/ + case EventManager.EventNames.ChatBroadcast: + if (evArgs.Length < 2) + { + m_log.Error(LogHeader + " not enough event args for ChatFromWorld"); + return; + } + //OnLocalChatBroadcast(evArgs[0], (OSChatMessage)evArgs[1]); + OnLocalChatEvents(ev, evArgs[0], (OSChatMessage)evArgs[1]); return; case EventManager.EventNames.ObjectGrab: OnLocalGrabObject((uint)evArgs[0], (uint)evArgs[1], (Vector3)evArgs[2], (IClientAPI)evArgs[3], (SurfaceTouchEventArgs)evArgs[4]); @@ -1454,6 +1463,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule case SymmetricSyncMessage.MsgType.ScriptReset: case SymmetricSyncMessage.MsgType.ChatFromClient: case SymmetricSyncMessage.MsgType.ChatFromWorld: + case SymmetricSyncMessage.MsgType.ChatBroadcast: case SymmetricSyncMessage.MsgType.ObjectGrab: case SymmetricSyncMessage.MsgType.ObjectGrabbing: case SymmetricSyncMessage.MsgType.ObjectDeGrab: @@ -1779,10 +1789,14 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule HandleRemoteEvent_OnScriptReset(init_actorID, evSeqNum, data); break; case SymmetricSyncMessage.MsgType.ChatFromClient: - HandleRemoteEvent_OnChatFromClient(init_actorID, evSeqNum, data); - break; + //HandleRemoteEvent_OnChatFromClient(init_actorID, evSeqNum, data); + //break; case SymmetricSyncMessage.MsgType.ChatFromWorld: - HandleRemoteEvent_OnChatFromWorld(init_actorID, evSeqNum, data); + //HandleRemoteEvent_OnChatFromWorld(init_actorID, evSeqNum, data); + //break; + case SymmetricSyncMessage.MsgType.ChatBroadcast: + //HandleRemoteEvent_OnChatBroadcast(init_actorID, evSeqNum, data); + HandleRemoveEvent_OnChatEvents(msg.Type, init_actorID, evSeqNum, data); break; case SymmetricSyncMessage.MsgType.ObjectGrab: HandleRemoteEvent_OnObjectGrab(init_actorID, evSeqNum, data); @@ -1890,6 +1904,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule m_scene.EventManager.TriggerScriptResetLocally(part.LocalId, itemID); } + /* /// /// Special actions for remote event ChatFromClient /// @@ -1930,9 +1945,52 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule //ScenePresence sp; //m_scene.TryGetScenePresence(id, out sp); + m_log.Debug(LogHeader + " TriggerOnChatFromWorldLocally "); + m_scene.EventManager.TriggerOnChatFromWorldLocally(m_scene, args); } + private void HandleRemoteEvent_OnChatBroadcast(string actorID, ulong evSeqNum, OSDMap data) + { + + } + * */ + + /// + /// Handlers for remote chat events: ChatFromClient, ChatFromWorld, ChatBroadcast + /// + /// + /// + /// + /// The args of the event + private void HandleRemoveEvent_OnChatEvents(SymmetricSyncMessage.MsgType msgType, string actorID, ulong evSeqNum, OSDMap data) + { + OSChatMessage args = new OSChatMessage(); + args.Channel = data["channel"].AsInteger(); + args.Message = data["msg"].AsString(); + args.Position = data["pos"].AsVector3(); + args.From = data["name"].AsString(); + UUID id = data["id"].AsUUID(); + args.Scene = m_scene; + args.Type = (ChatTypeEnum)data["type"].AsInteger(); + + switch (msgType) + { + case SymmetricSyncMessage.MsgType.ChatFromClient: + ScenePresence sp; + m_scene.TryGetScenePresence(id, out sp); + m_scene.EventManager.TriggerOnChatFromClientLocally(sp, args); //Let WorldCommModule and other modules to catch the event + m_scene.EventManager.TriggerOnChatFromWorldLocally(sp, args); //This is to let ChatModule to get the event and deliver it to avatars + break; + case SymmetricSyncMessage.MsgType.ChatFromWorld: + m_scene.EventManager.TriggerOnChatFromWorldLocally(m_scene, args); + break; + case SymmetricSyncMessage.MsgType.ChatBroadcast: + m_scene.EventManager.TriggerOnChatBroadcastLocally(m_scene, args); + break; + } + } + /// /// Special actions for remote event ChatFromClient /// @@ -2141,7 +2199,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule SendSceneEvent(SymmetricSyncMessage.MsgType.ScriptReset, data); } - + /* private void OnLocalChatFromClient(Object sender, OSChatMessage chat) { ScenePresence avatar = m_scene.GetScenePresence(chat.SenderUUID); @@ -2174,6 +2232,37 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule data["id"] = OSD.FromUUID(chat.SenderUUID); data["type"] = OSD.FromInteger((int)chat.Type); SendSceneEvent(SymmetricSyncMessage.MsgType.ChatFromWorld, data); + } + * */ + + private void OnLocalChatBroadcast(Object sender, OSChatMessage chat) + { + + } + + private void OnLocalChatEvents(EventManager.EventNames evType, Object sender, OSChatMessage chat) + { + OSDMap data = new OSDMap(); + data["channel"] = OSD.FromInteger(chat.Channel); + data["msg"] = OSD.FromString(chat.Message); + data["pos"] = OSD.FromVector3(chat.Position); + data["name"] = OSD.FromString(chat.From); //note this is different from OnLocalChatFromClient + data["id"] = OSD.FromUUID(chat.SenderUUID); + data["type"] = OSD.FromInteger((int)chat.Type); + + switch (evType) + { + case EventManager.EventNames.ChatFromClient: + SendSceneEvent(SymmetricSyncMessage.MsgType.ChatFromClient, data); + break; + case EventManager.EventNames.ChatFromWorld: + SendSceneEvent(SymmetricSyncMessage.MsgType.ChatFromWorld, data); + break; + case EventManager.EventNames.ChatBroadcast: + SendSceneEvent(SymmetricSyncMessage.MsgType.ChatBroadcast, data); + break; + } + } private void OnLocalAttach(uint localID, UUID itemID, UUID avatarID) diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/SymmetricSyncMessage.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/SymmetricSyncMessage.cs index 522eb2d9a0..4775ca783c 100755 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/SymmetricSyncMessage.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/SymmetricSyncMessage.cs @@ -42,6 +42,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule ScriptReset, ChatFromClient, ChatFromWorld, + ChatBroadcast, ObjectGrab, ObjectGrabbing, ObjectDeGrab, diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index ba02ca258e..9d83bba6b3 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs @@ -55,6 +55,7 @@ namespace OpenSim.Region.Framework.Scenes ScriptReset, ChatFromClient, //chats from avatars ChatFromWorld, //chats from objects + ChatBroadcast, //broadcast ObjectGrab, ObjectGrabbing, ObjectDeGrab, @@ -154,10 +155,26 @@ namespace OpenSim.Region.Framework.Scenes } #endregion //ChatFromClient +#region ChatBroadcast + + public override void TriggerOnChatBroadcast(Object sender, OSChatMessage chat) + { + if (m_scene.RegionSyncModule != null) + { + Object[] eventArgs = new Object[2]; + eventArgs[0] = sender; + eventArgs[1] = (Object)chat; + m_scene.RegionSyncModule.PublishSceneEvent(EventNames.ChatBroadcast, eventArgs); + } + TriggerOnChatBroadcastLocally(sender, chat); + } + public void TriggerOnChatBroadcastLocally(Object sender, OSChatMessage chat) { base.TriggerOnChatBroadcast(sender, chat); } +#endregion + #region ChatFromWorld @@ -1874,7 +1891,8 @@ namespace OpenSim.Region.Framework.Scenes } } - public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat) + //public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat) + public virtual void TriggerOnChatBroadcast(Object sender, OSChatMessage chat) { ChatBroadcastEvent handlerChatBroadcast = OnChatBroadcast; if (handlerChatBroadcast != null)