Merge branch 'master' into careminster
Conflicts: OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.csavinationmerge
commit
389077345f
|
@ -55,8 +55,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
public OSDMap body;
|
||||
}
|
||||
|
||||
//[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class EventQueueGetModule : IEventQueue, IRegionModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class EventQueueGetModule : IEventQueue, INonSharedRegionModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -66,8 +66,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
public int DebugLevel { get; set; }
|
||||
|
||||
protected Scene m_scene;
|
||||
private IConfigSource m_gConfig;
|
||||
bool enabledYN;
|
||||
|
||||
private Dictionary<UUID, int> m_ids = new Dictionary<UUID, int>();
|
||||
|
||||
|
@ -75,60 +73,46 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
private Dictionary<UUID, UUID> m_QueueUUIDAvatarMapping = new Dictionary<UUID, UUID>();
|
||||
private Dictionary<UUID, UUID> m_AvatarQueueUUIDMapping = new Dictionary<UUID, UUID>();
|
||||
|
||||
#region IRegionModule methods
|
||||
public virtual void Initialise(Scene scene, IConfigSource config)
|
||||
#region INonSharedRegionModule methods
|
||||
public virtual void Initialise(IConfigSource config)
|
||||
{
|
||||
m_gConfig = config;
|
||||
|
||||
IConfig startupConfig = m_gConfig.Configs["Startup"];
|
||||
|
||||
ReadConfigAndPopulate(scene, startupConfig, "Startup");
|
||||
|
||||
if (enabledYN)
|
||||
{
|
||||
m_scene = scene;
|
||||
scene.RegisterModuleInterface<IEventQueue>(this);
|
||||
|
||||
// Register fallback handler
|
||||
// Why does EQG Fail on region crossings!
|
||||
|
||||
//scene.CommsManager.HttpServer.AddLLSDHandler("/CAPS/EQG/", EventQueueFallBack);
|
||||
|
||||
// scene.EventManager.OnNewClient += OnNewClient;
|
||||
|
||||
// TODO: Leaving these open, or closing them when we
|
||||
// become a child is incorrect. It messes up TP in a big
|
||||
// way. CAPS/EQ need to be active as long as the UDP
|
||||
// circuit is there.
|
||||
|
||||
scene.EventManager.OnClientClosed += ClientClosed;
|
||||
|
||||
scene.EventManager.OnMakeChildAgent += MakeChildAgent;
|
||||
scene.EventManager.OnRegisterCaps += OnRegisterCaps;
|
||||
|
||||
MainConsole.Instance.Commands.AddCommand(
|
||||
"Debug",
|
||||
false,
|
||||
"debug eq",
|
||||
"debug eq [0|1|2]",
|
||||
"Turn on event queue debugging\n"
|
||||
+ " <= 0 - turns off all event queue logging\n"
|
||||
+ " >= 1 - turns on outgoing event logging\n"
|
||||
+ " >= 2 - turns on poll notification",
|
||||
HandleDebugEq);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_gConfig = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void ReadConfigAndPopulate(Scene scene, IConfig startupConfig, string p)
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
enabledYN = startupConfig.GetBoolean("EventQueue", true);
|
||||
m_scene = scene;
|
||||
scene.RegisterModuleInterface<IEventQueue>(this);
|
||||
|
||||
scene.EventManager.OnClientClosed += ClientClosed;
|
||||
scene.EventManager.OnMakeChildAgent += MakeChildAgent;
|
||||
scene.EventManager.OnRegisterCaps += OnRegisterCaps;
|
||||
|
||||
MainConsole.Instance.Commands.AddCommand(
|
||||
"Debug",
|
||||
false,
|
||||
"debug eq",
|
||||
"debug eq [0|1|2]",
|
||||
"Turn on event queue debugging\n"
|
||||
+ " <= 0 - turns off all event queue logging\n"
|
||||
+ " >= 1 - turns on outgoing event logging\n"
|
||||
+ " >= 2 - turns on poll notification",
|
||||
HandleDebugEq);
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (m_scene != scene)
|
||||
return;
|
||||
|
||||
scene.EventManager.OnClientClosed -= ClientClosed;
|
||||
scene.EventManager.OnMakeChildAgent -= MakeChildAgent;
|
||||
scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
|
||||
|
||||
scene.UnregisterModuleInterface<IEventQueue>(this);
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -141,10 +125,11 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
get { return "EventQueueGetModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return false; }
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected void HandleDebugEq(string module, string[] args)
|
||||
|
|
|
@ -32,6 +32,7 @@ using log4net;
|
|||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using OpenMetaverse.StructuredData;
|
||||
using Mono.Addins;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Servers;
|
||||
using OpenSim.Framework.Servers.HttpServer;
|
||||
|
@ -41,30 +42,60 @@ using Caps=OpenSim.Framework.Capabilities.Caps;
|
|||
|
||||
namespace OpenSim.Region.ClientStack.Linden
|
||||
{
|
||||
public class ObjectAdd : IRegionModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class ObjectAdd : INonSharedRegionModule
|
||||
{
|
||||
// private static readonly ILog m_log =
|
||||
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private Scene m_scene;
|
||||
#region IRegionModule Members
|
||||
|
||||
public void Initialise(Scene pScene, IConfigSource pSource)
|
||||
#region INonSharedRegionModule Members
|
||||
|
||||
public void Initialise(IConfigSource pSource)
|
||||
{
|
||||
m_scene = pScene;
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
m_scene.EventManager.OnRegisterCaps += RegisterCaps;
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
|
||||
if (m_scene == scene)
|
||||
{
|
||||
m_scene.EventManager.OnRegisterCaps -= RegisterCaps;
|
||||
m_scene = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "ObjectAddModule"; }
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public void RegisterCaps(UUID agentID, Caps caps)
|
||||
{
|
||||
UUID capuuid = UUID.Random();
|
||||
|
||||
// m_log.InfoFormat("[OBJECTADD]: {0}", "/CAPS/OA/" + capuuid + "/");
|
||||
|
||||
// m_log.InfoFormat("[OBJECTADD]: {0}", "/CAPS/OA/" + capuuid + "/");
|
||||
|
||||
caps.RegisterHandler(
|
||||
"ObjectAdd",
|
||||
|
@ -73,7 +104,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
"/CAPS/OA/" + capuuid + "/",
|
||||
httpMethod => ProcessAdd(httpMethod, agentID, caps),
|
||||
"ObjectAdd",
|
||||
agentID.ToString()));;
|
||||
agentID.ToString())); ;
|
||||
}
|
||||
|
||||
public Hashtable ProcessAdd(Hashtable request, UUID AgentId, Caps cap)
|
||||
|
@ -84,7 +115,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
responsedata["keepalive"] = false;
|
||||
responsedata["str_response_string"] = "Request wasn't what was expected";
|
||||
ScenePresence avatar;
|
||||
|
||||
|
||||
if (!m_scene.TryGetScenePresence(AgentId, out avatar))
|
||||
return responsedata;
|
||||
|
||||
|
@ -127,7 +158,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
|
||||
if (r.Type != OSDType.Map) // not a proper req
|
||||
return responsedata;
|
||||
|
||||
|
||||
OSDMap rm = (OSDMap)r;
|
||||
|
||||
if (rm.ContainsKey("ObjectData")) //v2
|
||||
|
@ -138,7 +169,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
return responsedata;
|
||||
}
|
||||
|
||||
OSDMap ObjMap = (OSDMap) rm["ObjectData"];
|
||||
OSDMap ObjMap = (OSDMap)rm["ObjectData"];
|
||||
|
||||
bypass_raycast = ObjMap["BypassRaycast"].AsBoolean();
|
||||
everyone_mask = readuintval(ObjMap["EveryoneMask"]);
|
||||
|
@ -181,7 +212,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
responsedata["str_response_string"] = "Has Profile key, but data not in expected format";
|
||||
return responsedata;
|
||||
}
|
||||
|
||||
|
||||
OSDMap ProfileMap = (OSDMap)ObjMap["Profile"];
|
||||
|
||||
profile_begin = ProfileMap["Begin"].AsInteger();
|
||||
|
@ -190,14 +221,14 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
hollow = ProfileMap["Hollow"].AsInteger();
|
||||
}
|
||||
ray_end_is_intersection = ObjMap["RayEndIsIntersection"].AsBoolean();
|
||||
|
||||
|
||||
ray_target_id = ObjMap["RayTargetId"].AsUUID();
|
||||
state = ObjMap["State"].AsInteger();
|
||||
try
|
||||
{
|
||||
ray_end = ((OSDArray) ObjMap["RayEnd"]).AsVector3();
|
||||
ray_start = ((OSDArray) ObjMap["RayStart"]).AsVector3();
|
||||
scale = ((OSDArray) ObjMap["Scale"]).AsVector3();
|
||||
ray_end = ((OSDArray)ObjMap["RayEnd"]).AsVector3();
|
||||
ray_start = ((OSDArray)ObjMap["RayStart"]).AsVector3();
|
||||
scale = ((OSDArray)ObjMap["Scale"]).AsVector3();
|
||||
rotation = ((OSDArray)ObjMap["Rotation"]).AsQuaternion();
|
||||
}
|
||||
catch (Exception)
|
||||
|
@ -214,7 +245,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
return responsedata;
|
||||
}
|
||||
|
||||
OSDMap AgentDataMap = (OSDMap) rm["AgentData"];
|
||||
OSDMap AgentDataMap = (OSDMap)rm["AgentData"];
|
||||
|
||||
//session_id = AgentDataMap["SessionId"].AsUUID();
|
||||
group_id = AgentDataMap["GroupId"].AsUUID();
|
||||
|
@ -251,21 +282,21 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
profile_begin = rm["profile_begin"].AsInteger();
|
||||
profile_curve = rm["profile_curve"].AsInteger();
|
||||
profile_end = rm["profile_end"].AsInteger();
|
||||
|
||||
|
||||
ray_end_is_intersection = rm["ray_end_is_intersection"].AsBoolean();
|
||||
|
||||
|
||||
ray_target_id = rm["ray_target_id"].AsUUID();
|
||||
|
||||
|
||||
|
||||
|
||||
//session_id = rm["session_id"].AsUUID();
|
||||
state = rm["state"].AsInteger();
|
||||
try
|
||||
try
|
||||
{
|
||||
ray_end = ((OSDArray)rm["ray_end"]).AsVector3();
|
||||
ray_start = ((OSDArray)rm["ray_start"]).AsVector3();
|
||||
rotation = ((OSDArray)rm["rotation"]).AsQuaternion();
|
||||
scale = ((OSDArray)rm["scale"]).AsVector3();
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
responsedata["str_response_string"] = "RayEnd, RayStart, Scale or Rotation wasn't in the expected format";
|
||||
|
@ -273,9 +304,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Vector3 pos = m_scene.GetNewRezLocation(ray_start, ray_end, ray_target_id, rotation, (bypass_raycast) ? (byte)1 : (byte)0, (ray_end_is_intersection) ? (byte)1 : (byte)0, true, scale, false);
|
||||
|
||||
Vector3 pos = m_scene.GetNewRezLocation(ray_start, ray_end, ray_target_id, rotation, (bypass_raycast) ? (byte)1 : (byte)0, (ray_end_is_intersection) ? (byte)1 : (byte)0, true, scale, false);
|
||||
|
||||
PrimitiveBaseShape pbs = PrimitiveBaseShape.CreateBox();
|
||||
|
||||
|
@ -286,17 +317,17 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
pbs.PathRevolutions = (byte)path_revolutions;
|
||||
pbs.PathScaleX = (byte)path_scale_x;
|
||||
pbs.PathScaleY = (byte)path_scale_y;
|
||||
pbs.PathShearX = (byte) path_shear_x;
|
||||
pbs.PathShearX = (byte)path_shear_x;
|
||||
pbs.PathShearY = (byte)path_shear_y;
|
||||
pbs.PathSkew = (sbyte)path_skew;
|
||||
pbs.PathTaperX = (sbyte)path_taper_x;
|
||||
pbs.PathTaperY = (sbyte)path_taper_y;
|
||||
pbs.PathTwist = (sbyte)path_twist;
|
||||
pbs.PathTwistBegin = (sbyte)path_twist_begin;
|
||||
pbs.HollowShape = (HollowShape) hollow;
|
||||
pbs.HollowShape = (HollowShape)hollow;
|
||||
pbs.PCode = (byte)p_code;
|
||||
pbs.ProfileBegin = (ushort) profile_begin;
|
||||
pbs.ProfileCurve = (byte) profile_curve;
|
||||
pbs.ProfileBegin = (ushort)profile_begin;
|
||||
pbs.ProfileCurve = (byte)profile_curve;
|
||||
pbs.ProfileEnd = (ushort)profile_end;
|
||||
pbs.Scale = scale;
|
||||
pbs.State = (byte)state;
|
||||
|
@ -306,7 +337,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
if (m_scene.Permissions.CanRezObject(1, avatar.UUID, pos))
|
||||
{
|
||||
// rez ON the ground, not IN the ground
|
||||
// pos.Z += 0.25F;
|
||||
// pos.Z += 0.25F;
|
||||
|
||||
obj = m_scene.AddNewPrim(avatar.UUID, group_id, pos, rotation, pbs);
|
||||
}
|
||||
|
@ -323,13 +354,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
rootpart.GroupMask = group_mask;
|
||||
rootpart.NextOwnerMask = next_owner_mask;
|
||||
rootpart.Material = (byte)material;
|
||||
|
||||
|
||||
m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
|
||||
|
||||
|
||||
responsedata["int_response_code"] = 200; //501; //410; //404;
|
||||
responsedata["content_type"] = "text/plain";
|
||||
responsedata["keepalive"] = false;
|
||||
responsedata["str_response_string"] = String.Format("<llsd><map><key>local_id</key>{0}</map></llsd>",ConvertUintToBytes(obj.LocalId));
|
||||
responsedata["str_response_string"] = String.Format("<llsd><map><key>local_id</key>{0}</map></llsd>", ConvertUintToBytes(obj.LocalId));
|
||||
|
||||
return responsedata;
|
||||
}
|
||||
|
@ -347,24 +378,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
|||
byte[] resultbytes = Utils.UIntToBytes(val);
|
||||
if (BitConverter.IsLittleEndian)
|
||||
Array.Reverse(resultbytes);
|
||||
return String.Format("<binary encoding=\"base64\">{0}</binary>",Convert.ToBase64String(resultbytes));
|
||||
return String.Format("<binary encoding=\"base64\">{0}</binary>", Convert.ToBase64String(resultbytes));
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "ObjectAddModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,13 +36,17 @@ using OpenSim.Region.Framework.Scenes;
|
|||
|
||||
namespace OpenSim.Region.CoreModules.Agent.IPBan
|
||||
{
|
||||
public class IPBanModule : IRegionModule
|
||||
public class IPBanModule : ISharedRegionModule
|
||||
{
|
||||
#region Implementation of IRegionModule
|
||||
#region Implementation of ISharedRegionModule
|
||||
|
||||
private List<string> m_bans = new List<string>();
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
new SceneBanner(scene, m_bans);
|
||||
|
||||
|
@ -50,7 +54,7 @@ namespace OpenSim.Region.CoreModules.Agent.IPBan
|
|||
{
|
||||
foreach (EstateBan ban in scene.RegionInfo.EstateSettings.EstateBans)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(ban.BannedHostIPMask))
|
||||
if (!String.IsNullOrEmpty(ban.BannedHostIPMask))
|
||||
m_bans.Add(ban.BannedHostIPMask);
|
||||
if (!String.IsNullOrEmpty(ban.BannedHostNameMask))
|
||||
m_bans.Add(ban.BannedHostNameMask);
|
||||
|
@ -58,6 +62,14 @@ namespace OpenSim.Region.CoreModules.Agent.IPBan
|
|||
}
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
if (File.Exists("bans.txt"))
|
||||
|
@ -80,9 +92,9 @@ namespace OpenSim.Region.CoreModules.Agent.IPBan
|
|||
get { return "IPBanModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return true; }
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
|
|||
{
|
||||
public delegate void J2KDecodeDelegate(UUID assetID);
|
||||
|
||||
public class J2KDecoderModule : IRegionModule, IJ2KDecoder
|
||||
public class J2KDecoderModule : ISharedRegionModule, IJ2KDecoder
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -56,26 +56,21 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
|
|||
/// <summary>Cache that will store decoded JPEG2000 layer boundary data</summary>
|
||||
private IImprovedAssetCache m_cache;
|
||||
/// <summary>Reference to a scene (doesn't matter which one as long as it can load the cache module)</summary>
|
||||
private UUID m_CreatorID = UUID.Zero;
|
||||
private Scene m_scene;
|
||||
|
||||
#region IRegionModule
|
||||
#region ISharedRegionModule
|
||||
|
||||
private bool m_useCSJ2K = true;
|
||||
|
||||
public string Name { get { return "J2KDecoderModule"; } }
|
||||
public bool IsSharedModule { get { return true; } }
|
||||
|
||||
public J2KDecoderModule()
|
||||
{
|
||||
}
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
if (m_scene == null)
|
||||
m_scene = scene;
|
||||
|
||||
scene.RegisterModuleInterface<IJ2KDecoder>(this);
|
||||
|
||||
IConfig startupConfig = source.Configs["Startup"];
|
||||
if (startupConfig != null)
|
||||
{
|
||||
|
@ -83,6 +78,24 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
|
|||
}
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (m_scene == null)
|
||||
{
|
||||
m_scene = scene;
|
||||
m_CreatorID = scene.RegionInfo.RegionID;
|
||||
}
|
||||
|
||||
scene.RegisterModuleInterface<IJ2KDecoder>(this);
|
||||
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (m_scene == scene)
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
m_cache = m_scene.RequestModuleInterface<IImprovedAssetCache>();
|
||||
|
@ -92,6 +105,15 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
|
|||
{
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
#endregion IRegionModule
|
||||
|
||||
#region IJ2KDecoder
|
||||
|
@ -279,7 +301,7 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
|
|||
{
|
||||
string assetID = "j2kCache_" + AssetId.ToString();
|
||||
|
||||
AssetBase layerDecodeAsset = new AssetBase(assetID, assetID, (sbyte)AssetType.Notecard, m_scene.RegionInfo.RegionID.ToString());
|
||||
AssetBase layerDecodeAsset = new AssetBase(assetID, assetID, (sbyte)AssetType.Notecard, m_CreatorID.ToString());
|
||||
layerDecodeAsset.Local = true;
|
||||
layerDecodeAsset.Temporary = true;
|
||||
|
||||
|
|
|
@ -35,9 +35,12 @@ using OpenSim.Framework;
|
|||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Agent.Xfer
|
||||
{
|
||||
public class XferModule : IRegionModule, IXfer
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class XferModule : INonSharedRegionModule, IXfer
|
||||
{
|
||||
private Scene m_scene;
|
||||
private Dictionary<string, FileData> NewFiles = new Dictionary<string, FileData>();
|
||||
|
@ -59,9 +62,13 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
|
|||
public int Count;
|
||||
}
|
||||
|
||||
#region IRegionModule Members
|
||||
#region INonSharedRegionModule Members
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
m_scene.EventManager.OnNewClient += NewClient;
|
||||
|
@ -69,8 +76,21 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
|
|||
m_scene.RegisterModuleInterface<IXfer>(this);
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
m_scene.EventManager.OnNewClient -= NewClient;
|
||||
|
||||
m_scene.UnregisterModuleInterface<IXfer>(this);
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public void Close()
|
||||
|
@ -82,11 +102,6 @@ namespace OpenSim.Region.CoreModules.Agent.Xfer
|
|||
get { return "XferModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IXfer Members
|
||||
|
|
|
@ -49,8 +49,8 @@ using OpenSim.Region.Framework.Scenes;
|
|||
using OpenSim.Services.Interfaces;
|
||||
|
||||
|
||||
[assembly: Addin("FlotsamAssetCache", "1.1")]
|
||||
[assembly: AddinDependency("OpenSim", "0.5")]
|
||||
//[assembly: Addin("FlotsamAssetCache", "1.1")]
|
||||
//[assembly: AddinDependency("OpenSim", "0.5")]
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Asset
|
||||
{
|
||||
|
|
|
@ -39,9 +39,12 @@ using OpenSim.Region.Framework.Interfaces;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Services.Interfaces;
|
||||
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||
{
|
||||
public class AvatarFactoryModule : IAvatarFactoryModule, IRegionModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class AvatarFactoryModule : IAvatarFactoryModule, INonSharedRegionModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -61,10 +64,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
|
||||
#region IRegionModule
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
scene.RegisterModuleInterface<IAvatarFactoryModule>(this);
|
||||
scene.EventManager.OnNewClient += SubscribeToClientEvents;
|
||||
|
||||
IConfig appearanceConfig = config.Configs["Appearance"];
|
||||
if (appearanceConfig != null)
|
||||
|
@ -74,11 +75,29 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
// m_log.InfoFormat("[AVFACTORY] configured for {0} save and {1} send",m_savetime,m_sendtime);
|
||||
}
|
||||
|
||||
if (m_scene == null)
|
||||
m_scene = scene;
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (m_scene == null)
|
||||
m_scene = scene;
|
||||
|
||||
scene.RegisterModuleInterface<IAvatarFactoryModule>(this);
|
||||
scene.EventManager.OnNewClient += SubscribeToClientEvents;
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (scene == m_scene)
|
||||
{
|
||||
scene.UnregisterModuleInterface<IAvatarFactoryModule>(this);
|
||||
scene.EventManager.OnNewClient -= SubscribeToClientEvents;
|
||||
}
|
||||
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
m_updateTimer.Enabled = false;
|
||||
m_updateTimer.AutoReset = true;
|
||||
|
@ -100,6 +119,12 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
|||
get { return false; }
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
|
||||
private void SubscribeToClientEvents(IClientAPI client)
|
||||
{
|
||||
client.OnRequestWearables += Client_OnRequestWearables;
|
||||
|
|
|
@ -33,9 +33,12 @@ using OpenSim.Region.Framework.Interfaces;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenMetaverse;
|
||||
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
|
||||
{
|
||||
public class CombatModule : IRegionModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class CombatModule : ISharedRegionModule
|
||||
{
|
||||
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -54,7 +57,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
|
|||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="config"></param>
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
lock (m_scenel)
|
||||
{
|
||||
|
@ -72,6 +79,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
|
|||
scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (m_scenel.ContainsKey(scene.RegionInfo.RegionHandle))
|
||||
m_scenel.Remove(scene.RegionInfo.RegionHandle);
|
||||
|
||||
scene.EventManager.OnAvatarKilled -= KillAvatar;
|
||||
scene.EventManager.OnAvatarEnteringNewParcel -= AvatarEnteringParcel;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
}
|
||||
|
@ -85,11 +105,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
|
|||
get { return "CombatModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return true; }
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
|
||||
private void KillAvatar(uint killerObjectLocalID, ScenePresence deadAvatar)
|
||||
{
|
||||
string deadAvatarMessage;
|
||||
|
|
|
@ -32,6 +32,7 @@ using log4net;
|
|||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using Mono.Addins;
|
||||
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
@ -39,16 +40,27 @@ using OpenSim.Services.Interfaces;
|
|||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
||||
{
|
||||
public class DialogModule : IRegionModule, IDialogModule
|
||||
{
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class DialogModule : IDialogModule, INonSharedRegionModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
||||
protected Scene m_scene;
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
|
||||
public void Initialise(IConfigSource source) { }
|
||||
|
||||
public Type ReplaceableInterface { get { return null; } }
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
m_scene.RegisterModuleInterface<IDialogModule>(this);
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
if (scene != m_scene)
|
||||
return;
|
||||
|
||||
m_scene.AddCommand(
|
||||
"Users", this, "alert", "alert <message>",
|
||||
|
@ -56,46 +68,59 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
|||
HandleAlertConsoleCommand);
|
||||
|
||||
m_scene.AddCommand(
|
||||
"Users", this, "alert-user", "alert-user <first> <last> <message>",
|
||||
"Users", this, "alert-user",
|
||||
"alert-user <first> <last> <message>",
|
||||
"Send an alert to a user",
|
||||
HandleAlertConsoleCommand);
|
||||
}
|
||||
|
||||
public void PostInitialise() {}
|
||||
public void Close() {}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (scene != m_scene)
|
||||
return;
|
||||
|
||||
m_scene.UnregisterModuleInterface<IDialogModule>(this);
|
||||
}
|
||||
|
||||
public void Close() { }
|
||||
public string Name { get { return "Dialog Module"; } }
|
||||
public bool IsSharedModule { get { return false; } }
|
||||
|
||||
|
||||
public void SendAlertToUser(IClientAPI client, string message)
|
||||
{
|
||||
SendAlertToUser(client, message, false);
|
||||
}
|
||||
|
||||
public void SendAlertToUser(IClientAPI client, string message, bool modal)
|
||||
|
||||
public void SendAlertToUser(IClientAPI client, string message,
|
||||
bool modal)
|
||||
{
|
||||
client.SendAgentAlertMessage(message, modal);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void SendAlertToUser(UUID agentID, string message)
|
||||
{
|
||||
SendAlertToUser(agentID, message, false);
|
||||
}
|
||||
|
||||
|
||||
public void SendAlertToUser(UUID agentID, string message, bool modal)
|
||||
{
|
||||
ScenePresence sp = m_scene.GetScenePresence(agentID);
|
||||
|
||||
|
||||
if (sp != null)
|
||||
sp.ControllingClient.SendAgentAlertMessage(message, modal);
|
||||
}
|
||||
|
||||
public void SendAlertToUser(string firstName, string lastName, string message, bool modal)
|
||||
|
||||
public void SendAlertToUser(string firstName, string lastName,
|
||||
string message, bool modal)
|
||||
{
|
||||
ScenePresence presence = m_scene.GetScenePresence(firstName, lastName);
|
||||
ScenePresence presence = m_scene.GetScenePresence(firstName,
|
||||
lastName);
|
||||
if (presence != null)
|
||||
presence.ControllingClient.SendAgentAlertMessage(message, modal);
|
||||
{
|
||||
presence.ControllingClient.SendAgentAlertMessage(message,
|
||||
modal);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void SendGeneralAlert(string message)
|
||||
{
|
||||
m_scene.ForEachRootClient(delegate(IClientAPI client)
|
||||
|
@ -104,11 +129,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
|||
});
|
||||
}
|
||||
|
||||
public void SendDialogToUser(
|
||||
UUID avatarID, string objectName, UUID objectID, UUID ownerID,
|
||||
string message, UUID textureID, int ch, string[] buttonlabels)
|
||||
public void SendDialogToUser(UUID avatarID, string objectName,
|
||||
UUID objectID, UUID ownerID, string message, UUID textureID,
|
||||
int ch, string[] buttonlabels)
|
||||
{
|
||||
UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, ownerID);
|
||||
UserAccount account = m_scene.UserAccountService.GetUserAccount(
|
||||
m_scene.RegionInfo.ScopeID, ownerID);
|
||||
string ownerFirstName, ownerLastName;
|
||||
if (account != null)
|
||||
{
|
||||
|
@ -123,29 +149,38 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
|||
|
||||
ScenePresence sp = m_scene.GetScenePresence(avatarID);
|
||||
if (sp != null)
|
||||
sp.ControllingClient.SendDialog(
|
||||
objectName, objectID, ownerID, ownerFirstName, ownerLastName, message, textureID, ch, buttonlabels);
|
||||
{
|
||||
sp.ControllingClient.SendDialog(objectName, objectID, ownerID,
|
||||
ownerFirstName, ownerLastName, message, textureID, ch,
|
||||
buttonlabels);
|
||||
}
|
||||
}
|
||||
|
||||
public void SendUrlToUser(
|
||||
UUID avatarID, string objectName, UUID objectID, UUID ownerID, bool groupOwned, string message, string url)
|
||||
public void SendUrlToUser(UUID avatarID, string objectName,
|
||||
UUID objectID, UUID ownerID, bool groupOwned, string message,
|
||||
string url)
|
||||
{
|
||||
ScenePresence sp = m_scene.GetScenePresence(avatarID);
|
||||
|
||||
|
||||
if (sp != null)
|
||||
sp.ControllingClient.SendLoadURL(objectName, objectID, ownerID, groupOwned, message, url);
|
||||
{
|
||||
sp.ControllingClient.SendLoadURL(objectName, objectID,
|
||||
ownerID, groupOwned, message, url);
|
||||
}
|
||||
}
|
||||
|
||||
public void SendTextBoxToUser(UUID avatarid, string message, int chatChannel, string name, UUID objectid, UUID ownerid)
|
||||
|
||||
public void SendTextBoxToUser(UUID avatarid, string message,
|
||||
int chatChannel, string name, UUID objectid, UUID ownerid)
|
||||
{
|
||||
UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, ownerid);
|
||||
UserAccount account = m_scene.UserAccountService.GetUserAccount(
|
||||
m_scene.RegionInfo.ScopeID, ownerid);
|
||||
string ownerFirstName, ownerLastName;
|
||||
UUID ownerID = UUID.Zero;
|
||||
UUID ownerID = UUID.Zero;
|
||||
if (account != null)
|
||||
{
|
||||
ownerFirstName = account.FirstName;
|
||||
ownerLastName = account.LastName;
|
||||
ownerID = account.PrincipalID;
|
||||
ownerID = account.PrincipalID;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -154,29 +189,38 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
|||
}
|
||||
|
||||
ScenePresence sp = m_scene.GetScenePresence(avatarid);
|
||||
|
||||
|
||||
if (sp != null)
|
||||
sp.ControllingClient.SendTextBoxRequest(message, chatChannel, name, ownerID, ownerFirstName, ownerLastName, objectid);
|
||||
{
|
||||
sp.ControllingClient.SendTextBoxRequest(message, chatChannel,
|
||||
name, ownerID, ownerFirstName, ownerLastName,
|
||||
objectid);
|
||||
}
|
||||
}
|
||||
|
||||
public void SendNotificationToUsersInRegion(
|
||||
UUID fromAvatarID, string fromAvatarName, string message)
|
||||
public void SendNotificationToUsersInRegion(UUID fromAvatarID,
|
||||
string fromAvatarName, string message)
|
||||
{
|
||||
m_scene.ForEachRootClient(delegate(IClientAPI client)
|
||||
{
|
||||
client.SendBlueBoxMessage(fromAvatarID, fromAvatarName, message);
|
||||
client.SendBlueBoxMessage(fromAvatarID, fromAvatarName,
|
||||
message);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Handle an alert command from the console.
|
||||
/// </summary>
|
||||
/// <param name="module"></param>
|
||||
/// <param name="cmdparams"></param>
|
||||
public void HandleAlertConsoleCommand(string module, string[] cmdparams)
|
||||
public void HandleAlertConsoleCommand(string module,
|
||||
string[] cmdparams)
|
||||
{
|
||||
if (m_scene.ConsoleScene() != null && m_scene.ConsoleScene() != m_scene)
|
||||
if (m_scene.ConsoleScene() != null &&
|
||||
m_scene.ConsoleScene() != m_scene)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string message = string.Empty;
|
||||
|
||||
|
@ -184,7 +228,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
|||
{
|
||||
message = CombineParams(cmdparams, 1);
|
||||
m_log.InfoFormat("[DIALOG]: Sending general alert in region {0} with message {1}",
|
||||
m_scene.RegionInfo.RegionName, message);
|
||||
m_scene.RegionInfo.RegionName, message);
|
||||
SendGeneralAlert(message);
|
||||
}
|
||||
else if (cmdparams.Length > 3)
|
||||
|
@ -192,9 +236,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
|||
string firstName = cmdparams[1];
|
||||
string lastName = cmdparams[2];
|
||||
message = CombineParams(cmdparams, 3);
|
||||
m_log.InfoFormat(
|
||||
"[DIALOG]: Sending alert in region {0} to {1} {2} with message {3}",
|
||||
m_scene.RegionInfo.RegionName, firstName, lastName, message);
|
||||
m_log.InfoFormat("[DIALOG]: Sending alert in region {0} to {1} {2} with message {3}",
|
||||
m_scene.RegionInfo.RegionName, firstName, lastName,
|
||||
message);
|
||||
SendAlertToUser(firstName, lastName, message, false);
|
||||
}
|
||||
else
|
||||
|
@ -212,7 +256,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
|
|||
{
|
||||
result += commandParams[i] + " ";
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
|
@ -35,26 +36,46 @@ using OpenSim.Region.Framework.Interfaces;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Services.Interfaces;
|
||||
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.Gestures
|
||||
{
|
||||
public class GesturesModule : IRegionModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class GesturesModule : INonSharedRegionModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
protected Scene m_scene;
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
|
||||
|
||||
m_scene.EventManager.OnNewClient += OnNewClient;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
m_scene.EventManager.OnNewClient -= OnNewClient;
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
public void PostInitialise() {}
|
||||
public void Close() {}
|
||||
public string Name { get { return "Gestures Module"; } }
|
||||
public bool IsSharedModule { get { return false; } }
|
||||
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
private void OnNewClient(IClientAPI client)
|
||||
{
|
||||
client.OnActivateGesture += ActivateGesture;
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
|
@ -50,9 +51,12 @@ using Caps = OpenSim.Framework.Capabilities.Caps;
|
|||
using OSDArray = OpenMetaverse.StructuredData.OSDArray;
|
||||
using OSDMap = OpenMetaverse.StructuredData.OSDMap;
|
||||
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.Gods
|
||||
{
|
||||
public class GodsModule : IRegionModule, IGodsModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class GodsModule : INonSharedRegionModule, IGodsModule
|
||||
{
|
||||
private static readonly ILog m_log =
|
||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
@ -66,10 +70,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
|||
protected Dictionary<UUID, string> m_capsDict =
|
||||
new Dictionary<UUID, string>();
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
protected IDialogModule DialogModule
|
||||
{
|
||||
get
|
||||
{
|
||||
if (m_dialogModule == null)
|
||||
m_dialogModule = m_scene.RequestModuleInterface<IDialogModule>();
|
||||
|
||||
return m_dialogModule;
|
||||
}
|
||||
}
|
||||
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
m_dialogModule = m_scene.RequestModuleInterface<IDialogModule>();
|
||||
m_scene.RegisterModuleInterface<IGodsModule>(this);
|
||||
m_scene.EventManager.OnNewClient += SubscribeToClientEvents;
|
||||
m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
|
||||
|
@ -77,12 +95,26 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
|||
scene.EventManager.OnIncomingInstantMessage +=
|
||||
OnIncomingInstantMessage;
|
||||
}
|
||||
|
||||
public void PostInitialise() {}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
m_scene.UnregisterModuleInterface<IGodsModule>(this);
|
||||
m_scene.EventManager.OnNewClient -= SubscribeToClientEvents;
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close() {}
|
||||
public string Name { get { return "Gods Module"; } }
|
||||
public bool IsSharedModule { get { return false; } }
|
||||
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public void SubscribeToClientEvents(IClientAPI client)
|
||||
{
|
||||
client.OnGodKickUser += KickUser;
|
||||
|
@ -172,8 +204,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
|||
}
|
||||
else
|
||||
{
|
||||
if (m_dialogModule != null)
|
||||
m_dialogModule.SendAlertToUser(agentID, "Request for god powers denied");
|
||||
if (DialogModule != null)
|
||||
DialogModule.SendAlertToUser(agentID, "Request for god powers denied");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using log4net;
|
||||
|
@ -34,9 +35,12 @@ using OpenSim.Framework;
|
|||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.Groups
|
||||
{
|
||||
public class GroupsModule : IRegionModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class GroupsModule : ISharedRegionModule
|
||||
{
|
||||
private static readonly ILog m_log =
|
||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
@ -55,9 +59,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups
|
|||
private static GroupMembershipData osGroup =
|
||||
new GroupMembershipData();
|
||||
|
||||
#region IRegionModule Members
|
||||
private bool m_Enabled = false;
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
#region ISharedRegionModule Members
|
||||
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
IConfig groupsConfig = config.Configs["Groups"];
|
||||
|
||||
|
@ -67,7 +73,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!groupsConfig.GetBoolean("Enabled", false))
|
||||
m_Enabled = groupsConfig.GetBoolean("Enabled", false);
|
||||
if (!m_Enabled)
|
||||
{
|
||||
m_log.Info("[GROUPS]: Groups disabled in configuration");
|
||||
return;
|
||||
|
@ -77,6 +84,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups
|
|||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (!m_Enabled)
|
||||
return;
|
||||
|
||||
lock (m_SceneList)
|
||||
{
|
||||
if (!m_SceneList.Contains(scene))
|
||||
|
@ -96,7 +110,26 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups
|
|||
|
||||
scene.EventManager.OnNewClient += OnNewClient;
|
||||
scene.EventManager.OnClientClosed += OnClientClosed;
|
||||
// scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
|
||||
// scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (!m_Enabled)
|
||||
return;
|
||||
|
||||
lock (m_SceneList)
|
||||
{
|
||||
if (m_SceneList.Contains(scene))
|
||||
m_SceneList.Remove(scene);
|
||||
}
|
||||
|
||||
scene.EventManager.OnNewClient -= OnNewClient;
|
||||
scene.EventManager.OnClientClosed -= OnClientClosed;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
|
@ -105,6 +138,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups
|
|||
|
||||
public void Close()
|
||||
{
|
||||
if (!m_Enabled)
|
||||
return;
|
||||
|
||||
// m_log.Debug("[GROUPS]: Shutting down group module.");
|
||||
|
||||
lock (m_ClientMap)
|
||||
|
@ -123,9 +159,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Groups
|
|||
get { return "GroupsModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return true; }
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -39,20 +39,18 @@ using OpenSim.Framework.Console;
|
|||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||
{
|
||||
/// <summary>
|
||||
/// This module loads and saves OpenSimulator inventory archives
|
||||
/// </summary>
|
||||
public class InventoryArchiverModule : IRegionModule, IInventoryArchiverModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class InventoryArchiverModule : ISharedRegionModule, IInventoryArchiverModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
public string Name { get { return "Inventory Archiver Module"; } }
|
||||
|
||||
public bool IsSharedModule { get { return true; } }
|
||||
|
||||
/// <value>
|
||||
/// Enable or disable checking whether the iar user is actually logged in
|
||||
/// </value>
|
||||
|
@ -99,9 +97,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
// public InventoryArchiverModule(bool disablePresenceChecks)
|
||||
// {
|
||||
// DisablePresenceChecks = disablePresenceChecks;
|
||||
// }
|
||||
// }
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
#region ISharedRegionModule
|
||||
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (m_scenes.Count == 0)
|
||||
{
|
||||
|
@ -144,10 +148,29 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
m_scenes[scene.RegionInfo.RegionID] = scene;
|
||||
}
|
||||
|
||||
public void PostInitialise() {}
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close() {}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public string Name { get { return "Inventory Archiver Module"; } }
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Trigger the inventory archive saved event.
|
||||
/// </summary>
|
||||
|
|
|
@ -38,10 +38,12 @@ using OpenSim.Region.CoreModules.Framework.Monitoring.Alerts;
|
|||
using OpenSim.Region.CoreModules.Framework.Monitoring.Monitors;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using Mono.Addins;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Framework.Monitoring
|
||||
{
|
||||
public class MonitorModule : IRegionModule
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class MonitorModule : INonSharedRegionModule
|
||||
{
|
||||
/// <summary>
|
||||
/// Is this module enabled?
|
||||
|
@ -62,14 +64,14 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
|
|||
private readonly List<IAlert> m_alerts = new List<IAlert>();
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
#region Implementation of IRegionModule
|
||||
|
||||
public MonitorModule()
|
||||
{
|
||||
Enabled = true;
|
||||
}
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
#region Implementation of INonSharedRegionModule
|
||||
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
IConfig cnfg = source.Configs["Monitoring"];
|
||||
|
||||
|
@ -79,6 +81,13 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
|
|||
if (!Enabled)
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (!Enabled)
|
||||
return;
|
||||
|
||||
m_scene = scene;
|
||||
|
||||
m_scene.AddCommand("General", this, "monitor report",
|
||||
|
@ -89,101 +98,42 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
|
|||
MainServer.Instance.AddHTTPHandler("/monitorstats/" + m_scene.RegionInfo.RegionID, StatsPage);
|
||||
MainServer.Instance.AddHTTPHandler(
|
||||
"/monitorstats/" + Uri.EscapeDataString(m_scene.RegionInfo.RegionName), StatsPage);
|
||||
|
||||
AddMonitors();
|
||||
}
|
||||
|
||||
public void DebugMonitors(string module, string[] args)
|
||||
{
|
||||
foreach (IMonitor monitor in m_staticMonitors)
|
||||
{
|
||||
MainConsole.Instance.OutputFormat(
|
||||
"[MONITOR MODULE]: {0} reports {1} = {2}",
|
||||
m_scene.RegionInfo.RegionName, monitor.GetFriendlyName(), monitor.GetFriendlyValue());
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, float> tuple in m_scene.StatsReporter.GetExtraSimStats())
|
||||
{
|
||||
MainConsole.Instance.OutputFormat(
|
||||
"[MONITOR MODULE]: {0} reports {1} = {2}",
|
||||
m_scene.RegionInfo.RegionName, tuple.Key, tuple.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public void TestAlerts()
|
||||
{
|
||||
foreach (IAlert alert in m_alerts)
|
||||
{
|
||||
alert.Test();
|
||||
}
|
||||
}
|
||||
|
||||
public Hashtable StatsPage(Hashtable request)
|
||||
{
|
||||
// If request was for a specific monitor
|
||||
// eg url/?monitor=Monitor.Name
|
||||
if (request.ContainsKey("monitor"))
|
||||
{
|
||||
string monID = (string) request["monitor"];
|
||||
|
||||
foreach (IMonitor monitor in m_staticMonitors)
|
||||
{
|
||||
string elemName = monitor.ToString();
|
||||
if (elemName.StartsWith(monitor.GetType().Namespace))
|
||||
elemName = elemName.Substring(monitor.GetType().Namespace.Length + 1);
|
||||
|
||||
if (elemName == monID || monitor.ToString() == monID)
|
||||
{
|
||||
Hashtable ereply3 = new Hashtable();
|
||||
|
||||
ereply3["int_response_code"] = 404; // 200 OK
|
||||
ereply3["str_response_string"] = monitor.GetValue().ToString();
|
||||
ereply3["content_type"] = "text/plain";
|
||||
|
||||
return ereply3;
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Arguably this should also be done with dynamic monitors but I'm not sure what the above code
|
||||
// is even doing. Why are we inspecting the type of the monitor???
|
||||
|
||||
// No monitor with that name
|
||||
Hashtable ereply2 = new Hashtable();
|
||||
|
||||
ereply2["int_response_code"] = 404; // 200 OK
|
||||
ereply2["str_response_string"] = "No such monitor";
|
||||
ereply2["content_type"] = "text/plain";
|
||||
|
||||
return ereply2;
|
||||
}
|
||||
|
||||
string xml = "<data>";
|
||||
foreach (IMonitor monitor in m_staticMonitors)
|
||||
{
|
||||
string elemName = monitor.GetName();
|
||||
xml += "<" + elemName + ">" + monitor.GetValue().ToString() + "</" + elemName + ">";
|
||||
// m_log.DebugFormat("[MONITOR MODULE]: {0} = {1}", elemName, monitor.GetValue());
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, float> tuple in m_scene.StatsReporter.GetExtraSimStats())
|
||||
{
|
||||
xml += "<" + tuple.Key + ">" + tuple.Value + "</" + tuple.Key + ">";
|
||||
}
|
||||
|
||||
xml += "</data>";
|
||||
|
||||
Hashtable ereply = new Hashtable();
|
||||
|
||||
ereply["int_response_code"] = 200; // 200 OK
|
||||
ereply["str_response_string"] = xml;
|
||||
ereply["content_type"] = "text/xml";
|
||||
|
||||
return ereply;
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (!Enabled)
|
||||
return;
|
||||
|
||||
MainServer.Instance.RemoveHTTPHandler("GET", "/monitorstats/" + m_scene.RegionInfo.RegionID);
|
||||
MainServer.Instance.RemoveHTTPHandler("GET", "/monitorstats/" + Uri.EscapeDataString(m_scene.RegionInfo.RegionName));
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "Region Health Monitoring Module"; }
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public void AddMonitors()
|
||||
{
|
||||
m_staticMonitors.Add(new AgentCountMonitor(m_scene));
|
||||
m_staticMonitors.Add(new ChildAgentCountMonitor(m_scene));
|
||||
m_staticMonitors.Add(new GCMemoryMonitor());
|
||||
|
@ -196,7 +146,7 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
|
|||
m_staticMonitors.Add(new EventFrameMonitor(m_scene));
|
||||
m_staticMonitors.Add(new LandFrameMonitor(m_scene));
|
||||
m_staticMonitors.Add(new LastFrameTimeMonitor(m_scene));
|
||||
|
||||
|
||||
m_staticMonitors.Add(
|
||||
new GenericMonitor(
|
||||
m_scene,
|
||||
|
@ -357,25 +307,98 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
|
|||
}
|
||||
}
|
||||
|
||||
public void DebugMonitors(string module, string[] args)
|
||||
{
|
||||
foreach (IMonitor monitor in m_staticMonitors)
|
||||
{
|
||||
MainConsole.Instance.OutputFormat(
|
||||
"[MONITOR MODULE]: {0} reports {1} = {2}",
|
||||
m_scene.RegionInfo.RegionName, monitor.GetFriendlyName(), monitor.GetFriendlyValue());
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, float> tuple in m_scene.StatsReporter.GetExtraSimStats())
|
||||
{
|
||||
MainConsole.Instance.OutputFormat(
|
||||
"[MONITOR MODULE]: {0} reports {1} = {2}",
|
||||
m_scene.RegionInfo.RegionName, tuple.Key, tuple.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public void TestAlerts()
|
||||
{
|
||||
foreach (IAlert alert in m_alerts)
|
||||
{
|
||||
alert.Test();
|
||||
}
|
||||
}
|
||||
|
||||
public Hashtable StatsPage(Hashtable request)
|
||||
{
|
||||
// If request was for a specific monitor
|
||||
// eg url/?monitor=Monitor.Name
|
||||
if (request.ContainsKey("monitor"))
|
||||
{
|
||||
string monID = (string) request["monitor"];
|
||||
|
||||
foreach (IMonitor monitor in m_staticMonitors)
|
||||
{
|
||||
string elemName = monitor.ToString();
|
||||
if (elemName.StartsWith(monitor.GetType().Namespace))
|
||||
elemName = elemName.Substring(monitor.GetType().Namespace.Length + 1);
|
||||
|
||||
if (elemName == monID || monitor.ToString() == monID)
|
||||
{
|
||||
Hashtable ereply3 = new Hashtable();
|
||||
|
||||
ereply3["int_response_code"] = 404; // 200 OK
|
||||
ereply3["str_response_string"] = monitor.GetValue().ToString();
|
||||
ereply3["content_type"] = "text/plain";
|
||||
|
||||
return ereply3;
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Arguably this should also be done with dynamic monitors but I'm not sure what the above code
|
||||
// is even doing. Why are we inspecting the type of the monitor???
|
||||
|
||||
// No monitor with that name
|
||||
Hashtable ereply2 = new Hashtable();
|
||||
|
||||
ereply2["int_response_code"] = 404; // 200 OK
|
||||
ereply2["str_response_string"] = "No such monitor";
|
||||
ereply2["content_type"] = "text/plain";
|
||||
|
||||
return ereply2;
|
||||
}
|
||||
|
||||
string xml = "<data>";
|
||||
foreach (IMonitor monitor in m_staticMonitors)
|
||||
{
|
||||
string elemName = monitor.GetName();
|
||||
xml += "<" + elemName + ">" + monitor.GetValue().ToString() + "</" + elemName + ">";
|
||||
// m_log.DebugFormat("[MONITOR MODULE]: {0} = {1}", elemName, monitor.GetValue());
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, float> tuple in m_scene.StatsReporter.GetExtraSimStats())
|
||||
{
|
||||
xml += "<" + tuple.Key + ">" + tuple.Value + "</" + tuple.Key + ">";
|
||||
}
|
||||
|
||||
xml += "</data>";
|
||||
|
||||
Hashtable ereply = new Hashtable();
|
||||
|
||||
ereply["int_response_code"] = 200; // 200 OK
|
||||
ereply["str_response_string"] = xml;
|
||||
ereply["content_type"] = "text/xml";
|
||||
|
||||
return ereply;
|
||||
}
|
||||
|
||||
void OnTriggerAlert(System.Type reporter, string reason, bool fatal)
|
||||
{
|
||||
m_log.Error("[Monitor] " + reporter.Name + " for " + m_scene.RegionInfo.RegionName + " reports " + reason + " (Fatal: " + fatal + ")");
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "Region Health Monitoring Module"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,150 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using Nwc.XmlRpc;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Communications;
|
||||
using OpenSim.Framework.Servers;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.InterGrid
|
||||
{
|
||||
public class OGSRadmin : IRegionModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private readonly List<Scene> m_scenes = new List<Scene>();
|
||||
private IConfigSource m_settings;
|
||||
|
||||
#region Implementation of IRegionModuleBase
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "OGS Supporting RAdmin"; }
|
||||
}
|
||||
|
||||
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
m_settings = source;
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
lock (m_scenes)
|
||||
m_scenes.Add(scene);
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
lock (m_scenes)
|
||||
m_scenes.Remove(scene);
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
if (m_settings.Configs["Startup"].GetBoolean("gridmode", false))
|
||||
{
|
||||
MainServer.Instance.AddXmlRPCHandler("grid_message", GridWideMessage);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IRegionModule
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
{
|
||||
m_settings = source;
|
||||
|
||||
lock (m_scenes)
|
||||
m_scenes.Add(scene);
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public XmlRpcResponse GridWideMessage(XmlRpcRequest req, IPEndPoint remoteClient)
|
||||
{
|
||||
XmlRpcResponse response = new XmlRpcResponse();
|
||||
Hashtable responseData = new Hashtable();
|
||||
|
||||
Hashtable requestData = (Hashtable)req.Params[0];
|
||||
|
||||
// REFACTORING PROBLEM. This authorization needs to be replaced with some other
|
||||
//if ((!requestData.Contains("password") || (string)requestData["password"] != m_com.NetworkServersInfo.GridRecvKey))
|
||||
//{
|
||||
// responseData["accepted"] = false;
|
||||
// responseData["success"] = false;
|
||||
// responseData["error"] = "Invalid Key";
|
||||
// response.Value = responseData;
|
||||
// return response;
|
||||
//}
|
||||
|
||||
string message = (string)requestData["message"];
|
||||
string user = (string)requestData["user"];
|
||||
m_log.InfoFormat("[RADMIN]: Broadcasting: {0}", message);
|
||||
|
||||
lock (m_scenes)
|
||||
foreach (Scene scene in m_scenes)
|
||||
{
|
||||
IDialogModule dialogModule = scene.RequestModuleInterface<IDialogModule>();
|
||||
if (dialogModule != null)
|
||||
dialogModule.SendNotificationToUsersInRegion(UUID.Random(), user, message);
|
||||
}
|
||||
|
||||
responseData["accepted"] = true;
|
||||
responseData["success"] = true;
|
||||
response.Value = responseData;
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -38,6 +38,13 @@
|
|||
<RegionModule id="GlynnTuckerAssetCache" type="OpenSim.Region.CoreModules.Asset.GlynnTuckerAssetCache" />
|
||||
<RegionModule id="CenomeMemoryAssetCache" type="OpenSim.Region.CoreModules.Asset.CenomeMemoryAssetCache"/>
|
||||
<RegionModule id="LibraryModule" type="OpenSim.Region.CoreModules.Framework.Library.LibraryModule"/>
|
||||
<RegionModule id="SunModule" type="OpenSim.Region.CoreModules.SunModule"/>
|
||||
<RegionModule id="WindModule" type="OpenSim.Region.CoreModules.WindModule"/>
|
||||
<RegionModule id="MapSearchModule" type="OpenSim.Region.CoreModules.World.WorldMap.MapSearchModule"/>
|
||||
<RegionModule id="VegetationModule" type="OpenSim.Region.CoreModules.Avatar.Vegetation.VegetationModule"/>
|
||||
<RegionModule id="IPBanModule" type="OpenSim.Region.CoreModules.Agent.IPBan.IPBanModule"/>
|
||||
<RegionModule id="J2KDecoderModule" type="OpenSim.Region.CoreModules.Agent.TextureSender.J2KDecoderModule"/>
|
||||
<RegionModule id="CloudModule" type="OpenSim.Region.CoreModules.CloudModule"/>
|
||||
<!-- Service connectors OUT modules -->
|
||||
<RegionModule id="LocalAssetServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.LocalAssetServicesConnector" />
|
||||
<RegionModule id="RemoteAssetServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.RemoteAssetServicesConnector" />
|
||||
|
|
|
@ -29,8 +29,12 @@ using System;
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
using Nini.Config;
|
||||
using Mono.Addins;
|
||||
|
||||
using OpenMetaverse;
|
||||
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
@ -86,7 +90,8 @@ using OpenSim.Region.Framework.Scenes;
|
|||
|
||||
namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
||||
{
|
||||
public class WorldCommModule : IRegionModule, IWorldComm
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class WorldCommModule : IWorldComm, INonSharedRegionModule
|
||||
{
|
||||
// private static readonly ILog m_log =
|
||||
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
@ -101,9 +106,9 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
private int m_saydistance = 20;
|
||||
private int m_shoutdistance = 100;
|
||||
|
||||
#region IRegionModule Members
|
||||
#region INonSharedRegionModule Members
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
// wrap this in a try block so that defaults will work if
|
||||
// the config file doesn't specify otherwise.
|
||||
|
@ -111,23 +116,23 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
int maxhandles = 64;
|
||||
try
|
||||
{
|
||||
m_whisperdistance = config.Configs["Chat"].GetInt("whisper_distance", m_whisperdistance);
|
||||
m_saydistance = config.Configs["Chat"].GetInt("say_distance", m_saydistance);
|
||||
m_shoutdistance = config.Configs["Chat"].GetInt("shout_distance", m_shoutdistance);
|
||||
maxlisteners = config.Configs["LL-Functions"].GetInt("max_listens_per_region", maxlisteners);
|
||||
maxhandles = config.Configs["LL-Functions"].GetInt("max_listens_per_script", maxhandles);
|
||||
m_whisperdistance = config.Configs["Chat"].GetInt(
|
||||
"whisper_distance", m_whisperdistance);
|
||||
m_saydistance = config.Configs["Chat"].GetInt(
|
||||
"say_distance", m_saydistance);
|
||||
m_shoutdistance = config.Configs["Chat"].GetInt(
|
||||
"shout_distance", m_shoutdistance);
|
||||
maxlisteners = config.Configs["LL-Functions"].GetInt(
|
||||
"max_listens_per_region", maxlisteners);
|
||||
maxhandles = config.Configs["LL-Functions"].GetInt(
|
||||
"max_listens_per_script", maxhandles);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
if (maxlisteners < 1) maxlisteners = int.MaxValue;
|
||||
if (maxhandles < 1) maxhandles = int.MaxValue;
|
||||
|
||||
m_scene = scene;
|
||||
m_scene.RegisterModuleInterface<IWorldComm>(this);
|
||||
m_listenerManager = new ListenerManager(maxlisteners, maxhandles);
|
||||
m_scene.EventManager.OnChatFromClient += DeliverClientMessage;
|
||||
m_scene.EventManager.OnChatBroadcast += DeliverClientMessage;
|
||||
m_pendingQ = new Queue();
|
||||
m_pending = Queue.Synchronized(m_pendingQ);
|
||||
}
|
||||
|
@ -136,6 +141,26 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
m_scene.RegisterModuleInterface<IWorldComm>(this);
|
||||
m_scene.EventManager.OnChatFromClient += DeliverClientMessage;
|
||||
m_scene.EventManager.OnChatBroadcast += DeliverClientMessage;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene) { }
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (scene != m_scene)
|
||||
return;
|
||||
|
||||
m_scene.UnregisterModuleInterface<IWorldComm>(this);
|
||||
m_scene.EventManager.OnChatBroadcast -= DeliverClientMessage;
|
||||
m_scene.EventManager.OnChatBroadcast -= DeliverClientMessage;
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
@ -145,10 +170,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
get { return "WorldCommModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
public Type ReplaceableInterface { get { return null; } }
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -257,7 +279,7 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
|
||||
if ((source = m_scene.GetSceneObjectPart(id)) != null)
|
||||
position = source.AbsolutePosition;
|
||||
else if ((avatar = m_scene.GetScenePresence(id)) != null)
|
||||
else if ((avatar = m_scene.GetScenePresence(id)) != null)
|
||||
position = avatar.AbsolutePosition;
|
||||
else if (ChatTypeEnum.Region == type)
|
||||
position = CenterOfRegion;
|
||||
|
@ -280,7 +302,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
/// <param name="name">name of sender (object or avatar)</param>
|
||||
/// <param name="id">key of sender (object or avatar)</param>
|
||||
/// <param name="msg">msg to sent</param>
|
||||
public void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg, Vector3 position)
|
||||
public void DeliverMessage(ChatTypeEnum type, int channel,
|
||||
string name, UUID id, string msg, Vector3 position)
|
||||
{
|
||||
// m_log.DebugFormat("[WorldComm] got[2] type {0}, channel {1}, name {2}, id {3}, msg {4}",
|
||||
// type, channel, name, id, msg);
|
||||
|
@ -288,17 +311,21 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
// Determine which listen event filters match the given set of arguments, this results
|
||||
// in a limited set of listeners, each belonging a host. If the host is in range, add them
|
||||
// to the pending queue.
|
||||
foreach (ListenerInfo li in m_listenerManager.GetListeners(UUID.Zero, channel, name, id, msg))
|
||||
foreach (ListenerInfo li
|
||||
in m_listenerManager.GetListeners(UUID.Zero, channel,
|
||||
name, id, msg))
|
||||
{
|
||||
// Dont process if this message is from yourself!
|
||||
if (li.GetHostID().Equals(id))
|
||||
continue;
|
||||
|
||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(li.GetHostID());
|
||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(
|
||||
li.GetHostID());
|
||||
if (sPart == null)
|
||||
continue;
|
||||
|
||||
double dis = Util.GetDistanceTo(sPart.AbsolutePosition, position);
|
||||
double dis = Util.GetDistanceTo(sPart.AbsolutePosition,
|
||||
position);
|
||||
switch (type)
|
||||
{
|
||||
case ChatTypeEnum.Whisper:
|
||||
|
@ -400,11 +427,12 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
if (li.GetHostID().Equals(id))
|
||||
continue;
|
||||
|
||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(li.GetHostID());
|
||||
SceneObjectPart sPart = m_scene.GetSceneObjectPart(
|
||||
li.GetHostID());
|
||||
if (sPart == null)
|
||||
continue;
|
||||
|
||||
if ( li.GetHostID().Equals(target))
|
||||
if (li.GetHostID().Equals(target))
|
||||
{
|
||||
QueueMessage(new ListenerInfo(li, name, id, msg));
|
||||
break;
|
||||
|
@ -458,9 +486,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
private void DeliverClientMessage(Object sender, OSChatMessage e)
|
||||
{
|
||||
if (null != e.Sender)
|
||||
DeliverMessage(e.Type, e.Channel, e.Sender.Name, e.Sender.AgentId, e.Message, e.Position);
|
||||
{
|
||||
DeliverMessage(e.Type, e.Channel, e.Sender.Name,
|
||||
e.Sender.AgentId, e.Message, e.Position);
|
||||
}
|
||||
else
|
||||
DeliverMessage(e.Type, e.Channel, e.From, UUID.Zero, e.Message, e.Position);
|
||||
{
|
||||
DeliverMessage(e.Type, e.Channel, e.From, UUID.Zero,
|
||||
e.Message, e.Position);
|
||||
}
|
||||
}
|
||||
|
||||
public Object[] GetSerializationData(UUID itemID)
|
||||
|
@ -477,7 +511,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
|
||||
public class ListenerManager
|
||||
{
|
||||
private Dictionary<int, List<ListenerInfo>> m_listeners = new Dictionary<int, List<ListenerInfo>>();
|
||||
private Dictionary<int, List<ListenerInfo>> m_listeners =
|
||||
new Dictionary<int, List<ListenerInfo>>();
|
||||
private int m_maxlisteners;
|
||||
private int m_maxhandles;
|
||||
private int m_curlisteners;
|
||||
|
@ -535,14 +570,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
itemID, hostID, channel, name, id, msg,
|
||||
regexBitfield);
|
||||
|
||||
List<ListenerInfo> listeners;
|
||||
if (!m_listeners.TryGetValue(channel,out listeners))
|
||||
{
|
||||
listeners = new List<ListenerInfo>();
|
||||
m_listeners.Add(channel, listeners);
|
||||
}
|
||||
listeners.Add(li);
|
||||
m_curlisteners++;
|
||||
List<ListenerInfo> listeners;
|
||||
if (!m_listeners.TryGetValue(
|
||||
channel, out listeners))
|
||||
{
|
||||
listeners = new List<ListenerInfo>();
|
||||
m_listeners.Add(channel, listeners);
|
||||
}
|
||||
listeners.Add(li);
|
||||
m_curlisteners++;
|
||||
|
||||
return newHandle;
|
||||
}
|
||||
|
@ -555,11 +591,13 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
lock (m_listeners)
|
||||
{
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis
|
||||
in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID) && li.GetHandle().Equals(handle))
|
||||
if (li.GetItemID().Equals(itemID) &&
|
||||
li.GetHandle().Equals(handle))
|
||||
{
|
||||
lis.Value.Remove(li);
|
||||
if (lis.Value.Count == 0)
|
||||
|
@ -582,13 +620,15 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
|
||||
lock (m_listeners)
|
||||
{
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis
|
||||
in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID))
|
||||
{
|
||||
// store them first, else the enumerated bails on us
|
||||
// store them first, else the enumerated bails on
|
||||
// us
|
||||
removedListeners.Add(li);
|
||||
}
|
||||
}
|
||||
|
@ -615,11 +655,13 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
lock (m_listeners)
|
||||
{
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis
|
||||
in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID) && li.GetHandle() == handle)
|
||||
if (li.GetItemID().Equals(itemID) &&
|
||||
li.GetHandle() == handle)
|
||||
{
|
||||
li.Activate();
|
||||
// only one, bail out
|
||||
|
@ -634,11 +676,13 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
lock (m_listeners)
|
||||
{
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis
|
||||
in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID) && li.GetHandle() == handle)
|
||||
if (li.GetItemID().Equals(itemID) &&
|
||||
li.GetHandle() == handle)
|
||||
{
|
||||
li.Deactivate();
|
||||
// only one, bail out
|
||||
|
@ -649,19 +693,24 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
}
|
||||
}
|
||||
|
||||
// non-locked access, since its always called in the context of the lock
|
||||
/// <summary>
|
||||
/// non-locked access, since its always called in the context of the
|
||||
/// lock
|
||||
/// </summary>
|
||||
/// <param name="itemID"></param>
|
||||
/// <returns></returns>
|
||||
private int GetNewHandle(UUID itemID)
|
||||
{
|
||||
List<int> handles = new List<int>();
|
||||
|
||||
// build a list of used keys for this specific itemID...
|
||||
foreach (KeyValuePair<int,List<ListenerInfo>> lis in m_listeners)
|
||||
foreach (KeyValuePair<int, List<ListenerInfo>> lis in m_listeners)
|
||||
{
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID))
|
||||
handles.Add(li.GetHandle());
|
||||
}
|
||||
foreach (ListenerInfo li in lis.Value)
|
||||
{
|
||||
if (li.GetItemID().Equals(itemID))
|
||||
handles.Add(li.GetHandle());
|
||||
}
|
||||
}
|
||||
|
||||
// Note: 0 is NOT a valid handle for llListen() to return
|
||||
|
@ -690,17 +739,30 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
|
||||
#endregion
|
||||
|
||||
// Theres probably a more clever and efficient way to
|
||||
// do this, maybe with regex.
|
||||
// PM2008: Ha, one could even be smart and define a specialized Enumerator.
|
||||
public List<ListenerInfo> GetListeners(UUID itemID, int channel, string name, UUID id, string msg)
|
||||
/// <summary>
|
||||
/// Get listeners matching the input parameters.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Theres probably a more clever and efficient way to do this, maybe
|
||||
/// with regex.
|
||||
/// PM2008: Ha, one could even be smart and define a specialized
|
||||
/// Enumerator.
|
||||
/// </remarks>
|
||||
/// <param name="itemID"></param>
|
||||
/// <param name="channel"></param>
|
||||
/// <param name="name"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="msg"></param>
|
||||
/// <returns></returns>
|
||||
public List<ListenerInfo> GetListeners(UUID itemID, int channel,
|
||||
string name, UUID id, string msg)
|
||||
{
|
||||
List<ListenerInfo> collection = new List<ListenerInfo>();
|
||||
|
||||
lock (m_listeners)
|
||||
{
|
||||
List<ListenerInfo> listeners;
|
||||
if (!m_listeners.TryGetValue(channel,out listeners))
|
||||
if (!m_listeners.TryGetValue(channel, out listeners))
|
||||
{
|
||||
return collection;
|
||||
}
|
||||
|
@ -711,7 +773,8 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
{
|
||||
continue;
|
||||
}
|
||||
if (!itemID.Equals(UUID.Zero) && !li.GetItemID().Equals(itemID))
|
||||
if (!itemID.Equals(UUID.Zero) &&
|
||||
!li.GetItemID().Equals(itemID))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -776,28 +839,68 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
lock (m_listeners)
|
||||
{
|
||||
if (!m_listeners.ContainsKey((int)item[2]))
|
||||
m_listeners.Add((int)item[2], new List<ListenerInfo>());
|
||||
{
|
||||
m_listeners.Add((int)item[2],
|
||||
new List<ListenerInfo>());
|
||||
}
|
||||
m_listeners[(int)item[2]].Add(info);
|
||||
}
|
||||
|
||||
idx+=dataItemLength;
|
||||
idx += dataItemLength;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ListenerInfo : IWorldCommListenerInfo
|
||||
{
|
||||
private bool m_active; // Listener is active or not
|
||||
private int m_handle; // Assigned handle of this listener
|
||||
private uint m_localID; // Local ID from script engine
|
||||
private UUID m_itemID; // ID of the host script engine
|
||||
private UUID m_hostID; // ID of the host/scene part
|
||||
private int m_channel; // Channel
|
||||
private UUID m_id; // ID to filter messages from
|
||||
private string m_name; // Object name to filter messages from
|
||||
private string m_message; // The message
|
||||
/// <summary>
|
||||
/// Listener is active or not
|
||||
/// </summary>
|
||||
private bool m_active;
|
||||
|
||||
public ListenerInfo(int handle, uint localID, UUID ItemID, UUID hostID, int channel, string name, UUID id, string message)
|
||||
/// <summary>
|
||||
/// Assigned handle of this listener
|
||||
/// </summary>
|
||||
private int m_handle;
|
||||
|
||||
/// <summary>
|
||||
/// Local ID from script engine
|
||||
/// </summary>
|
||||
private uint m_localID;
|
||||
|
||||
/// <summary>
|
||||
/// ID of the host script engine
|
||||
/// </summary>
|
||||
private UUID m_itemID;
|
||||
|
||||
/// <summary>
|
||||
/// ID of the host/scene part
|
||||
/// </summary>
|
||||
private UUID m_hostID;
|
||||
|
||||
/// <summary>
|
||||
/// Channel
|
||||
/// </summary>
|
||||
private int m_channel;
|
||||
|
||||
/// <summary>
|
||||
/// ID to filter messages from
|
||||
/// </summary>
|
||||
private UUID m_id;
|
||||
|
||||
/// <summary>
|
||||
/// Object name to filter messages from
|
||||
/// </summary>
|
||||
private string m_name;
|
||||
|
||||
/// <summary>
|
||||
/// The message
|
||||
/// </summary>
|
||||
private string m_message;
|
||||
|
||||
public ListenerInfo(int handle, uint localID, UUID ItemID,
|
||||
UUID hostID, int channel, string name, UUID id,
|
||||
string message)
|
||||
{
|
||||
Initialise(handle, localID, ItemID, hostID, channel, name, id,
|
||||
message, 0);
|
||||
|
@ -811,17 +914,23 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
message, regexBitfield);
|
||||
}
|
||||
|
||||
public ListenerInfo(ListenerInfo li, string name, UUID id, string message)
|
||||
public ListenerInfo(ListenerInfo li, string name, UUID id,
|
||||
string message)
|
||||
{
|
||||
Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID, li.m_channel, name, id, message, 0);
|
||||
Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID,
|
||||
li.m_channel, name, id, message, 0);
|
||||
}
|
||||
|
||||
public ListenerInfo(ListenerInfo li, string name, UUID id, string message, int regexBitfield)
|
||||
public ListenerInfo(ListenerInfo li, string name, UUID id,
|
||||
string message, int regexBitfield)
|
||||
{
|
||||
Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID, li.m_channel, name, id, message, regexBitfield);
|
||||
Initialise(li.m_handle, li.m_localID, li.m_itemID, li.m_hostID,
|
||||
li.m_channel, name, id, message, regexBitfield);
|
||||
}
|
||||
|
||||
private void Initialise(int handle, uint localID, UUID ItemID, UUID hostID, int channel, string name, UUID id, string message, int regexBitfield)
|
||||
private void Initialise(int handle, uint localID, UUID ItemID,
|
||||
UUID hostID, int channel, string name, UUID id,
|
||||
string message, int regexBitfield)
|
||||
{
|
||||
m_active = true;
|
||||
m_handle = handle;
|
||||
|
@ -850,9 +959,12 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
|
|||
return data;
|
||||
}
|
||||
|
||||
public static ListenerInfo FromData(uint localID, UUID ItemID, UUID hostID, Object[] data)
|
||||
public static ListenerInfo FromData(uint localID, UUID ItemID,
|
||||
UUID hostID, Object[] data)
|
||||
{
|
||||
ListenerInfo linfo = new ListenerInfo((int)data[1], localID, ItemID, hostID, (int)data[2], (string)data[3], (UUID)data[4], (string)data[5]);
|
||||
ListenerInfo linfo = new ListenerInfo((int)data[1], localID,
|
||||
ItemID, hostID, (int)data[2], (string)data[3],
|
||||
(UUID)data[4], (string)data[5]);
|
||||
linfo.m_active = (bool)data[0];
|
||||
if (data.Length >= 7)
|
||||
{
|
||||
|
|
|
@ -35,7 +35,7 @@ using OpenSim.Region.Framework.Scenes;
|
|||
|
||||
namespace OpenSim.Region.CoreModules
|
||||
{
|
||||
public class CloudModule : ICloudModule
|
||||
public class CloudModule : ICloudModule, INonSharedRegionModule
|
||||
{
|
||||
// private static readonly log4net.ILog m_log
|
||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
@ -48,7 +48,7 @@ namespace OpenSim.Region.CoreModules
|
|||
private float m_cloudDensity = 1.0F;
|
||||
private float[] cloudCover = new float[16 * 16];
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
IConfig cloudConfig = config.Configs["Cloud"];
|
||||
|
||||
|
@ -59,21 +59,40 @@ namespace OpenSim.Region.CoreModules
|
|||
m_frameUpdateRate = cloudConfig.GetInt("cloud_update_rate", 1000);
|
||||
}
|
||||
|
||||
if (m_enabled)
|
||||
{
|
||||
}
|
||||
|
||||
m_scene = scene;
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
scene.EventManager.OnNewClient += CloudsToClient;
|
||||
scene.RegisterModuleInterface<ICloudModule>(this);
|
||||
scene.EventManager.OnFrame += CloudUpdate;
|
||||
m_scene = scene;
|
||||
|
||||
GenerateCloudCover();
|
||||
scene.EventManager.OnNewClient += CloudsToClient;
|
||||
scene.RegisterModuleInterface<ICloudModule>(this);
|
||||
scene.EventManager.OnFrame += CloudUpdate;
|
||||
|
||||
m_ready = true;
|
||||
GenerateCloudCover();
|
||||
|
||||
}
|
||||
m_ready = true;
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
m_ready = false;
|
||||
// Remove our hooks
|
||||
m_scene.EventManager.OnNewClient -= CloudsToClient;
|
||||
m_scene.EventManager.OnFrame -= CloudUpdate;
|
||||
m_scene.UnregisterModuleInterface<ICloudModule>(this);
|
||||
|
||||
m_scene = null;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
|
@ -82,13 +101,6 @@ namespace OpenSim.Region.CoreModules
|
|||
|
||||
public void Close()
|
||||
{
|
||||
if (m_enabled)
|
||||
{
|
||||
m_ready = false;
|
||||
// Remove our hooks
|
||||
m_scene.EventManager.OnNewClient -= CloudsToClient;
|
||||
m_scene.EventManager.OnFrame -= CloudUpdate;
|
||||
}
|
||||
}
|
||||
|
||||
public string Name
|
||||
|
@ -96,12 +108,11 @@ namespace OpenSim.Region.CoreModules
|
|||
get { return "CloudModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return false; }
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
|
||||
public float CloudCover(int x, int y, int z)
|
||||
{
|
||||
float cover = 0f;
|
||||
|
|
|
@ -267,26 +267,17 @@ namespace OpenSim.Region.CoreModules
|
|||
return GetCurrentSunHour() + 6.0f;
|
||||
}
|
||||
|
||||
#region IRegion Methods
|
||||
#region INonSharedRegion Methods
|
||||
|
||||
// Called immediately after the module is loaded for a given region
|
||||
// i.e. Immediately after instance creation.
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
m_scene = scene;
|
||||
m_frame = 0;
|
||||
|
||||
// This one puts an entry in the main help screen
|
||||
// m_scene.AddCommand("Regions", this, "sun", "sun", "Usage: sun [param] [value] - Get or Update Sun module paramater", null);
|
||||
|
||||
// This one enables the ability to type just "sun" without any parameters
|
||||
// m_scene.AddCommand("Regions", this, "sun", "", "", HandleSunConsoleCommand);
|
||||
foreach (KeyValuePair<string, string> kvp in GetParamList())
|
||||
{
|
||||
string sunCommand = string.Format("sun {0}", kvp.Key);
|
||||
m_scene.AddCommand("Regions", this, sunCommand, string.Format("{0} [<value>]", sunCommand), kvp.Value, "", HandleSunConsoleCommand);
|
||||
}
|
||||
|
||||
TimeZone local = TimeZone.CurrentTimeZone;
|
||||
TicksUTCOffset = local.GetUtcOffset(local.ToLocalTime(DateTime.Now)).Ticks;
|
||||
m_log.DebugFormat("[SUN]: localtime offset is {0}", TicksUTCOffset);
|
||||
|
@ -358,15 +349,6 @@ namespace OpenSim.Region.CoreModules
|
|||
HorizonShift = m_HorizonShift; // Z axis translation
|
||||
// HoursToRadians = (SunCycle/24)*VWTimeRatio;
|
||||
|
||||
// Insert our event handling hooks
|
||||
|
||||
scene.EventManager.OnFrame += SunUpdate;
|
||||
scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
|
||||
scene.EventManager.OnEstateToolsSunUpdate += EstateToolsSunUpdate;
|
||||
scene.EventManager.OnGetCurrentTimeAsLindenSunHour += GetCurrentTimeAsLindenSunHour;
|
||||
|
||||
ready = true;
|
||||
|
||||
m_log.Debug("[SUN]: Mode is " + m_RegionMode);
|
||||
m_log.Debug("[SUN]: Initialization completed. Day is " + SecondsPerSunCycle + " seconds, and year is " + m_YearLengthDays + " days");
|
||||
m_log.Debug("[SUN]: Axis offset is " + m_HorizonShift);
|
||||
|
@ -376,14 +358,37 @@ namespace OpenSim.Region.CoreModules
|
|||
break;
|
||||
}
|
||||
|
||||
scene.RegisterModuleInterface<ISunModule>(this);
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public void Close()
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
// Insert our event handling hooks
|
||||
|
||||
scene.EventManager.OnFrame += SunUpdate;
|
||||
scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
|
||||
scene.EventManager.OnEstateToolsSunUpdate += EstateToolsSunUpdate;
|
||||
scene.EventManager.OnGetCurrentTimeAsLindenSunHour += GetCurrentTimeAsLindenSunHour;
|
||||
|
||||
scene.RegisterModuleInterface<ISunModule>(this);
|
||||
|
||||
// This one enables the ability to type just "sun" without any parameters
|
||||
// m_scene.AddCommand("Regions", this, "sun", "", "", HandleSunConsoleCommand);
|
||||
foreach (KeyValuePair<string, string> kvp in GetParamList())
|
||||
{
|
||||
string sunCommand = string.Format("sun {0}", kvp.Key);
|
||||
m_scene.AddCommand("Regions", this, sunCommand, string.Format("{0} [<value>]", sunCommand), kvp.Value, "", HandleSunConsoleCommand);
|
||||
}
|
||||
|
||||
ready = true;
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
ready = false;
|
||||
|
||||
|
@ -394,16 +399,19 @@ namespace OpenSim.Region.CoreModules
|
|||
m_scene.EventManager.OnGetCurrentTimeAsLindenSunHour -= GetCurrentTimeAsLindenSunHour;
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "SunModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region EventManager Events
|
||||
|
|
|
@ -36,7 +36,7 @@ using OpenSim.Region.Framework.Scenes;
|
|||
|
||||
namespace OpenSim.Region.CoreModules.Avatar.Vegetation
|
||||
{
|
||||
public class VegetationModule : IRegionModule, IVegetationModule
|
||||
public class VegetationModule : INonSharedRegionModule, IVegetationModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -45,16 +45,32 @@ namespace OpenSim.Region.CoreModules.Avatar.Vegetation
|
|||
protected static readonly PCode[] creationCapabilities = new PCode[] { PCode.Grass, PCode.NewTree, PCode.Tree };
|
||||
public PCode[] CreationCapabilities { get { return creationCapabilities; } }
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
m_scene.RegisterModuleInterface<IVegetationModule>(this);
|
||||
}
|
||||
|
||||
public void PostInitialise() {}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
m_scene.UnregisterModuleInterface<IVegetationModule>(this);
|
||||
}
|
||||
|
||||
public void Close() {}
|
||||
public string Name { get { return "Vegetation Module"; } }
|
||||
public bool IsSharedModule { get { return false; } }
|
||||
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public SceneObjectGroup AddTree(
|
||||
UUID uuid, UUID groupID, Vector3 scale, Quaternion rotation, Vector3 position, Tree treeType, bool newTree)
|
||||
|
|
|
@ -52,31 +52,31 @@ namespace OpenSim.Region.CoreModules
|
|||
private bool m_ready = false;
|
||||
|
||||
private bool m_enabled = false;
|
||||
|
||||
private IConfig m_windConfig;
|
||||
private IWindModelPlugin m_activeWindPlugin = null;
|
||||
private const string m_dWindPluginName = "SimpleRandomWind";
|
||||
private string m_dWindPluginName = "SimpleRandomWind";
|
||||
private Dictionary<string, IWindModelPlugin> m_availableWindPlugins = new Dictionary<string, IWindModelPlugin>();
|
||||
|
||||
// Simplified windSpeeds based on the fact that the client protocal tracks at a resolution of 16m
|
||||
private Vector2[] windSpeeds = new Vector2[16 * 16];
|
||||
|
||||
#region IRegion Methods
|
||||
#region INonSharedRegionModule Methods
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
IConfig windConfig = config.Configs["Wind"];
|
||||
m_windConfig = config.Configs["Wind"];
|
||||
string desiredWindPlugin = m_dWindPluginName;
|
||||
|
||||
if (windConfig != null)
|
||||
if (m_windConfig != null)
|
||||
{
|
||||
m_enabled = windConfig.GetBoolean("enabled", true);
|
||||
m_enabled = m_windConfig.GetBoolean("enabled", true);
|
||||
|
||||
m_frameUpdateRate = windConfig.GetInt("wind_update_rate", 150);
|
||||
m_frameUpdateRate = m_windConfig.GetInt("wind_update_rate", 150);
|
||||
|
||||
// Determine which wind model plugin is desired
|
||||
if (windConfig.Contains("wind_plugin"))
|
||||
if (m_windConfig.Contains("wind_plugin"))
|
||||
{
|
||||
desiredWindPlugin = windConfig.GetString("wind_plugin");
|
||||
m_dWindPluginName = m_windConfig.GetString("wind_plugin", m_dWindPluginName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -84,104 +84,111 @@ namespace OpenSim.Region.CoreModules
|
|||
{
|
||||
m_log.InfoFormat("[WIND] Enabled with an update rate of {0} frames.", m_frameUpdateRate);
|
||||
|
||||
m_scene = scene;
|
||||
m_frame = 0;
|
||||
|
||||
// Register all the Wind Model Plug-ins
|
||||
foreach (IWindModelPlugin windPlugin in AddinManager.GetExtensionObjects("/OpenSim/WindModule", false))
|
||||
{
|
||||
m_log.InfoFormat("[WIND] Found Plugin: {0}", windPlugin.Name);
|
||||
m_availableWindPlugins.Add(windPlugin.Name, windPlugin);
|
||||
}
|
||||
|
||||
// Check for desired plugin
|
||||
if (m_availableWindPlugins.ContainsKey(desiredWindPlugin))
|
||||
{
|
||||
m_activeWindPlugin = m_availableWindPlugins[desiredWindPlugin];
|
||||
|
||||
m_log.InfoFormat("[WIND] {0} plugin found, initializing.", desiredWindPlugin);
|
||||
|
||||
if (windConfig != null)
|
||||
{
|
||||
m_activeWindPlugin.Initialise();
|
||||
m_activeWindPlugin.WindConfig(m_scene, windConfig);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// if the plug-in wasn't found, default to no wind.
|
||||
if (m_activeWindPlugin == null)
|
||||
{
|
||||
m_log.ErrorFormat("[WIND] Could not find specified wind plug-in: {0}", desiredWindPlugin);
|
||||
m_log.ErrorFormat("[WIND] Defaulting to no wind.");
|
||||
}
|
||||
|
||||
// This one puts an entry in the main help screen
|
||||
// m_scene.AddCommand("Regions", this, "wind", "wind", "Usage: wind <plugin> <param> [value] - Get or Update Wind paramaters", null);
|
||||
|
||||
// This one enables the ability to type just the base command without any parameters
|
||||
// m_scene.AddCommand("Regions", this, "wind", "", "", HandleConsoleCommand);
|
||||
|
||||
// Get a list of the parameters for each plugin
|
||||
foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values)
|
||||
{
|
||||
// m_scene.AddCommand("Regions", this, String.Format("wind base wind_plugin {0}", windPlugin.Name), String.Format("{0} - {1}", windPlugin.Name, windPlugin.Description), "", HandleConsoleBaseCommand);
|
||||
m_scene.AddCommand(
|
||||
"Regions",
|
||||
this,
|
||||
"wind base wind_update_rate",
|
||||
"wind base wind_update_rate [<value>]",
|
||||
"Get or set the wind update rate.",
|
||||
"",
|
||||
HandleConsoleBaseCommand);
|
||||
|
||||
foreach (KeyValuePair<string, string> kvp in windPlugin.WindParams())
|
||||
{
|
||||
string windCommand = String.Format("wind {0} {1}", windPlugin.Name, kvp.Key);
|
||||
m_scene.AddCommand("Regions", this, windCommand, string.Format("{0} [<value>]", windCommand), kvp.Value, "", HandleConsoleParamCommand);
|
||||
}
|
||||
}
|
||||
|
||||
// Register event handlers for when Avatars enter the region, and frame ticks
|
||||
m_scene.EventManager.OnFrame += WindUpdate;
|
||||
m_scene.EventManager.OnMakeRootAgent += OnAgentEnteredRegion;
|
||||
|
||||
// Register the wind module
|
||||
m_scene.RegisterModuleInterface<IWindModule>(this);
|
||||
|
||||
// Generate initial wind values
|
||||
GenWindPos();
|
||||
|
||||
// Mark Module Ready for duty
|
||||
m_ready = true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
m_scene = scene;
|
||||
m_frame = 0;
|
||||
|
||||
// Register all the Wind Model Plug-ins
|
||||
foreach (IWindModelPlugin windPlugin in AddinManager.GetExtensionObjects("/OpenSim/WindModule", false))
|
||||
{
|
||||
m_log.InfoFormat("[WIND] Found Plugin: {0}", windPlugin.Name);
|
||||
m_availableWindPlugins.Add(windPlugin.Name, windPlugin);
|
||||
}
|
||||
|
||||
// Check for desired plugin
|
||||
if (m_availableWindPlugins.ContainsKey(m_dWindPluginName))
|
||||
{
|
||||
m_activeWindPlugin = m_availableWindPlugins[m_dWindPluginName];
|
||||
|
||||
m_log.InfoFormat("[WIND] {0} plugin found, initializing.", m_dWindPluginName);
|
||||
|
||||
if (m_windConfig != null)
|
||||
{
|
||||
m_activeWindPlugin.Initialise();
|
||||
m_activeWindPlugin.WindConfig(m_scene, m_windConfig);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// if the plug-in wasn't found, default to no wind.
|
||||
if (m_activeWindPlugin == null)
|
||||
{
|
||||
m_log.ErrorFormat("[WIND] Could not find specified wind plug-in: {0}", m_dWindPluginName);
|
||||
m_log.ErrorFormat("[WIND] Defaulting to no wind.");
|
||||
}
|
||||
|
||||
// This one puts an entry in the main help screen
|
||||
// m_scene.AddCommand("Regions", this, "wind", "wind", "Usage: wind <plugin> <param> [value] - Get or Update Wind paramaters", null);
|
||||
|
||||
// This one enables the ability to type just the base command without any parameters
|
||||
// m_scene.AddCommand("Regions", this, "wind", "", "", HandleConsoleCommand);
|
||||
|
||||
// Get a list of the parameters for each plugin
|
||||
foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values)
|
||||
{
|
||||
// m_scene.AddCommand("Regions", this, String.Format("wind base wind_plugin {0}", windPlugin.Name), String.Format("{0} - {1}", windPlugin.Name, windPlugin.Description), "", HandleConsoleBaseCommand);
|
||||
m_scene.AddCommand(
|
||||
"Regions",
|
||||
this,
|
||||
"wind base wind_update_rate",
|
||||
"wind base wind_update_rate [<value>]",
|
||||
"Get or set the wind update rate.",
|
||||
"",
|
||||
HandleConsoleBaseCommand);
|
||||
|
||||
foreach (KeyValuePair<string, string> kvp in windPlugin.WindParams())
|
||||
{
|
||||
string windCommand = String.Format("wind {0} {1}", windPlugin.Name, kvp.Key);
|
||||
m_scene.AddCommand("Regions", this, windCommand, string.Format("{0} [<value>]", windCommand), kvp.Value, "", HandleConsoleParamCommand);
|
||||
}
|
||||
}
|
||||
|
||||
// Register event handlers for when Avatars enter the region, and frame ticks
|
||||
m_scene.EventManager.OnFrame += WindUpdate;
|
||||
m_scene.EventManager.OnMakeRootAgent += OnAgentEnteredRegion;
|
||||
|
||||
// Register the wind module
|
||||
m_scene.RegisterModuleInterface<IWindModule>(this);
|
||||
|
||||
// Generate initial wind values
|
||||
GenWindPos();
|
||||
|
||||
// Mark Module Ready for duty
|
||||
m_ready = true;
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
m_ready = false;
|
||||
|
||||
// REVIEW: If a region module is closed, is there a possibility that it'll re-open/initialize ??
|
||||
m_activeWindPlugin = null;
|
||||
foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values)
|
||||
{
|
||||
windPlugin.Dispose();
|
||||
}
|
||||
|
||||
m_availableWindPlugins.Clear();
|
||||
|
||||
// Remove our hooks
|
||||
m_scene.EventManager.OnFrame -= WindUpdate;
|
||||
m_scene.EventManager.OnMakeRootAgent -= OnAgentEnteredRegion;
|
||||
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if (m_enabled)
|
||||
{
|
||||
m_ready = false;
|
||||
|
||||
// REVIEW: If a region module is closed, is there a possibility that it'll re-open/initialize ??
|
||||
m_activeWindPlugin = null;
|
||||
foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values)
|
||||
{
|
||||
windPlugin.Dispose();
|
||||
}
|
||||
|
||||
m_availableWindPlugins.Clear();
|
||||
|
||||
// Remove our hooks
|
||||
m_scene.EventManager.OnFrame -= WindUpdate;
|
||||
m_scene.EventManager.OnMakeRootAgent -= OnAgentEnteredRegion;
|
||||
}
|
||||
}
|
||||
|
||||
public string Name
|
||||
|
@ -189,11 +196,14 @@ namespace OpenSim.Region.CoreModules
|
|||
get { return "WindModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return false; }
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using log4net;
|
||||
|
@ -37,16 +38,21 @@ using GridRegion = OpenSim.Services.Interfaces.GridRegion;
|
|||
|
||||
namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||
{
|
||||
public class MapSearchModule : IRegionModule
|
||||
public class MapSearchModule : ISharedRegionModule
|
||||
{
|
||||
private static readonly ILog m_log =
|
||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
Scene m_scene = null; // only need one for communication with GridService
|
||||
List<Scene> m_scenes = new List<Scene>();
|
||||
List<UUID> m_Clients;
|
||||
|
||||
#region IRegionModule Members
|
||||
public void Initialise(Scene scene, IConfigSource source)
|
||||
#region ISharedRegionModule Members
|
||||
public void Initialise(IConfigSource source)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (m_scene == null)
|
||||
{
|
||||
|
@ -55,6 +61,16 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
|
||||
m_scenes.Add(scene);
|
||||
scene.EventManager.OnNewClient += OnNewClient;
|
||||
m_Clients = new List<UUID>();
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
m_scenes.Remove(scene);
|
||||
if (m_scene == scene && m_scenes.Count > 0)
|
||||
m_scene = m_scenes[0];
|
||||
|
||||
scene.EventManager.OnNewClient -= OnNewClient;
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
|
@ -72,16 +88,44 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
get { return "MapSearchModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return true; }
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void OnNewClient(IClientAPI client)
|
||||
{
|
||||
client.OnMapNameRequest += OnMapNameRequest;
|
||||
client.OnMapNameRequest += OnMapNameRequestHandler;
|
||||
}
|
||||
|
||||
private void OnMapNameRequestHandler(IClientAPI remoteClient, string mapName, uint flags)
|
||||
{
|
||||
lock (m_Clients)
|
||||
{
|
||||
if (m_Clients.Contains(remoteClient.AgentId))
|
||||
return;
|
||||
|
||||
m_Clients.Add(remoteClient.AgentId);
|
||||
}
|
||||
|
||||
Util.FireAndForget(delegate
|
||||
{
|
||||
try
|
||||
{
|
||||
OnMapNameRequest(remoteClient, mapName, flags);
|
||||
}
|
||||
finally
|
||||
{
|
||||
lock (m_Clients)
|
||||
m_Clients.Remove(remoteClient.AgentId);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void OnMapNameRequest(IClientAPI remoteClient, string mapName, uint flags)
|
||||
|
@ -175,6 +219,20 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
});
|
||||
}
|
||||
|
||||
private void AddFinalBlock(List<MapBlockData> blocks)
|
||||
{
|
||||
// final block, closing the search result
|
||||
MapBlockData data = new MapBlockData();
|
||||
data.Agents = 0;
|
||||
data.Access = 255;
|
||||
data.MapImageId = UUID.Zero;
|
||||
data.Name = "";
|
||||
data.RegionFlags = 0;
|
||||
data.WaterHeight = 0; // not used
|
||||
data.X = 0;
|
||||
data.Y = 0;
|
||||
blocks.Add(data);
|
||||
}
|
||||
// private Scene GetClientScene(IClientAPI client)
|
||||
// {
|
||||
// foreach (Scene s in m_scenes)
|
||||
|
|
|
@ -35,15 +35,20 @@ using System.Xml;
|
|||
using log4net;
|
||||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using Mono.Addins;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Communications;
|
||||
using OpenSim.Region.DataSnapshot.Interfaces;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
[assembly: Addin("DataSnapshot", "0.1")]
|
||||
[assembly: AddinDependency("OpenSim", "0.5")]
|
||||
|
||||
namespace OpenSim.Region.DataSnapshot
|
||||
{
|
||||
public class DataSnapshotManager : IRegionModule, IDataSnapshot
|
||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
|
||||
public class DataSnapshotManager : ISharedRegionModule, IDataSnapshot
|
||||
{
|
||||
#region Class members
|
||||
//Information from config
|
||||
|
@ -95,7 +100,7 @@ namespace OpenSim.Region.DataSnapshot
|
|||
|
||||
#region IRegionModule
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
if (!m_configLoaded)
|
||||
{
|
||||
|
@ -133,82 +138,121 @@ namespace OpenSim.Region.DataSnapshot
|
|||
m_enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_enabled)
|
||||
m_snapStore = new SnapshotStore(m_snapsDir, m_gridinfo, m_listener_port, m_hostname);
|
||||
}
|
||||
|
||||
if (m_enabled)
|
||||
{
|
||||
//Hand it the first scene, assuming that all scenes have the same BaseHTTPServer
|
||||
new DataRequestHandler(scene, this);
|
||||
|
||||
m_hostname = scene.RegionInfo.ExternalHostName;
|
||||
m_snapStore = new SnapshotStore(m_snapsDir, m_gridinfo, m_listener_port, m_hostname);
|
||||
|
||||
MakeEverythingStale();
|
||||
|
||||
if (m_dataServices != "" && m_dataServices != "noservices")
|
||||
NotifyDataServices(m_dataServices, "online");
|
||||
}
|
||||
}
|
||||
|
||||
if (m_enabled)
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
m_log.DebugFormat("[DATASNAPSHOT]: Module added to Scene {0}.", scene.RegionInfo.RegionName);
|
||||
|
||||
m_snapStore.AddScene(scene);
|
||||
m_scenes.Add(scene);
|
||||
|
||||
Assembly currentasm = Assembly.GetExecutingAssembly();
|
||||
|
||||
foreach (Type pluginType in currentasm.GetTypes())
|
||||
{
|
||||
m_log.Info("[DATASNAPSHOT]: Scene added to module.");
|
||||
|
||||
m_snapStore.AddScene(scene);
|
||||
m_scenes.Add(scene);
|
||||
|
||||
Assembly currentasm = Assembly.GetExecutingAssembly();
|
||||
|
||||
foreach (Type pluginType in currentasm.GetTypes())
|
||||
if (pluginType.IsPublic)
|
||||
{
|
||||
if (pluginType.IsPublic)
|
||||
if (!pluginType.IsAbstract)
|
||||
{
|
||||
if (!pluginType.IsAbstract)
|
||||
if (pluginType.GetInterface("IDataSnapshotProvider") != null)
|
||||
{
|
||||
if (pluginType.GetInterface("IDataSnapshotProvider") != null)
|
||||
{
|
||||
IDataSnapshotProvider module = (IDataSnapshotProvider)Activator.CreateInstance(pluginType);
|
||||
module.Initialize(scene, this);
|
||||
module.OnStale += MarkDataStale;
|
||||
IDataSnapshotProvider module = (IDataSnapshotProvider)Activator.CreateInstance(pluginType);
|
||||
module.Initialize(scene, this);
|
||||
module.OnStale += MarkDataStale;
|
||||
|
||||
m_dataproviders.Add(module);
|
||||
m_snapStore.AddProvider(module);
|
||||
m_dataproviders.Add(module);
|
||||
m_snapStore.AddProvider(module);
|
||||
|
||||
m_log.Info("[DATASNAPSHOT]: Added new data provider type: " + pluginType.Name);
|
||||
}
|
||||
m_log.Debug("[DATASNAPSHOT]: Added new data provider type: " + pluginType.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//scene.OnRestart += OnSimRestart;
|
||||
scene.EventManager.OnShutdown += delegate() { OnSimRestart(scene.RegionInfo); };
|
||||
}
|
||||
else
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
m_log.Info("[DATASNAPSHOT]: Region " + scene.RegionInfo.RegionName + " is being removed, removing from indexing");
|
||||
Scene restartedScene = SceneForUUID(scene.RegionInfo.RegionID);
|
||||
|
||||
m_scenes.Remove(restartedScene);
|
||||
m_snapStore.RemoveScene(restartedScene);
|
||||
|
||||
//Getting around the fact that we can't remove objects from a collection we are enumerating over
|
||||
List<IDataSnapshotProvider> providersToRemove = new List<IDataSnapshotProvider>();
|
||||
|
||||
foreach (IDataSnapshotProvider provider in m_dataproviders)
|
||||
{
|
||||
//m_log.Debug("[DATASNAPSHOT]: Data snapshot disabled, not adding scene to module (or anything else).");
|
||||
if (provider.GetParentScene == restartedScene)
|
||||
{
|
||||
providersToRemove.Add(provider);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (IDataSnapshotProvider provider in providersToRemove)
|
||||
{
|
||||
m_dataproviders.Remove(provider);
|
||||
m_snapStore.RemoveProvider(provider);
|
||||
}
|
||||
|
||||
m_snapStore.RemoveScene(restartedScene);
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
//Hand it the first scene, assuming that all scenes have the same BaseHTTPServer
|
||||
new DataRequestHandler(m_scenes[0], this);
|
||||
|
||||
m_hostname = m_scenes[0].RegionInfo.ExternalHostName;
|
||||
|
||||
if (m_dataServices != "" && m_dataServices != "noservices")
|
||||
NotifyDataServices(m_dataServices, "online");
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
m_log.DebugFormat("[DATASNAPSHOT]: Marking scene {0} as stale.", scene.RegionInfo.RegionName);
|
||||
m_snapStore.ForceSceneStale(scene);
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
if (m_enabled && m_dataServices != "" && m_dataServices != "noservices")
|
||||
NotifyDataServices(m_dataServices, "offline");
|
||||
}
|
||||
|
||||
|
||||
public bool IsSharedModule
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "External Data Generator"; }
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
@ -399,35 +443,7 @@ namespace OpenSim.Region.DataSnapshot
|
|||
m_snapStore.ForceSceneStale(scene);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public void OnSimRestart(RegionInfo thisRegion)
|
||||
{
|
||||
m_log.Info("[DATASNAPSHOT]: Region " + thisRegion.RegionName + " is restarting, removing from indexing");
|
||||
Scene restartedScene = SceneForUUID(thisRegion.RegionID);
|
||||
|
||||
m_scenes.Remove(restartedScene);
|
||||
m_snapStore.RemoveScene(restartedScene);
|
||||
|
||||
//Getting around the fact that we can't remove objects from a collection we are enumerating over
|
||||
List<IDataSnapshotProvider> providersToRemove = new List<IDataSnapshotProvider>();
|
||||
|
||||
foreach (IDataSnapshotProvider provider in m_dataproviders)
|
||||
{
|
||||
if (provider.GetParentScene == restartedScene)
|
||||
{
|
||||
providersToRemove.Add(provider);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (IDataSnapshotProvider provider in providersToRemove)
|
||||
{
|
||||
m_dataproviders.Remove(provider);
|
||||
m_snapStore.RemoveProvider(provider);
|
||||
}
|
||||
|
||||
m_snapStore.RemoveScene(restartedScene);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,5 @@ namespace OpenSim.Region.DataSnapshot.Interfaces
|
|||
public interface IDataSnapshot
|
||||
{
|
||||
XmlDocument GetSnapshot(string regionName);
|
||||
void MakeEverythingStale();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
{
|
||||
public interface ICloudModule : IRegionModule
|
||||
public interface ICloudModule
|
||||
{
|
||||
/// <summary>
|
||||
/// Retrieves the cloud density at the given region coordinates
|
||||
|
|
|
@ -33,95 +33,140 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
public interface IDialogModule
|
||||
{
|
||||
/// <summary>
|
||||
/// Send a non-modal alert message to a particular user. This can disappear from the user's view after a
|
||||
/// small interval.
|
||||
/// Send a non-modal alert message to a particular user. This can
|
||||
/// disappear from the user's view after a small interval.
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="client">
|
||||
/// IClientAPI object representing the user.
|
||||
/// </param>
|
||||
/// <param name="message">Message text to send to the user.</param>
|
||||
void SendAlertToUser(IClientAPI client, string message);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Send an alert message to a particular user.
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="modal"></param>
|
||||
/// <param name="client">
|
||||
/// IClientAPI object representing the user.
|
||||
/// </param>
|
||||
/// <param name="message">Message text to send to the user.</param>
|
||||
/// <param name="modal">Flag to control modality.</param>
|
||||
void SendAlertToUser(IClientAPI client, string message, bool modal);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Send a non-modal alert message to a particular user.
|
||||
/// </summary>
|
||||
/// <param name="agentID"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="agentID">UUID of agent representing the user.</param>
|
||||
/// <param name="message">Message text to send to the user.</param>
|
||||
void SendAlertToUser(UUID agentID, string message);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Send an alert message to a particular user.
|
||||
/// </summary>
|
||||
/// <param name="agentID"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="modal"></param>
|
||||
/// <param name="agentID">UUID of agent representing the user.</param>
|
||||
/// <param name="message">Message text to send to the user.</param>
|
||||
/// <param name="modal">Flag to control modality.</param>
|
||||
void SendAlertToUser(UUID agentID, string message, bool modal);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Send an alert message to a particular user.
|
||||
/// </summary>
|
||||
/// <param name="firstName"></param>
|
||||
/// <param name="lastName"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="modal"></param>
|
||||
void SendAlertToUser(string firstName, string lastName, string message, bool modal);
|
||||
|
||||
/// <param name="firstName">Account first name</param>
|
||||
/// <param name="lastName">Account last name</param>
|
||||
/// <param name="message">Message text to send to the user.</param>
|
||||
/// <param name="modal">Flag to control modality.</param>
|
||||
void SendAlertToUser(string firstName, string lastName,
|
||||
string message, bool modal);
|
||||
|
||||
/// <summary>
|
||||
/// Send an alert message to all users in the scene.
|
||||
/// </summary>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="message">Message text to send to all users.</param>
|
||||
void SendGeneralAlert(string message);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Send a dialog box to a particular user.
|
||||
/// </summary>
|
||||
/// <param name="avatarID"></param>
|
||||
/// <param name="objectName"></param>
|
||||
/// <param name="objectID"></param>
|
||||
/// <param name="ownerID"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="textureID"></param>
|
||||
/// <param name="ch"></param>
|
||||
/// <param name="buttonlabels"></param>
|
||||
void SendDialogToUser(
|
||||
UUID avatarID, string objectName, UUID objectID, UUID ownerID,
|
||||
string message, UUID textureID, int ch, string[] buttonlabels);
|
||||
|
||||
/// <param name="avatarID">
|
||||
/// UUID of the avatar representing the user.
|
||||
/// </param>
|
||||
/// <param name="objectName">
|
||||
/// Name of the object sending the dialog.
|
||||
/// </param>
|
||||
/// <param name="objectID">
|
||||
/// UUID of the object sending the dialog.
|
||||
/// </param>
|
||||
/// <param name="ownerID">
|
||||
/// UUID of the user that owns the object.
|
||||
/// </param>
|
||||
/// <param name="message">Message text to send to the user.</param>
|
||||
/// <param name="textureID">
|
||||
/// Texture UUID to pass along with the dialog.
|
||||
/// </param>
|
||||
/// <param name="ch">
|
||||
/// Channel on which the selected button text should be broadcast.
|
||||
/// </param>
|
||||
/// <param name="buttonlabels">Dialog button text.</param>
|
||||
void SendDialogToUser(UUID avatarID, string objectName, UUID objectID,
|
||||
UUID ownerID, string message, UUID textureID, int ch,
|
||||
string[] buttonlabels);
|
||||
|
||||
/// <summary>
|
||||
/// Send a url to a particular user.
|
||||
/// </summary>
|
||||
/// <param name="avatarID"></param>
|
||||
/// <param name="objectName"></param>
|
||||
/// <param name="objectID"></param>
|
||||
/// <param name="ownerID"></param>
|
||||
/// <param name="groupOwned"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <param name="url"></param>
|
||||
void SendUrlToUser(
|
||||
UUID avatarID, string objectName, UUID objectID, UUID ownerID, bool groupOwned, string message, string url);
|
||||
|
||||
/// <param name="avatarID">
|
||||
/// UUID of the avatar representing the user.
|
||||
/// </param>
|
||||
/// <param name="objectName">
|
||||
/// Name of the object sending the dialog.
|
||||
/// </param>
|
||||
/// <param name="objectID">
|
||||
/// UUID of the object sending the dialog.
|
||||
/// </param>
|
||||
/// <param name="ownerID">
|
||||
/// UUID of the user that owns the object.
|
||||
/// </param>
|
||||
/// <param name="groupOwned">
|
||||
/// Flag indicating whether or not the object is group-owned.
|
||||
/// </param>
|
||||
/// <param name="message">Message text to send to the user.</param>
|
||||
/// <param name="url">Url to send to the user.</param>
|
||||
void SendUrlToUser(UUID avatarID, string objectName, UUID objectID,
|
||||
UUID ownerID, bool groupOwned, string message, string url);
|
||||
|
||||
/// <summary>
|
||||
/// Send a notification to all users in the scene. This notification should remain around until the
|
||||
/// user explicitly dismisses it.
|
||||
/// Send a notification to all users in the scene. This notification
|
||||
/// should remain around until the user explicitly dismisses it.
|
||||
/// </summary>
|
||||
///
|
||||
/// On the Linden Labs Second Client (as of 1.21), this is a big blue box message on the upper right of the
|
||||
/// screen.
|
||||
///
|
||||
/// <remarks>
|
||||
/// On the Linden Labs Second Client (as of 1.21), this is a big blue
|
||||
/// box message on the upper right of the screen.
|
||||
/// </remarks>
|
||||
/// <param name="fromAvatarID">The user sending the message</param>
|
||||
/// <param name="fromAvatarName">The name of the user doing the sending</param>
|
||||
/// <param name="fromAvatarName">
|
||||
/// The name of the user doing the sending
|
||||
/// </param>
|
||||
/// <param name="message">The message being sent to the user</param>
|
||||
void SendNotificationToUsersInRegion(UUID fromAvatarID, string fromAvatarName, string message);
|
||||
|
||||
void SendNotificationToUsersInRegion(UUID fromAvatarID,
|
||||
string fromAvatarName, string message);
|
||||
|
||||
/// <summary>
|
||||
/// Send a textbox entry for the client to respond to
|
||||
/// </summary>
|
||||
void SendTextBoxToUser(UUID avatarid, string message, int chatChannel, string name, UUID objectid, UUID ownerid);
|
||||
/// <param name="avatarID">
|
||||
/// UUID of the avatar representing the user.
|
||||
/// </param>
|
||||
/// <param name="message">Message text to send to the user.</param>
|
||||
/// <param name="chatChannel">
|
||||
/// Chat channel that the user's input should be broadcast on.
|
||||
/// </param>
|
||||
/// <param name="name">Name of the object sending the dialog.</param>
|
||||
/// <param name="objectid">
|
||||
/// UUID of the object sending the dialog.
|
||||
/// </param>
|
||||
/// <param name="ownerid">
|
||||
/// UUID of the user that owns the object.
|
||||
/// </param>
|
||||
void SendTextBoxToUser(UUID avatarid, string message, int chatChannel,
|
||||
string name, UUID objectid, UUID ownerid);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ using OpenMetaverse;
|
|||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
{
|
||||
public interface ISunModule : IRegionModule
|
||||
public interface ISunModule : INonSharedRegionModule
|
||||
{
|
||||
double GetSunParameter(string param);
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ using OpenMetaverse;
|
|||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
{
|
||||
public interface IWindModule : IRegionModule
|
||||
public interface IWindModule : INonSharedRegionModule
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -1954,8 +1954,19 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
public virtual void DeRezObjects(IClientAPI remoteClient, List<uint> localIDs,
|
||||
UUID groupID, DeRezAction action, UUID destinationID)
|
||||
/// <summary>
|
||||
/// Derez one or more objects from the scene.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Won't actually remove the scene object in the case where the object is being copied to a user inventory.
|
||||
/// </remarks>
|
||||
/// <param name='remoteClient'>Client requesting derez</param>
|
||||
/// <param name='localIDs'>Local ids of root parts of objects to delete.</param>
|
||||
/// <param name='groupID'>Not currently used. Here because the client passes this to us.</param>
|
||||
/// <param name='action'>DeRezAction</param>
|
||||
/// <param name='destinationID'>User folder ID to place derezzed object</param>
|
||||
public virtual void DeRezObjects(
|
||||
IClientAPI remoteClient, List<uint> localIDs, UUID groupID, DeRezAction action, UUID destinationID)
|
||||
{
|
||||
// First, see of we can perform the requested action and
|
||||
// build a list of eligible objects
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using NUnit.Framework;
|
||||
|
@ -33,6 +34,7 @@ using OpenMetaverse;
|
|||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Communications;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
||||
|
@ -42,7 +44,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
|||
/// Basic scene object tests (create, read and delete but not update).
|
||||
/// </summary>
|
||||
[TestFixture]
|
||||
public class SceneObjectBasicTests
|
||||
public class SceneObjectBasicTests : OpenSimTestCase
|
||||
{
|
||||
// [TearDown]
|
||||
// public void TearDown()
|
||||
|
@ -237,38 +239,60 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
|||
/// <summary>
|
||||
/// Test deleting an object asynchronously to user inventory.
|
||||
/// </summary>
|
||||
//[Test]
|
||||
//public void TestDeleteSceneObjectAsyncToUserInventory()
|
||||
//{
|
||||
// TestHelper.InMethod();
|
||||
// //log4net.Config.XmlConfigurator.Configure();
|
||||
|
||||
// UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001");
|
||||
// string myObjectName = "Fred";
|
||||
|
||||
// TestScene scene = SceneSetupHelpers.SetupScene();
|
||||
// SceneObjectPart part = SceneSetupHelpers.AddSceneObject(scene, myObjectName);
|
||||
|
||||
// Assert.That(
|
||||
// scene.CommsManager.UserAdminService.AddUser(
|
||||
// "Bob", "Hoskins", "test", "test@test.com", 1000, 1000, agentId),
|
||||
// Is.EqualTo(agentId));
|
||||
|
||||
// IClientAPI client = SceneSetupHelpers.AddRootAgent(scene, agentId);
|
||||
|
||||
// CachedUserInfo userInfo = scene.CommsManager.UserProfileCacheService.GetUserDetails(agentId);
|
||||
// Assert.That(userInfo, Is.Not.Null);
|
||||
// Assert.That(userInfo.RootFolder, Is.Not.Null);
|
||||
|
||||
// SceneSetupHelpers.DeleteSceneObjectAsync(scene, part, DeRezAction.Take, userInfo.RootFolder.ID, client);
|
||||
|
||||
// // Check that we now have the taken part in our inventory
|
||||
// Assert.That(myObjectName, Is.EqualTo(userInfo.RootFolder.FindItemByPath(myObjectName).Name));
|
||||
|
||||
// // Check that the taken part has actually disappeared
|
||||
// SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
|
||||
// Assert.That(retrievedPart, Is.Null);
|
||||
//}
|
||||
// [Test]
|
||||
public void TestDeleteSceneObjectAsyncToUserInventory()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
TestHelpers.EnableLogging();
|
||||
|
||||
UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001");
|
||||
string myObjectName = "Fred";
|
||||
|
||||
TestScene scene = new SceneHelpers().SetupScene();
|
||||
|
||||
// Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
|
||||
AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter;
|
||||
sogd.Enabled = false;
|
||||
|
||||
SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, myObjectName, agentId);
|
||||
|
||||
// Assert.That(
|
||||
// scene.CommsManager.UserAdminService.AddUser(
|
||||
// "Bob", "Hoskins", "test", "test@test.com", 1000, 1000, agentId),
|
||||
// Is.EqualTo(agentId));
|
||||
|
||||
UserAccount ua = UserAccountHelpers.CreateUserWithInventory(scene, agentId);
|
||||
InventoryFolderBase folder1
|
||||
= UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, ua.PrincipalID, "folder1");
|
||||
|
||||
IClientAPI client = SceneHelpers.AddScenePresence(scene, agentId).ControllingClient;
|
||||
scene.DeRezObjects(client, new List<uint>() { so.LocalId }, UUID.Zero, DeRezAction.Take, folder1.ID);
|
||||
|
||||
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(so.LocalId);
|
||||
|
||||
Assert.That(retrievedPart, Is.Not.Null);
|
||||
Assert.That(so.IsDeleted, Is.False);
|
||||
|
||||
sogd.InventoryDeQueueAndDelete();
|
||||
|
||||
Assert.That(so.IsDeleted, Is.True);
|
||||
|
||||
SceneObjectPart retrievedPart2 = scene.GetSceneObjectPart(so.LocalId);
|
||||
Assert.That(retrievedPart2, Is.Null);
|
||||
|
||||
// SceneSetupHelpers.DeleteSceneObjectAsync(scene, part, DeRezAction.Take, userInfo.RootFolder.ID, client);
|
||||
|
||||
InventoryItemBase retrievedItem
|
||||
= UserInventoryHelpers.GetInventoryItem(
|
||||
scene.InventoryService, ua.PrincipalID, "folder1/" + myObjectName);
|
||||
|
||||
// Check that we now have the taken part in our inventory
|
||||
Assert.That(retrievedItem, Is.Not.Null);
|
||||
|
||||
// Check that the taken part has actually disappeared
|
||||
// SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
|
||||
// Assert.That(retrievedPart, Is.Null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Changing a scene object uuid changes the root part uuid. This is a valid operation if the object is not
|
||||
|
|
|
@ -14,5 +14,6 @@
|
|||
<RegionModule id="VivoxVoice" type="OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice.VivoxVoiceModule" />
|
||||
<RegionModule id="WorldViewModule" type="OpenSim.Region.OptionalModules.World.WorldView.WorldViewModule" />
|
||||
<RegionModule id="AutoBackupModule" type="OpenSim.Region.OptionalModules.World.AutoBackup.AutoBackupModule" />
|
||||
<RegionModule id="TreePopulatorModule" type="OpenSim.Region.OptionalModules.World.TreePopulator.TreePopulatorModule" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
|
|||
/// <summary>
|
||||
/// Version 2.02 - Still hacky
|
||||
/// </summary>
|
||||
public class TreePopulatorModule : IRegionModule, ICommandableModule, IVegetationModule
|
||||
public class TreePopulatorModule : INonSharedRegionModule, ICommandableModule, IVegetationModule
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private readonly Commander m_commander = new Commander("tree");
|
||||
|
@ -170,13 +170,9 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
|
|||
|
||||
#region IRegionModule Members
|
||||
|
||||
public void Initialise(Scene scene, IConfigSource config)
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
|
||||
m_scene = scene;
|
||||
m_scene.RegisterModuleInterface<IRegionModule>(this);
|
||||
m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
|
||||
|
||||
// ini file settings
|
||||
try
|
||||
{
|
||||
|
@ -201,7 +197,20 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
|
|||
m_log.Debug("[TREES]: Initialised tree module");
|
||||
}
|
||||
|
||||
public void PostInitialise()
|
||||
public void AddRegion(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
//m_scene.RegisterModuleInterface<IRegionModule>(this);
|
||||
m_scene.RegisterModuleCommander(m_commander);
|
||||
m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole;
|
||||
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
{
|
||||
}
|
||||
|
||||
public void RegionLoaded(Scene scene)
|
||||
{
|
||||
ReloadCopse();
|
||||
if (m_copse.Count > 0)
|
||||
|
@ -220,11 +229,12 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
|
|||
get { return "TreePopulatorModule"; }
|
||||
}
|
||||
|
||||
public bool IsSharedModule
|
||||
public Type ReplaceableInterface
|
||||
{
|
||||
get { return false; }
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
//--------------------------------------------------------------
|
||||
|
@ -448,8 +458,6 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
|
|||
m_commander.RegisterCommand("reload", treeReloadCommand);
|
||||
m_commander.RegisterCommand("remove", treeRemoveCommand);
|
||||
m_commander.RegisterCommand("statistics", treeStatisticsCommand);
|
||||
|
||||
m_scene.RegisterModuleCommander(m_commander);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -141,9 +141,9 @@ namespace OpenSim.Tests.Common
|
|||
TestScene testScene = new TestScene(
|
||||
regInfo, m_acm, scs, m_simDataService, m_estateDataService, null, false, configSource, null);
|
||||
|
||||
IRegionModule godsModule = new GodsModule();
|
||||
godsModule.Initialise(testScene, new IniConfigSource());
|
||||
testScene.AddModule(godsModule.Name, godsModule);
|
||||
INonSharedRegionModule godsModule = new GodsModule();
|
||||
godsModule.Initialise(new IniConfigSource());
|
||||
godsModule.AddRegion(testScene);
|
||||
|
||||
// Add scene to services
|
||||
m_assetService.AddRegion(testScene);
|
||||
|
@ -383,11 +383,6 @@ namespace OpenSim.Tests.Common
|
|||
}
|
||||
}
|
||||
|
||||
foreach (IRegionModuleBase module in newModules)
|
||||
{
|
||||
if (module is ISharedRegionModule) ((ISharedRegionModule)module).PostInitialise();
|
||||
}
|
||||
|
||||
foreach (IRegionModuleBase module in newModules)
|
||||
{
|
||||
foreach (Scene scene in scenes)
|
||||
|
@ -396,7 +391,12 @@ namespace OpenSim.Tests.Common
|
|||
scene.AddRegionModule(module.Name, module);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
foreach (IRegionModuleBase module in newModules)
|
||||
{
|
||||
if (module is ISharedRegionModule) ((ISharedRegionModule)module).PostInitialise();
|
||||
}
|
||||
|
||||
// RegionLoaded is fired after all modules have been appropriately added to all scenes
|
||||
foreach (IRegionModuleBase module in newModules)
|
||||
foreach (Scene scene in scenes)
|
||||
|
|
|
@ -57,9 +57,6 @@
|
|||
; ## CLIENTS
|
||||
; ##
|
||||
|
||||
; Enables EventQueueGet Service.
|
||||
EventQueue = true
|
||||
|
||||
; Set this to the DLL containing the client stack to use.
|
||||
clientstack_plugin="OpenSim.Region.ClientStack.LindenUDP.dll"
|
||||
|
||||
|
|
Loading…
Reference in New Issue