--- trunk/ModularRex/RexParts/ModrexObjects.cs 2009/05/20 07:05:03 156 +++ trunk/ModularRex/RexParts/ModrexObjects.cs 2009/12/03 16:03:57 286 @@ -9,14 +9,13 @@ using OpenMetaverse; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; -using OpenSim.Data.NHibernate; using OpenSim.Framework; using ModularRex.NHibernate; using OpenSim.Framework.Communications.Cache; namespace ModularRex.RexParts { - public class ModrexObjects : IRegionModule, IRexObjectPropertiesEventManager + public class ModrexObjects : IRegionModule, IRexObjectPropertiesEventManager, IModrexObjectsProvider { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -35,6 +34,7 @@ m_scenes.Add(scene); scene.RegisterModuleInterface(this); + scene.RegisterModuleInterface(this); scene.EventManager.OnClientConnect += EventManager_OnClientConnect; scene.SceneContents.OnObjectDuplicate += SceneGraph_OnObjectDuplicate; scene.SceneContents.OnObjectRemove += SceneGraph_OnObjectRemove; @@ -82,13 +82,25 @@ private void rcv_OnPrimFreeData(IClientAPI sender, List parameters) { m_log.Info("[REXOBJS] Received Prim free data"); - if (parameters.Count == 2) + if (parameters.Count >= 2) { UUID primID = new UUID(parameters[0]); - string data = parameters[1]; + string data = String.Empty; + if(parameters.Count == 2) + { + data = parameters[1]; + }else + { + for (int i = 1; i < parameters.Count; i++) + { + data += parameters[i]; + } + } RexObjectProperties props = GetObject(primID); props.RexData = data; + + SendPrimFreeDataToAllUsers(primID, data); } else { @@ -96,6 +108,22 @@ } } + void SendPrimFreeDataToAllUsers(UUID id, string data) + { + foreach (Scene scene in m_scenes) + { + scene.ForEachScenePresence( + delegate(ScenePresence avatar) + { + RexClientViewBase rex; + if (avatar.ClientView.TryGet(out rex)) + { + rex.SendRexPrimFreeData(id, data); + } + }); + } + } + void SceneGraph_OnObjectDuplicate(EntityBase original, EntityBase clone) { RexObjectProperties origprops = GetObject(original.UUID); @@ -177,6 +205,10 @@ foreach (RexObjectProperties p in GetObjects()) { user.SendRexObjectProperties(p.ParentObjectID, p); + if (p.RexData.Length > 0) //send rex data also if exists + { + user.SendRexPrimFreeData(p.ParentObjectID, p.RexData); + } } }