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)