| 9 |
using OpenMetaverse; |
using OpenMetaverse; |
| 10 |
using OpenSim.Region.Framework.Interfaces; |
using OpenSim.Region.Framework.Interfaces; |
| 11 |
using OpenSim.Region.Framework.Scenes; |
using OpenSim.Region.Framework.Scenes; |
|
using OpenSim.Data.NHibernate; |
|
| 12 |
using OpenSim.Framework; |
using OpenSim.Framework; |
| 13 |
using ModularRex.NHibernate; |
using ModularRex.NHibernate; |
| 14 |
using OpenSim.Framework.Communications.Cache; |
using OpenSim.Framework.Communications.Cache; |
| 15 |
|
|
| 16 |
namespace ModularRex.RexParts |
namespace ModularRex.RexParts |
| 17 |
{ |
{ |
| 18 |
public class ModrexObjects : IRegionModule, IRexObjectPropertiesEventManager |
public class ModrexObjects : IRegionModule, IRexObjectPropertiesEventManager, IModrexObjectsProvider |
| 19 |
{ |
{ |
| 20 |
private static readonly ILog m_log = |
private static readonly ILog m_log = |
| 21 |
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
| 34 |
m_scenes.Add(scene); |
m_scenes.Add(scene); |
| 35 |
|
|
| 36 |
scene.RegisterModuleInterface<ModrexObjects>(this); |
scene.RegisterModuleInterface<ModrexObjects>(this); |
| 37 |
|
scene.RegisterModuleInterface<IModrexObjectsProvider>(this); |
| 38 |
scene.EventManager.OnClientConnect += EventManager_OnClientConnect; |
scene.EventManager.OnClientConnect += EventManager_OnClientConnect; |
| 39 |
scene.SceneContents.OnObjectDuplicate += SceneGraph_OnObjectDuplicate; |
scene.SceneContents.OnObjectDuplicate += SceneGraph_OnObjectDuplicate; |
| 40 |
scene.SceneContents.OnObjectRemove += SceneGraph_OnObjectRemove; |
scene.SceneContents.OnObjectRemove += SceneGraph_OnObjectRemove; |
| 82 |
private void rcv_OnPrimFreeData(IClientAPI sender, List<string> parameters) |
private void rcv_OnPrimFreeData(IClientAPI sender, List<string> parameters) |
| 83 |
{ |
{ |
| 84 |
m_log.Info("[REXOBJS] Received Prim free data"); |
m_log.Info("[REXOBJS] Received Prim free data"); |
| 85 |
if (parameters.Count == 2) |
if (parameters.Count >= 2) |
| 86 |
{ |
{ |
| 87 |
UUID primID = new UUID(parameters[0]); |
UUID primID = new UUID(parameters[0]); |
| 88 |
string data = parameters[1]; |
string data = String.Empty; |
| 89 |
|
if(parameters.Count == 2) |
| 90 |
|
{ |
| 91 |
|
data = parameters[1]; |
| 92 |
|
}else |
| 93 |
|
{ |
| 94 |
|
for (int i = 1; i < parameters.Count; i++) |
| 95 |
|
{ |
| 96 |
|
data += parameters[i]; |
| 97 |
|
} |
| 98 |
|
} |
| 99 |
|
|
| 100 |
RexObjectProperties props = GetObject(primID); |
RexObjectProperties props = GetObject(primID); |
| 101 |
props.RexData = data; |
props.RexData = data; |
| 102 |
|
|
| 103 |
|
SendPrimFreeDataToAllUsers(primID, data); |
| 104 |
} |
} |
| 105 |
else |
else |
| 106 |
{ |
{ |
| 108 |
} |
} |
| 109 |
} |
} |
| 110 |
|
|
| 111 |
|
void SendPrimFreeDataToAllUsers(UUID id, string data) |
| 112 |
|
{ |
| 113 |
|
foreach (Scene scene in m_scenes) |
| 114 |
|
{ |
| 115 |
|
scene.ForEachScenePresence( |
| 116 |
|
delegate(ScenePresence avatar) |
| 117 |
|
{ |
| 118 |
|
RexClientViewBase rex; |
| 119 |
|
if (avatar.ClientView.TryGet(out rex)) |
| 120 |
|
{ |
| 121 |
|
rex.SendRexPrimFreeData(id, data); |
| 122 |
|
} |
| 123 |
|
}); |
| 124 |
|
} |
| 125 |
|
} |
| 126 |
|
|
| 127 |
void SceneGraph_OnObjectDuplicate(EntityBase original, EntityBase clone) |
void SceneGraph_OnObjectDuplicate(EntityBase original, EntityBase clone) |
| 128 |
{ |
{ |
| 129 |
RexObjectProperties origprops = GetObject(original.UUID); |
RexObjectProperties origprops = GetObject(original.UUID); |
| 205 |
foreach (RexObjectProperties p in GetObjects()) |
foreach (RexObjectProperties p in GetObjects()) |
| 206 |
{ |
{ |
| 207 |
user.SendRexObjectProperties(p.ParentObjectID, p); |
user.SendRexObjectProperties(p.ParentObjectID, p); |
| 208 |
|
if (p.RexData.Length > 0) //send rex data also if exists |
| 209 |
|
{ |
| 210 |
|
user.SendRexPrimFreeData(p.ParentObjectID, p.RexData); |
| 211 |
|
} |
| 212 |
} |
} |
| 213 |
} |
} |
| 214 |
|
|