Merge remote-tracking branch 'remotes/origin/avination' into teravuswork
commit
6007eae00f
|
@ -897,32 +897,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
msg.MessageBlock.Message = Util.StringToBytes1024(im.message);
|
msg.MessageBlock.Message = Util.StringToBytes1024(im.message);
|
||||||
msg.MessageBlock.BinaryBucket = im.binaryBucket;
|
msg.MessageBlock.BinaryBucket = im.binaryBucket;
|
||||||
|
|
||||||
if (im.message.StartsWith("[grouptest]"))
|
OutPacket(msg, ThrottleOutPacketType.Task);
|
||||||
{ // this block is test code for implementing group IM - delete when group IM is finished
|
|
||||||
IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>();
|
|
||||||
if (eq != null)
|
|
||||||
{
|
|
||||||
im.dialog = 17;
|
|
||||||
|
|
||||||
//eq.ChatterboxInvitation(
|
|
||||||
// new UUID("00000000-68f9-1111-024e-222222111123"),
|
|
||||||
// "OpenSimulator Testing", im.fromAgentID, im.message, im.toAgentID, im.fromAgentName, im.dialog, 0,
|
|
||||||
// false, 0, new Vector3(), 1, im.imSessionID, im.fromGroup, im.binaryBucket);
|
|
||||||
|
|
||||||
eq.ChatterboxInvitation(
|
|
||||||
new UUID("00000000-68f9-1111-024e-222222111123"),
|
|
||||||
"OpenSimulator Testing", new UUID(im.fromAgentID), im.message, new UUID(im.toAgentID), im.fromAgentName, im.dialog, 0,
|
|
||||||
false, 0, new Vector3(), 1, new UUID(im.imSessionID), im.fromGroup, Util.StringToBytes256("OpenSimulator Testing"));
|
|
||||||
|
|
||||||
eq.ChatterBoxSessionAgentListUpdates(
|
|
||||||
new UUID("00000000-68f9-1111-024e-222222111123"),
|
|
||||||
new UUID(im.fromAgentID), new UUID(im.toAgentID), false, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.WriteLine("SendInstantMessage: " + msg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
OutPacket(msg, ThrottleOutPacketType.Task);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,257 +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.Generic;
|
|
||||||
using System.Reflection;
|
|
||||||
using log4net;
|
|
||||||
using Nini.Config;
|
|
||||||
using OpenMetaverse;
|
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
|
||||||
using OpenSim.Region.Framework.Scenes;
|
|
||||||
|
|
||||||
using Mono.Addins;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.Avatar.Groups
|
|
||||||
{
|
|
||||||
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsModule")]
|
|
||||||
public class GroupsModule : ISharedRegionModule
|
|
||||||
{
|
|
||||||
private static readonly ILog m_log =
|
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
private Dictionary<UUID, GroupMembershipData> m_GroupMap =
|
|
||||||
new Dictionary<UUID, GroupMembershipData>();
|
|
||||||
|
|
||||||
private Dictionary<UUID, IClientAPI> m_ClientMap =
|
|
||||||
new Dictionary<UUID, IClientAPI>();
|
|
||||||
|
|
||||||
private UUID opensimulatorGroupID =
|
|
||||||
new UUID("00000000-68f9-1111-024e-222222111123");
|
|
||||||
|
|
||||||
private List<Scene> m_SceneList = new List<Scene>();
|
|
||||||
|
|
||||||
private static GroupMembershipData osGroup =
|
|
||||||
new GroupMembershipData();
|
|
||||||
|
|
||||||
private bool m_Enabled = false;
|
|
||||||
|
|
||||||
#region ISharedRegionModule Members
|
|
||||||
|
|
||||||
public void Initialise(IConfigSource config)
|
|
||||||
{
|
|
||||||
IConfig groupsConfig = config.Configs["Groups"];
|
|
||||||
|
|
||||||
if (groupsConfig == null)
|
|
||||||
{
|
|
||||||
m_log.Info("[GROUPS]: No configuration found. Using defaults");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_Enabled = groupsConfig.GetBoolean("Enabled", false);
|
|
||||||
if (!m_Enabled)
|
|
||||||
{
|
|
||||||
m_log.Info("[GROUPS]: Groups disabled in configuration");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (groupsConfig.GetString("Module", "Default") != "Default")
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddRegion(Scene scene)
|
|
||||||
{
|
|
||||||
if (!m_Enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lock (m_SceneList)
|
|
||||||
{
|
|
||||||
if (!m_SceneList.Contains(scene))
|
|
||||||
{
|
|
||||||
if (m_SceneList.Count == 0)
|
|
||||||
{
|
|
||||||
osGroup.GroupID = opensimulatorGroupID;
|
|
||||||
osGroup.GroupName = "OpenSimulator Testing";
|
|
||||||
osGroup.GroupPowers =
|
|
||||||
(uint)(GroupPowers.AllowLandmark |
|
|
||||||
GroupPowers.AllowSetHome);
|
|
||||||
m_GroupMap[opensimulatorGroupID] = osGroup;
|
|
||||||
}
|
|
||||||
m_SceneList.Add(scene);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
scene.EventManager.OnNewClient += OnNewClient;
|
|
||||||
scene.EventManager.OnClientClosed += OnClientClosed;
|
|
||||||
// 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()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Close()
|
|
||||||
{
|
|
||||||
if (!m_Enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// m_log.Debug("[GROUPS]: Shutting down group module.");
|
|
||||||
|
|
||||||
lock (m_ClientMap)
|
|
||||||
{
|
|
||||||
m_ClientMap.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
lock (m_GroupMap)
|
|
||||||
{
|
|
||||||
m_GroupMap.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Name
|
|
||||||
{
|
|
||||||
get { return "GroupsModule"; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Type ReplaceableInterface
|
|
||||||
{
|
|
||||||
get { return null; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private void OnNewClient(IClientAPI client)
|
|
||||||
{
|
|
||||||
// Subscribe to instant messages
|
|
||||||
// client.OnInstantMessage += OnInstantMessage;
|
|
||||||
client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest;
|
|
||||||
client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest;
|
|
||||||
lock (m_ClientMap)
|
|
||||||
{
|
|
||||||
if (!m_ClientMap.ContainsKey(client.AgentId))
|
|
||||||
{
|
|
||||||
m_ClientMap.Add(client.AgentId, client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GroupMembershipData[] updateGroups = new GroupMembershipData[1];
|
|
||||||
updateGroups[0] = osGroup;
|
|
||||||
|
|
||||||
client.SendGroupMembership(updateGroups);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnAgentDataUpdateRequest(IClientAPI remoteClient,
|
|
||||||
UUID AgentID, UUID SessionID)
|
|
||||||
{
|
|
||||||
UUID ActiveGroupID;
|
|
||||||
string ActiveGroupName;
|
|
||||||
ulong ActiveGroupPowers;
|
|
||||||
|
|
||||||
string firstname = remoteClient.FirstName;
|
|
||||||
string lastname = remoteClient.LastName;
|
|
||||||
|
|
||||||
string ActiveGroupTitle = "I IZ N0T";
|
|
||||||
|
|
||||||
ActiveGroupID = osGroup.GroupID;
|
|
||||||
ActiveGroupName = osGroup.GroupName;
|
|
||||||
ActiveGroupPowers = osGroup.GroupPowers;
|
|
||||||
|
|
||||||
remoteClient.SendAgentDataUpdate(AgentID, ActiveGroupID, firstname,
|
|
||||||
lastname, ActiveGroupPowers, ActiveGroupName,
|
|
||||||
ActiveGroupTitle);
|
|
||||||
}
|
|
||||||
|
|
||||||
// private void OnInstantMessage(IClientAPI client, GridInstantMessage im)
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private void OnGridInstantMessage(GridInstantMessage msg)
|
|
||||||
// {
|
|
||||||
// // Trigger the above event handler
|
|
||||||
// OnInstantMessage(null, msg);
|
|
||||||
// }
|
|
||||||
|
|
||||||
private void HandleUUIDGroupNameRequest(UUID id,IClientAPI remote_client)
|
|
||||||
{
|
|
||||||
string groupnamereply = "Unknown";
|
|
||||||
UUID groupUUID = UUID.Zero;
|
|
||||||
|
|
||||||
lock (m_GroupMap)
|
|
||||||
{
|
|
||||||
if (m_GroupMap.ContainsKey(id))
|
|
||||||
{
|
|
||||||
GroupMembershipData grp = m_GroupMap[id];
|
|
||||||
groupnamereply = grp.GroupName;
|
|
||||||
groupUUID = grp.GroupID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
remote_client.SendGroupNameReply(groupUUID, groupnamereply);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnClientClosed(UUID agentID, Scene scene)
|
|
||||||
{
|
|
||||||
lock (m_ClientMap)
|
|
||||||
{
|
|
||||||
if (m_ClientMap.ContainsKey(agentID))
|
|
||||||
{
|
|
||||||
// IClientAPI cli = m_ClientMap[agentID];
|
|
||||||
// if (cli != null)
|
|
||||||
// {
|
|
||||||
// //m_log.Info("[GROUPS]: Removing all reference to groups for " + cli.Name);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// //m_log.Info("[GROUPS]: Removing all reference to groups for " + agentID.ToString());
|
|
||||||
// }
|
|
||||||
m_ClientMap.Remove(agentID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -150,6 +150,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
client.OnTeleportHomeRequest += TriggerTeleportHome;
|
client.OnTeleportHomeRequest += TriggerTeleportHome;
|
||||||
client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
|
client.OnTeleportLandmarkRequest += RequestTeleportLandmark;
|
||||||
|
client.OnTeleportCancel += TeleportCancel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Close() {}
|
public virtual void Close() {}
|
||||||
|
@ -993,6 +994,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
return neighbourRegion;
|
return neighbourRegion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void TeleportCancel(IClientAPI remoteClient)
|
||||||
|
{
|
||||||
|
m_entityTransferStateMachine.ResetFromTransit(remoteClient.AgentId);
|
||||||
|
}
|
||||||
|
|
||||||
public bool Cross(ScenePresence agent, bool isFlying)
|
public bool Cross(ScenePresence agent, bool isFlying)
|
||||||
{
|
{
|
||||||
uint x;
|
uint x;
|
||||||
|
|
|
@ -42,6 +42,7 @@ using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using Mono.Addins;
|
using Mono.Addins;
|
||||||
|
using Amib.Threading;
|
||||||
|
|
||||||
/*****************************************************
|
/*****************************************************
|
||||||
*
|
*
|
||||||
|
@ -102,6 +103,7 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
private Dictionary<UUID, HttpRequestClass> m_pendingRequests;
|
private Dictionary<UUID, HttpRequestClass> m_pendingRequests;
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
// private Queue<HttpRequestClass> rpcQueue = new Queue<HttpRequestClass>();
|
// private Queue<HttpRequestClass> rpcQueue = new Queue<HttpRequestClass>();
|
||||||
|
public static SmartThreadPool ThreadPool = null;
|
||||||
|
|
||||||
public HttpRequestModule()
|
public HttpRequestModule()
|
||||||
{
|
{
|
||||||
|
@ -279,7 +281,30 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
m_proxyurl = config.Configs["Startup"].GetString("HttpProxy");
|
m_proxyurl = config.Configs["Startup"].GetString("HttpProxy");
|
||||||
m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions");
|
m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions");
|
||||||
|
|
||||||
|
int maxThreads = 50;
|
||||||
|
|
||||||
|
IConfig httpConfig = config.Configs["HttpRequestModule"];
|
||||||
|
if (httpConfig != null)
|
||||||
|
{
|
||||||
|
maxThreads = httpConfig.GetInt("MaxPoolThreads", maxThreads);
|
||||||
|
}
|
||||||
|
|
||||||
m_pendingRequests = new Dictionary<UUID, HttpRequestClass>();
|
m_pendingRequests = new Dictionary<UUID, HttpRequestClass>();
|
||||||
|
|
||||||
|
// First instance sets this up for all sims
|
||||||
|
if (ThreadPool == null)
|
||||||
|
{
|
||||||
|
STPStartInfo startInfo = new STPStartInfo();
|
||||||
|
startInfo.IdleTimeout = 20000;
|
||||||
|
startInfo.MaxWorkerThreads = maxThreads;
|
||||||
|
startInfo.MinWorkerThreads = 5;
|
||||||
|
startInfo.ThreadPriority = ThreadPriority.BelowNormal;
|
||||||
|
startInfo.StartSuspended = true;
|
||||||
|
|
||||||
|
ThreadPool = new SmartThreadPool(startInfo);
|
||||||
|
|
||||||
|
ThreadPool.Start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddRegion(Scene scene)
|
public void AddRegion(Scene scene)
|
||||||
|
@ -340,7 +365,7 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
public string HttpMIMEType = "text/plain;charset=utf-8";
|
public string HttpMIMEType = "text/plain;charset=utf-8";
|
||||||
public int HttpTimeout;
|
public int HttpTimeout;
|
||||||
public bool HttpVerifyCert = true;
|
public bool HttpVerifyCert = true;
|
||||||
private Thread httpThread;
|
public IWorkItemResult WorkItem = null;
|
||||||
|
|
||||||
// Request info
|
// Request info
|
||||||
private UUID _itemID;
|
private UUID _itemID;
|
||||||
|
@ -374,12 +399,16 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
|
|
||||||
public void Process()
|
public void Process()
|
||||||
{
|
{
|
||||||
httpThread = new Thread(SendRequest);
|
|
||||||
httpThread.Name = "HttpRequestThread";
|
|
||||||
httpThread.Priority = ThreadPriority.BelowNormal;
|
|
||||||
httpThread.IsBackground = true;
|
|
||||||
_finished = false;
|
_finished = false;
|
||||||
httpThread.Start();
|
|
||||||
|
lock (HttpRequestModule.ThreadPool)
|
||||||
|
WorkItem = HttpRequestModule.ThreadPool.QueueWorkItem(new WorkItemCallback(StpSendWrapper), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private object StpSendWrapper(object o)
|
||||||
|
{
|
||||||
|
SendRequest();
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -409,13 +438,8 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
{
|
{
|
||||||
// We could hijack Connection Group Name to identify
|
// We could hijack Connection Group Name to identify
|
||||||
// a desired security exception. But at the moment we'll use a dummy header instead.
|
// a desired security exception. But at the moment we'll use a dummy header instead.
|
||||||
// Request.ConnectionGroupName = "NoVerify";
|
|
||||||
Request.Headers.Add("NoVerifyCert", "true");
|
Request.Headers.Add("NoVerifyCert", "true");
|
||||||
}
|
}
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// Request.ConnectionGroupName="Verify";
|
|
||||||
// }
|
|
||||||
if (proxyurl != null && proxyurl.Length > 0)
|
if (proxyurl != null && proxyurl.Length > 0)
|
||||||
{
|
{
|
||||||
if (proxyexcepts != null && proxyexcepts.Length > 0)
|
if (proxyexcepts != null && proxyexcepts.Length > 0)
|
||||||
|
@ -485,9 +509,9 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
|
|
||||||
ResponseBody = sb.ToString().Replace("\r", "");
|
ResponseBody = sb.ToString().Replace("\r", "");
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (WebException e)
|
||||||
{
|
{
|
||||||
if (e is WebException && ((WebException)e).Status == WebExceptionStatus.ProtocolError)
|
if (e.Status == WebExceptionStatus.ProtocolError)
|
||||||
{
|
{
|
||||||
HttpWebResponse webRsp = (HttpWebResponse)((WebException)e).Response;
|
HttpWebResponse webRsp = (HttpWebResponse)((WebException)e).Response;
|
||||||
Status = (int)webRsp.StatusCode;
|
Status = (int)webRsp.StatusCode;
|
||||||
|
@ -512,6 +536,10 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
_finished = true;
|
_finished = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
// Don't crash on anything else
|
||||||
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (response != null)
|
if (response != null)
|
||||||
|
@ -525,7 +553,10 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
httpThread.Abort();
|
if (!WorkItem.Cancel())
|
||||||
|
{
|
||||||
|
WorkItem.Abort();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|
|
@ -282,7 +282,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
|
private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
|
||||||
private volatile bool m_backingup;
|
private volatile bool m_backingup;
|
||||||
private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>();
|
private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>();
|
||||||
private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>();
|
private Dictionary<UUID, int> m_groupsWithTargets = new Dictionary<UUID, int>();
|
||||||
|
|
||||||
private bool m_physics_enabled = true;
|
private bool m_physics_enabled = true;
|
||||||
private bool m_scripts_enabled = true;
|
private bool m_scripts_enabled = true;
|
||||||
|
@ -1736,7 +1736,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void AddGroupTarget(SceneObjectGroup grp)
|
public void AddGroupTarget(SceneObjectGroup grp)
|
||||||
{
|
{
|
||||||
lock (m_groupsWithTargets)
|
lock (m_groupsWithTargets)
|
||||||
m_groupsWithTargets[grp.UUID] = grp;
|
m_groupsWithTargets[grp.UUID] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveGroupTarget(SceneObjectGroup grp)
|
public void RemoveGroupTarget(SceneObjectGroup grp)
|
||||||
|
@ -1747,18 +1747,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
private void CheckAtTargets()
|
private void CheckAtTargets()
|
||||||
{
|
{
|
||||||
List<SceneObjectGroup> objs = null;
|
List<UUID> objs = null;
|
||||||
|
|
||||||
lock (m_groupsWithTargets)
|
lock (m_groupsWithTargets)
|
||||||
{
|
{
|
||||||
if (m_groupsWithTargets.Count != 0)
|
if (m_groupsWithTargets.Count != 0)
|
||||||
objs = new List<SceneObjectGroup>(m_groupsWithTargets.Values);
|
objs = new List<UUID>(m_groupsWithTargets.Keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (objs != null)
|
if (objs != null)
|
||||||
{
|
{
|
||||||
foreach (SceneObjectGroup entry in objs)
|
foreach (UUID entry in objs)
|
||||||
entry.checkAtTargets();
|
{
|
||||||
|
SceneObjectGroup grp = GetSceneObjectGroup(entry);
|
||||||
|
if (grp == null)
|
||||||
|
m_groupsWithTargets.Remove(entry);
|
||||||
|
else
|
||||||
|
grp.checkAtTargets();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,14 +79,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
object_rez = 4194304
|
object_rez = 4194304
|
||||||
}
|
}
|
||||||
|
|
||||||
struct scriptPosTarget
|
public struct scriptPosTarget
|
||||||
{
|
{
|
||||||
public Vector3 targetPos;
|
public Vector3 targetPos;
|
||||||
public float tolerance;
|
public float tolerance;
|
||||||
public uint handle;
|
public uint handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct scriptRotTarget
|
public struct scriptRotTarget
|
||||||
{
|
{
|
||||||
public Quaternion targetRot;
|
public Quaternion targetRot;
|
||||||
public float tolerance;
|
public float tolerance;
|
||||||
|
@ -320,8 +320,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
protected SceneObjectPart m_rootPart;
|
protected SceneObjectPart m_rootPart;
|
||||||
// private Dictionary<UUID, scriptEvents> m_scriptEvents = new Dictionary<UUID, scriptEvents>();
|
// private Dictionary<UUID, scriptEvents> m_scriptEvents = new Dictionary<UUID, scriptEvents>();
|
||||||
|
|
||||||
private Dictionary<uint, scriptPosTarget> m_targets = new Dictionary<uint, scriptPosTarget>();
|
private SortedDictionary<uint, scriptPosTarget> m_targets = new SortedDictionary<uint, scriptPosTarget>();
|
||||||
private Dictionary<uint, scriptRotTarget> m_rotTargets = new Dictionary<uint, scriptRotTarget>();
|
private SortedDictionary<uint, scriptRotTarget> m_rotTargets = new SortedDictionary<uint, scriptRotTarget>();
|
||||||
|
|
||||||
|
public SortedDictionary<uint, scriptPosTarget> AtTargets
|
||||||
|
{
|
||||||
|
get { return m_targets; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public SortedDictionary<uint, scriptRotTarget> RotTargets
|
||||||
|
{
|
||||||
|
get { return m_rotTargets; }
|
||||||
|
}
|
||||||
|
|
||||||
private bool m_scriptListens_atTarget;
|
private bool m_scriptListens_atTarget;
|
||||||
private bool m_scriptListens_notAtTarget;
|
private bool m_scriptListens_notAtTarget;
|
||||||
|
@ -4112,6 +4122,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
waypoint.handle = handle;
|
waypoint.handle = handle;
|
||||||
lock (m_rotTargets)
|
lock (m_rotTargets)
|
||||||
{
|
{
|
||||||
|
if (m_rotTargets.Count >= 8)
|
||||||
|
m_rotTargets.Remove(m_rotTargets.ElementAt(0).Key);
|
||||||
m_rotTargets.Add(handle, waypoint);
|
m_rotTargets.Add(handle, waypoint);
|
||||||
}
|
}
|
||||||
m_scene.AddGroupTarget(this);
|
m_scene.AddGroupTarget(this);
|
||||||
|
@ -4137,6 +4149,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
waypoint.handle = handle;
|
waypoint.handle = handle;
|
||||||
lock (m_targets)
|
lock (m_targets)
|
||||||
{
|
{
|
||||||
|
if (m_targets.Count >= 8)
|
||||||
|
m_targets.Remove(m_targets.ElementAt(0).Key);
|
||||||
m_targets.Add(handle, waypoint);
|
m_targets.Add(handle, waypoint);
|
||||||
}
|
}
|
||||||
m_scene.AddGroupTarget(this);
|
m_scene.AddGroupTarget(this);
|
||||||
|
|
|
@ -7782,8 +7782,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
setLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast");
|
setLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast");
|
||||||
|
|
||||||
ScriptSleep(200);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLinkPrimParams(int linknumber, LSL_List rules, string originFunc)
|
private void setLinkPrimParams(int linknumber, LSL_List rules, string originFunc)
|
||||||
|
|
|
@ -1680,6 +1680,7 @@
|
||||||
|
|
||||||
<!-- To allow regions to have mono addins -->
|
<!-- To allow regions to have mono addins -->
|
||||||
<Reference name="Mono.Addins" path="../../../bin/"/>
|
<Reference name="Mono.Addins" path="../../../bin/"/>
|
||||||
|
<Reference name="SmartThreadPool"/>
|
||||||
|
|
||||||
<Files>
|
<Files>
|
||||||
<Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
|
<Match buildAction="EmbeddedResource" path="Resources" pattern="*.addin.xml" recurse="true"/>
|
||||||
|
|
Loading…
Reference in New Issue