/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs |
@@ -49,8 +49,9 @@ |
{ |
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
|
private static Thread cmdHandlerThread; |
private static int cmdHandlerThreadCycleSleepms; |
private static readonly System.Timers.Timer cmdEventTimer = new System.Timers.Timer(); |
private static readonly AutoResetEvent cmdHandlerResetEvent = new AutoResetEvent(false); |
|
/// <summary> |
/// Lock for reading/writing static components of AsyncCommandManager. |
@@ -170,31 +171,28 @@ |
if (!m_SensorRepeat.ContainsKey(m_ScriptEngine)) |
m_SensorRepeat[m_ScriptEngine] = new SensorRepeat(this); |
if (!m_XmlRequest.ContainsKey(m_ScriptEngine)) |
m_XmlRequest[m_ScriptEngine] = new XmlRequest(this); |
|
if (cmdEventTimer.Enabled.Equals(true)) return; |
// Start the timer |
cmdEventTimer.Elapsed += (sender, args) => |
{ |
try |
{ |
DoOneCmdHandlerPass(); |
} |
catch (Exception e) |
{ |
m_log.Error("[ASYNC COMMAND MANAGER]: Exception in command handler pass: ", e); |
} |
}; |
cmdEventTimer.Interval = cmdHandlerThreadCycleSleepms; |
cmdEventTimer.Enabled = true; |
m_XmlRequest[m_ScriptEngine] = new XmlRequest(this); |
|
StartThread(); |
} |
} |
|
private static void StartThread() |
{ |
if (cmdHandlerThread == null) |
{ |
// Start the thread that will be doing the work |
cmdHandlerThread |
= Watchdog.StartThread( |
CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true, true); |
} |
} |
|
private void ReadConfig() |
{ |
// cmdHandlerThreadCycleSleepms = m_ScriptEngine.Config.GetInt("AsyncLLCommandLoopms", 100); |
// TODO: Make this sane again |
cmdHandlerThreadCycleSleepms = 50; |
cmdHandlerThreadCycleSleepms = 100; |
} |
|
~AsyncCommandManager() |
@@ -225,10 +223,10 @@ |
{ |
try |
{ |
Thread.Sleep(cmdHandlerThreadCycleSleepms); |
//Thread.Sleep(cmdHandlerThreadCycleSleepms); |
|
DoOneCmdHandlerPass(); |
|
cmdHandlerResetEvent.WaitOne(-1, false); |
Watchdog.UpdateThread(); |
} |
catch (Exception e) |
@@ -263,6 +261,7 @@ |
m_Dataserver[s].ExpireRequests(); |
} |
} |
cmdHandlerResetEvent.Set(); |
} |
|
/// <summary> |
@@ -442,4 +441,4 @@ |
} |
} |
} |
} |
} |
/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs |
@@ -105,7 +105,7 @@ |
protected AsyncCommandManager AsyncCommands = null; |
protected float m_ScriptDelayFactor = 1.0f; |
protected float m_ScriptDistanceFactor = 1.0f; |
protected float m_MinTimerInterval = 0.05f; |
protected float m_MinTimerInterval = 0.01f; |
protected float m_recoilScaleFactor = 0.0f; |
|
protected DateTime m_timer = DateTime.Now; |
@@ -165,7 +165,7 @@ |
m_ScriptDistanceFactor = |
m_ScriptEngine.Config.GetFloat("ScriptDistanceLimitFactor", 1.0f); |
m_MinTimerInterval = |
m_ScriptEngine.Config.GetFloat("MinTimerInterval", 0.05f); |
m_ScriptEngine.Config.GetFloat("MinTimerInterval", 0.01f); |
m_automaticLinkPermission = |
m_ScriptEngine.Config.GetBoolean("AutomaticLinkPermission", false); |
m_notecardLineReadCharsMax = |
/OpenSim/Services/UserAccountService/UserAccountService.cs |
@@ -612,6 +612,38 @@ |
hair.Flags = (uint)WearableType.Hair; |
m_InventoryService.AddItem(hair); |
|
InventoryFolderBase clothingFolder = m_InventoryService.GetFolderForType(principalID, AssetType.Clothing); |
|
InventoryItemBase shirt = new InventoryItemBase(UUID.Random(), principalID); |
shirt.AssetID = AvatarWearable.DEFAULT_SHIRT_ASSET; |
shirt.Name = "Default Shirt"; |
shirt.CreatorId = principalID.ToString(); |
shirt.AssetType = (int)AssetType.Clothing; |
shirt.InvType = (int)InventoryType.Wearable; |
shirt.Folder = clothingFolder.ID; |
shirt.BasePermissions = (uint)PermissionMask.All; |
shirt.CurrentPermissions = (uint)PermissionMask.All; |
shirt.EveryOnePermissions = (uint)PermissionMask.All; |
shirt.GroupPermissions = (uint)PermissionMask.All; |
shirt.NextPermissions = (uint)PermissionMask.All; |
shirt.Flags = (uint)WearableType.Shirt; |
m_InventoryService.AddItem(shirt); |
|
InventoryItemBase pants = new InventoryItemBase(UUID.Random(), principalID); |
pants.AssetID = AvatarWearable.DEFAULT_PANTS_ASSET; |
pants.Name = "Default Pants"; |
pants.CreatorId = principalID.ToString(); |
pants.AssetType = (int)AssetType.Clothing; |
pants.InvType = (int)InventoryType.Wearable; |
pants.Folder = clothingFolder.ID; |
pants.BasePermissions = (uint)PermissionMask.All; |
pants.CurrentPermissions = (uint)PermissionMask.All; |
pants.EveryOnePermissions = (uint)PermissionMask.All; |
pants.GroupPermissions = (uint)PermissionMask.All; |
pants.NextPermissions = (uint)PermissionMask.All; |
pants.Flags = (uint)WearableType.Pants; |
m_InventoryService.AddItem(pants); |
|
if (m_AvatarService != null) |
{ |
m_log.DebugFormat("[USER ACCOUNT SERVICE]: Creating default avatar entries for {0}", principalID); |
@@ -621,9 +653,11 @@ |
wearables[AvatarWearable.BODY] = new AvatarWearable(shape.ID, shape.AssetID); |
wearables[AvatarWearable.SKIN] = new AvatarWearable(skin.ID, skin.AssetID); |
wearables[AvatarWearable.HAIR] = new AvatarWearable(hair.ID, hair.AssetID); |
wearables[AvatarWearable.SHIRT] = new AvatarWearable(shirt.ID, shirt.AssetID); |
wearables[AvatarWearable.PANTS] = new AvatarWearable(pants.ID, pants.AssetID); |
|
AvatarAppearance ap = new AvatarAppearance(); |
for (int i = 0; i < 4; i++) |
for (int i = 0; i < 6; i++) |
{ |
ap.SetWearable(i, wearables[i]); |
} |