diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClient.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClient.cs
index 0a8d6893d6..91d3ca6bae 100644
--- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClient.cs
+++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClient.cs
@@ -883,7 +883,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
// Register for interesting client events which will be forwarded to auth sim
// These are the raw packet data blocks from the client, intercepted and sent up to the sim
client.OnAgentUpdateRaw += HandleAgentUpdateRaw;
- client.OnChatFromClientRaw += HandleChatFromClientRaw;
+ //SYMMETRIC SYNC: do not subscribe to OnChatFromClientRaw, we may remove this event entirely later
+ //client.OnChatFromClientRaw += HandleChatFromClientRaw;
client.OnAgentRequestSit += HandleAgentRequestSit;
client.OnAgentSit += HandleAgentSit;
client.OnGrabObject += HandleGrabObject;
diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClientView.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClientView.cs
index b629e6ae1e..3f39e6a630 100644
--- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClientView.cs
+++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClientView.cs
@@ -179,8 +179,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
// *** This is the main receive loop thread for each connected client
private void ReceiveLoop()
{
- m_scene.EventManager.OnChatFromClient += new EventManager.ChatFromClientEvent(EventManager_OnChatFromClient);
- m_scene.EventManager.OnChatFromWorld += new EventManager.ChatFromWorldEvent(EventManager_OnChatFromClient);
+ //SYMMETRIC SYNC: commenting out the code for handling chats
+ // m_scene.EventManager.OnChatFromClient += new EventManager.ChatFromClientEvent(EventManager_OnChatFromClient);
+ // m_scene.EventManager.OnChatFromWorld += new EventManager.ChatFromWorldEvent(EventManager_OnChatFromClient);
+ //end of SYMMETRIC SYNC
// Reset stats and time
diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SceneToScriptEngineConnector.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SceneToScriptEngineConnector.cs
index 258ce57482..3167d901c4 100644
--- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SceneToScriptEngineConnector.cs
+++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SceneToScriptEngineConnector.cs
@@ -188,8 +188,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
// *** This is the main thread loop for each connected client
private void ReceiveLoop()
{
- //m_scene.EventManager.OnChatFromClient += new EventManager.ChatFromClientEvent(EventManager_OnChatFromClient);
-
// Reset stats and time
lastStatTime = DateTime.Now;
msgsIn = msgsOut = bytesIn = bytesOut = 0;
diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs
index 5d797b4530..50cf0bbbd2 100755
--- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs
+++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs
@@ -550,6 +550,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//For now, we use configuration to access the information. Might be replaced by some Grid Service later on.
private RegionSyncListenerInfo GetLocalSyncListenerInfo()
{
+ m_log.Debug("reading in " + m_scene.RegionInfo.RegionName + "_SyncListenerIPAddress" + " and " + m_scene.RegionInfo.RegionName + "_SyncListenerPort");
+
string addr = m_sysConfig.GetString(m_scene.RegionInfo.RegionName+"_SyncListenerIPAddress", IPAddrUnknown);
int port = m_sysConfig.GetInt(m_scene.RegionInfo.RegionName+"_SyncListenerPort", PortUnknown);
@@ -573,8 +575,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
{
//For now, we assume there is only one remote listener to connect to. Later on,
//we may need to modify the code to read in multiple listeners.
- string addr = m_sysConfig.GetString("SyncListenerIPAddress", IPAddrUnknown);
- int port = m_sysConfig.GetInt("SyncListenerPort", PortUnknown);
+ string addr = m_sysConfig.GetString(m_scene.RegionInfo.RegionName + "_SyncListenerIPAddress", IPAddrUnknown);
+ int port = m_sysConfig.GetInt(m_scene.RegionInfo.RegionName + "_SyncListenerPort", PortUnknown);
if (!addr.Equals(IPAddrUnknown) && port != PortUnknown)
{
RegionSyncListenerInfo info = new RegionSyncListenerInfo(addr, port);
@@ -594,7 +596,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
if (m_isSyncListenerLocal)
{
- if (m_localSyncListener.IsListening)
+ if (m_localSyncListener!=null && m_localSyncListener.IsListening)
{
m_log.Warn("[REGION SYNC MODULE]: RegionSyncListener is local, already started");
}
@@ -618,7 +620,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
{
if (m_isSyncListenerLocal)
{
- if (m_localSyncListener.IsListening)
+ if (m_localSyncListener!=null && m_localSyncListener.IsListening)
{
m_localSyncListener.Shutdown();
}
@@ -646,6 +648,12 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//For now, there is only one remote listener.
private void StartSyncConnections()
{
+ if (m_remoteSyncListeners == null)
+ {
+ m_log.Error(LogHeader + " SyncListener's address or port has not been configured.");
+ return;
+ }
+
foreach (RegionSyncListenerInfo remoteListener in m_remoteSyncListeners)
{
SyncConnector syncConnector = new SyncConnector(m_syncConnectorNum++, remoteListener, this);
@@ -720,6 +728,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
SendSyncMessage(SymmetricSyncMessage.MsgType.RegionName, m_scene.RegionInfo.RegionName);
m_log.WarnFormat("Sending region name: \"{0}\"", m_scene.RegionInfo.RegionName);
+ SendSyncMessage(SymmetricSyncMessage.MsgType.ActorID, m_actorID);
+
SendSyncMessage(SymmetricSyncMessage.MsgType.GetTerrain);
SendSyncMessage(SymmetricSyncMessage.MsgType.GetObjects);
//Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetAvatars));
@@ -842,6 +852,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//EVENTS PROCESSING
case SymmetricSyncMessage.MsgType.UpdateScript:
case SymmetricSyncMessage.MsgType.ScriptReset:
+ case SymmetricSyncMessage.MsgType.ChatFromClient:
{
HandleRemoteEvent(msg);
return;
@@ -993,6 +1004,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
case SymmetricSyncMessage.MsgType.ScriptReset:
HandleRemoteEvent_OnScriptReset(init_actorID, evSeqNum, data);
break;
+ case SymmetricSyncMessage.MsgType.ChatFromClient:
+ HandleRemoteEvent_OnChatFromClient(init_actorID, evSeqNum, data);
+ break;
}
//if this is a relay node, forwards the event
@@ -1041,6 +1055,46 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
m_scene.EventManager.TriggerScriptResetLocally(part.LocalId, itemID);
}
+ ///
+ /// Special actions for remote event ChatFromClient
+ ///
+ /// OSDMap data of event args
+ private void HandleRemoteEvent_OnChatFromClient(string actorID, ulong evSeqNum, OSDMap data)
+ {
+ m_log.Debug(LogHeader + ", " + m_actorID + ": received ChatFromClient from "+actorID+", seq "+evSeqNum);
+
+ 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.Say;
+ args.Type = (ChatTypeEnum) data["type"].AsInteger();
+ ScenePresence sp;
+ m_scene.TryGetScenePresence(id, out sp);
+
+
+ //m_scene.EventManager.TriggerOnChatFromClientLocally(sp, args);
+
+ m_scene.EventManager.TriggerOnChatFromWorldLocally(sp, args);
+ /*
+ if (sp != null)
+ {
+ args.Sender = sp.ControllingClient;
+ args.SenderUUID = id;
+ m_scene.EventManager.TriggerOnChatBroadcastLocally(sp.ControllingClient, args);
+ }
+ else
+ {
+ args.Sender = null;
+ args.SenderUUID = id;
+ m_scene.EventManager.TriggerOnChatFromWorldLocally(null, args);
+ }
+ * */
+ //m_scene.EventManager
+ }
///
/// Send a sync message to remove the given objects in all connected actors, if this is a relay node.
@@ -1087,6 +1141,14 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
}
OnLocalScriptReset((uint)evArgs[0], (UUID)evArgs[1]);
return;
+ case EventManager.EventNames.ChatFromClient:
+ if (evArgs.Length < 2)
+ {
+ m_log.Error(LogHeader + " not enough event args for ChatFromClient");
+ return;
+ }
+ OnLocalChatFromClient(evArgs[0], (OSChatMessage)evArgs[1]);
+ return;
default:
return;
}
@@ -1111,12 +1173,15 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
data["running"] = OSD.FromBoolean(isScriptRunning);
data["assetID"] = OSD.FromUUID(newAssetID);
+ /*
data["actorID"] = OSD.FromString(m_actorID);
data["seqNum"] = OSD.FromULong(GetNextEventSeq());
SymmetricSyncMessage rsm = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdateScript, OSDParser.SerializeJsonString(data));
//send to actors who are interested in the event
SendSceneEventToRelevantSyncConnectors(m_actorID, rsm);
+ * */
+ SendSceneEvent(SymmetricSyncMessage.MsgType.UpdateScript, data);
}
private void OnLocalScriptReset(uint localID, UUID itemID)
@@ -1131,6 +1196,28 @@ 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);
+
+ if (avatar == null)
+ {
+ m_log.Warn(LogHeader + "avatar " + chat.SenderUUID + " not exist locally, NOT sending out ChatFromClient");
+ return;
+ }
+
+ 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);
+ data["name"] = OSD.FromString(avatar.Name);
+ data["id"] = OSD.FromUUID(chat.SenderUUID);
+ data["type"] = OSD.FromInteger((int)chat.Type);
+ SendSceneEvent(SymmetricSyncMessage.MsgType.ChatFromClient, data);
+ }
+
private void SendSceneEvent(SymmetricSyncMessage.MsgType msgType, OSDMap data)
{
data["actorID"] = OSD.FromString(m_actorID);
diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/SymmetricSyncMessage.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/SymmetricSyncMessage.cs
index 0b47f16234..f04a6b5616 100755
--- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/SymmetricSyncMessage.cs
+++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/SymmetricSyncMessage.cs
@@ -36,6 +36,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//events
UpdateScript,
ScriptReset,
+ ChatFromClient,
}
#endregion
diff --git a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs
index d647e71693..dc7164925a 100644
--- a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs
@@ -125,6 +125,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
m_listenerManager = new ListenerManager(maxlisteners, maxhandles);
m_scene.EventManager.OnChatFromClient += DeliverClientMessage;
m_scene.EventManager.OnChatBroadcast += DeliverClientMessage;
+ //SYMMETRIC SYNC
+ m_scene.EventManager.OnChatFromWorld += DeliverClientMessage;
+ //end SYMMETRIC SYNC
m_pendingQ = new Queue();
m_pending = Queue.Synchronized(m_pendingQ);
}
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index f26db672cc..5fb40cc9e6 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -52,6 +52,7 @@ namespace OpenSim.Region.Framework.Scenes
{
UpdateScript,
ScriptReset,
+ ChatFromClient,
}
public EventManager(Scene scene)
@@ -59,7 +60,7 @@ namespace OpenSim.Region.Framework.Scenes
m_scene = scene;
}
-#region UpdateScript
+ #region UpdateScript
public override void TriggerUpdateScript(UUID clientId, UUID itemId, UUID primId, bool isScriptRunning, UUID newAssetID)
{
//publish the event to other actors who are intersted in it
@@ -84,8 +85,9 @@ namespace OpenSim.Region.Framework.Scenes
#endregion //UpdateScript
#region ScriptReset
- public virtual void TriggerScriptReset(uint localID, UUID itemID)
+ public override void TriggerScriptReset(uint localID, UUID itemID)
{
+ //publish the event to other actors who are intersted in it
if (m_scene.RegionSyncModule != null)
{
Object[] eventArgs = new Object[2];
@@ -93,13 +95,43 @@ namespace OpenSim.Region.Framework.Scenes
eventArgs[1] = (Object)itemID;
m_scene.RegionSyncModule.PublishSceneEvent(EventNames.ScriptReset, eventArgs);
}
+ //trigger event locally, as the legacy code does
+ TriggerScriptResetLocally(localID, itemID);
}
- public virtual void TriggerScriptResetLocally(uint localID, UUID itemID)
+ public void TriggerScriptResetLocally(uint localID, UUID itemID)
{
base.TriggerScriptReset(localID, itemID);
}
#endregion //UpdateScript
+
+ #region ChatFromClient
+ public override void TriggerOnChatFromClient(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.ChatFromClient, eventArgs);
+ }
+ TriggerOnChatFromClientLocally(sender, chat);
+ }
+ public void TriggerOnChatFromClientLocally(Object sender, OSChatMessage chat)
+ {
+ base.TriggerOnChatFromClient(sender, chat);
+ }
+ #endregion //ChatFromClient
+
+ public void TriggerOnChatBroadcastLocally(Object sender, OSChatMessage chat)
+ {
+ base.TriggerOnChatBroadcast(sender, chat);
+ }
+
+ public void TriggerOnChatFromWorldLocally(Object sender, OSChatMessage chat)
+ {
+ base.TriggerOnChatFromWorld(sender, chat);
+ }
}
///
@@ -1659,7 +1691,9 @@ namespace OpenSim.Region.Framework.Scenes
}
}
- public void TriggerOnChatFromClient(Object sender, OSChatMessage chat)
+ //SYMMETRIC SYNC: overiding this in the inherited class
+ //public void TriggerOnChatFromClient(Object sender, OSChatMessage chat)
+ public virtual void TriggerOnChatFromClient(Object sender, OSChatMessage chat)
{
ChatFromClientEvent handlerChatFromClient = OnChatFromClient;
if (handlerChatFromClient != null)