From: Christopher Yeoh <yeohc@au1.ibm.com>
This changeset add the RegionReady module code. The module sends a message on a configurable channel when an oar file has finished loading or if the script engine has emptied its queue for the first time (eg server startup). Config is something like this: [RegionReady] enabled = true channel_notify = -800 The module also knows if there was an error with startup.0.6.3-post-fixes
parent
c754160dee
commit
f70e580f86
|
@ -0,0 +1,146 @@
|
||||||
|
/*
|
||||||
|
* 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 OpenSim 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;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.CoreModules.Scripting.RegionReady
|
||||||
|
{
|
||||||
|
public class RegionReady : IRegionModule
|
||||||
|
{
|
||||||
|
private readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private IConfig m_config = null;
|
||||||
|
private bool m_firstEmptyCompileQueue;
|
||||||
|
private bool m_oarFileLoading;
|
||||||
|
private bool m_lastOarLoadedOk;
|
||||||
|
private int m_channelNotify = -1000;
|
||||||
|
private bool m_enabled = false;
|
||||||
|
|
||||||
|
Scene m_scene = null;
|
||||||
|
|
||||||
|
#region IRegionModule interface
|
||||||
|
|
||||||
|
public void Initialise(Scene scene, IConfigSource config)
|
||||||
|
{
|
||||||
|
m_log.Info("[RegionReady] Initialising");
|
||||||
|
m_scene = scene;
|
||||||
|
m_firstEmptyCompileQueue = true;
|
||||||
|
m_oarFileLoading = false;
|
||||||
|
m_lastOarLoadedOk = true;
|
||||||
|
m_config = config.Configs["RegionReady"];
|
||||||
|
|
||||||
|
if (m_config != null)
|
||||||
|
{
|
||||||
|
m_enabled = m_config.GetBoolean("enabled", false);
|
||||||
|
if (m_enabled)
|
||||||
|
{
|
||||||
|
m_channelNotify = m_config.GetInt("channel_notify", m_channelNotify);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PostInitialise()
|
||||||
|
{
|
||||||
|
if (m_enabled)
|
||||||
|
{
|
||||||
|
m_log.Info("[RegionReady] Enabled");
|
||||||
|
m_scene.EventManager.OnEmptyScriptCompileQueue += new EventManager.EmptyScriptCompileQueue(OnEmptyScriptCompileQueue);
|
||||||
|
m_scene.EventManager.OnOarFileLoaded += new EventManager.OarFileLoaded(OnOarFileLoaded);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.Info("[RegionReady] Disabled");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get { return "Region Ready Module"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
void OnEmptyScriptCompileQueue(int numScriptsFailed, string message)
|
||||||
|
{
|
||||||
|
if (m_firstEmptyCompileQueue || m_oarFileLoading)
|
||||||
|
{
|
||||||
|
m_firstEmptyCompileQueue = false;
|
||||||
|
m_oarFileLoading = false;
|
||||||
|
|
||||||
|
m_scene.Backup();
|
||||||
|
|
||||||
|
OSChatMessage c = new OSChatMessage();
|
||||||
|
c.From = "RegionReady";
|
||||||
|
if (m_lastOarLoadedOk)
|
||||||
|
c.Message = "1,";
|
||||||
|
else
|
||||||
|
c.Message = "0,";
|
||||||
|
c.Channel = m_channelNotify;
|
||||||
|
c.Message += numScriptsFailed.ToString() + "," + message;
|
||||||
|
c.Type = ChatTypeEnum.Region;
|
||||||
|
c.Position = new Vector3(128, 128, 30);
|
||||||
|
c.Sender = null;
|
||||||
|
c.SenderUUID = UUID.Zero;
|
||||||
|
|
||||||
|
m_log.InfoFormat("[RegionReady] Region is ready: \"{0}\" on channel {1}",
|
||||||
|
c.Message, m_channelNotify);
|
||||||
|
m_scene.EventManager.TriggerOnChatBroadcast(this, c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnOarFileLoaded(string message)
|
||||||
|
{
|
||||||
|
m_oarFileLoading = true;
|
||||||
|
if (message==String.Empty)
|
||||||
|
{
|
||||||
|
m_lastOarLoadedOk = true;
|
||||||
|
} else {
|
||||||
|
m_log.InfoFormat("[RegionReady] Oar file load errors: {0}", message);
|
||||||
|
m_lastOarLoadedOk = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1012,3 +1012,14 @@ InterregionComms = "RESTComms"
|
||||||
|
|
||||||
; Density of tree population
|
; Density of tree population
|
||||||
tree_density = 1000.0
|
tree_density = 1000.0
|
||||||
|
|
||||||
|
[RegionReady]
|
||||||
|
; Enable this module to get notified once all items and scripts in the region have been completely loaded and compiled
|
||||||
|
enabled = false
|
||||||
|
|
||||||
|
; Channel on which to signal region readiness through a message
|
||||||
|
; formatted as follows: "{0|1},n,[oar error]"
|
||||||
|
; - the first number indicating whether the OAR file loaded ok (1 == ok, 0 == error)
|
||||||
|
; - the second number indicates how many scrips failed to compile
|
||||||
|
; - "oar error" if supplied, provides the error message from the OAR load
|
||||||
|
channel_notify = -800
|
||||||
|
|
Loading…
Reference in New Issue