Merge branch 'master' of ssh://MyConnection/var/git/opensim
commit
f84da8e642
|
@ -32,7 +32,6 @@ namespace OpenSim.Framework
|
|||
{
|
||||
public delegate void ExpectUserDelegate(AgentCircuitData agent);
|
||||
|
||||
public delegate bool ExpectPrimDelegate(UUID primID, string objData, int XMLMethod);
|
||||
|
||||
public delegate void UpdateNeighbours(List<RegionInfo> neighbours);
|
||||
|
||||
|
@ -55,7 +54,6 @@ namespace OpenSim.Framework
|
|||
public interface IRegionCommsListener
|
||||
{
|
||||
event ExpectUserDelegate OnExpectUser;
|
||||
event ExpectPrimDelegate OnExpectPrim;
|
||||
event GenericCall2 OnExpectChildAgent;
|
||||
event AgentCrossing OnAvatarCrossingIntoRegion;
|
||||
event PrimCrossing OnPrimCrossingIntoRegion;
|
||||
|
|
|
@ -38,6 +38,6 @@ namespace OpenSim.Framework
|
|||
string ExtraToXmlString();
|
||||
void ExtraFromXmlString(string xmlstr);
|
||||
string GetStateSnapshot();
|
||||
void SetState(string xmlstr, UUID regionID);
|
||||
void SetState(string xmlstr, IScene s);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,7 +43,6 @@ namespace OpenSim.Framework
|
|||
private ChildAgentUpdate handlerChildAgentUpdate = null; // OnChildAgentUpdate;
|
||||
private CloseAgentConnection handlerCloseAgentConnection = null; // OnCloseAgentConnection;
|
||||
private GenericCall2 handlerExpectChildAgent = null; // OnExpectChildAgent;
|
||||
private ExpectPrimDelegate handlerExpectPrim = null; // OnExpectPrim;
|
||||
private ExpectUserDelegate handlerExpectUser = null; // OnExpectUser
|
||||
private UpdateNeighbours handlerNeighboursUpdate = null; // OnNeighboursUpdate;
|
||||
private PrimCrossing handlerPrimCrossingIntoRegion = null; // OnPrimCrossingIntoRegion;
|
||||
|
@ -53,7 +52,6 @@ namespace OpenSim.Framework
|
|||
#region IRegionCommsListener Members
|
||||
|
||||
public event ExpectUserDelegate OnExpectUser;
|
||||
public event ExpectPrimDelegate OnExpectPrim;
|
||||
public event GenericCall2 OnExpectChildAgent;
|
||||
public event AgentCrossing OnAvatarCrossingIntoRegion;
|
||||
public event PrimCrossing OnPrimCrossingIntoRegion;
|
||||
|
@ -95,17 +93,6 @@ namespace OpenSim.Framework
|
|||
|
||||
}
|
||||
|
||||
public virtual bool TriggerExpectPrim(UUID primID, string objData, int XMLMethod)
|
||||
{
|
||||
handlerExpectPrim = OnExpectPrim;
|
||||
if (handlerExpectPrim != null)
|
||||
{
|
||||
handlerExpectPrim(primID, objData, XMLMethod);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual bool TriggerChildAgentUpdate(ChildAgentDataUpdate cAgentData)
|
||||
{
|
||||
handlerChildAgentUpdate = OnChildAgentUpdate;
|
||||
|
@ -128,18 +115,6 @@ namespace OpenSim.Framework
|
|||
return false;
|
||||
}
|
||||
|
||||
public virtual bool TriggerExpectPrimCrossing(UUID primID, Vector3 position,
|
||||
bool isPhysical)
|
||||
{
|
||||
handlerPrimCrossingIntoRegion = OnPrimCrossingIntoRegion;
|
||||
if (handlerPrimCrossingIntoRegion != null)
|
||||
{
|
||||
handlerPrimCrossingIntoRegion(primID, position, isPhysical);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual bool TriggerAcknowledgeAgentCrossed(UUID agentID)
|
||||
{
|
||||
handlerAcknowledgeAgentCrossed = OnAcknowledgeAgentCrossed;
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace OpenSim
|
|||
{
|
||||
public class VersionInfo
|
||||
{
|
||||
private const string VERSION_NUMBER = "0.6.8";
|
||||
private const string VERSION_NUMBER = "0.6.9";
|
||||
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
||||
|
||||
public enum Flavour
|
||||
|
|
|
@ -348,9 +348,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
|
||||
UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_scene.CommsManager);
|
||||
if (UUID.Zero != ospResolvedId)
|
||||
{
|
||||
item.CreatorIdAsUuid = ospResolvedId;
|
||||
|
||||
// XXX: For now, don't preserve the OSPA in the creator id (which actually gets persisted to the
|
||||
// database). Instead, replace with the UUID that we found.
|
||||
item.CreatorId = ospResolvedId.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
item.CreatorIdAsUuid = m_userInfo.UserProfile.ID;
|
||||
}
|
||||
|
||||
item.Owner = m_userInfo.UserProfile.ID;
|
||||
|
||||
|
|
|
@ -280,7 +280,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
|||
string savePath = (cmdparams.Length > 6 ? cmdparams[6] : DEFAULT_INV_BACKUP_FILENAME);
|
||||
|
||||
m_log.InfoFormat(
|
||||
"[INVENTORY ARCHIVER]: Saving archive {0} from inventory path {1} for {2} {3}",
|
||||
"[INVENTORY ARCHIVER]: Saving archive {0} using inventory path {1} for {2} {3}",
|
||||
savePath, invPath, firstName, lastName);
|
||||
|
||||
Guid id = Guid.NewGuid();
|
||||
|
|
|
@ -259,9 +259,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
|||
= InventoryArchiveUtils.FindItemByPath(scene.InventoryService, userInfo.UserProfile.ID, item1Name);
|
||||
|
||||
Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1");
|
||||
|
||||
// We have to disable this check since loaded items that did find users via OSPA resolution are now only storing the
|
||||
// UUID, not the OSPA itself.
|
||||
// Assert.That(
|
||||
// foundItem1.CreatorId, Is.EqualTo(item1.CreatorId),
|
||||
// "Loaded item non-uuid creator doesn't match original");
|
||||
Assert.That(
|
||||
foundItem1.CreatorId, Is.EqualTo(item1.CreatorId),
|
||||
foundItem1.CreatorId, Is.EqualTo(userItemCreatorUuid.ToString()),
|
||||
"Loaded item non-uuid creator doesn't match original");
|
||||
|
||||
Assert.That(
|
||||
foundItem1.CreatorIdAsUuid, Is.EqualTo(userItemCreatorUuid),
|
||||
"Loaded item uuid creator doesn't match original");
|
||||
|
|
|
@ -263,8 +263,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
|||
{
|
||||
// We need to make a local copy of the object
|
||||
ISceneObject sogClone = sog.CloneForNewScene();
|
||||
sogClone.SetState(sog.GetStateSnapshot(),
|
||||
s.RegionInfo.RegionID);
|
||||
sogClone.SetState(sog.GetStateSnapshot(), s);
|
||||
return s.IncomingCreateObject(sogClone);
|
||||
}
|
||||
else
|
||||
|
@ -294,15 +293,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
|||
|
||||
#region Misc
|
||||
|
||||
public UUID GetRegionID(ulong regionhandle)
|
||||
public Scene GetScene(ulong regionhandle)
|
||||
{
|
||||
foreach (Scene s in m_sceneList)
|
||||
{
|
||||
if (s.RegionInfo.RegionHandle == regionhandle)
|
||||
return s.RegionInfo.RegionID;
|
||||
return s;
|
||||
}
|
||||
// ? weird. should not happen
|
||||
return m_sceneList[0].RegionInfo.RegionID;
|
||||
return m_sceneList[0];
|
||||
}
|
||||
|
||||
public bool IsLocalRegion(ulong regionhandle)
|
||||
|
|
|
@ -641,7 +641,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
|||
if (args["extra"] != null)
|
||||
extraStr = args["extra"].AsString();
|
||||
|
||||
UUID regionID = m_localBackend.GetRegionID(regionhandle);
|
||||
IScene s = m_localBackend.GetScene(regionhandle);
|
||||
SceneObjectGroup sog = null;
|
||||
try
|
||||
{
|
||||
|
@ -663,7 +663,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
|||
{
|
||||
try
|
||||
{
|
||||
sog.SetState(stateXmlStr, regionID);
|
||||
sog.SetState(stateXmlStr, s);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -695,8 +695,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion
|
|||
if (args["itemid"] != null)
|
||||
itemID = args["itemid"].AsUUID();
|
||||
|
||||
//UUID regionID = m_localBackend.GetRegionID(regionhandle);
|
||||
|
||||
// This is the meaning of PUT object
|
||||
bool result = m_localBackend.SendCreateObject(regionhandle, userID, itemID);
|
||||
|
||||
|
|
|
@ -184,12 +184,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// <returns></returns>
|
||||
List<UUID> GetInventoryList();
|
||||
|
||||
/// <summary>
|
||||
/// Get the names of the assemblies associated with scripts in this inventory.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
string[] GetScriptAssemblies();
|
||||
|
||||
/// <summary>
|
||||
/// Get the xml representing the saved states of scripts in this inventory.
|
||||
/// </summary>
|
||||
|
@ -197,7 +191,5 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
/// A <see cref="Dictionary`2"/>
|
||||
/// </returns>
|
||||
Dictionary<UUID, string> GetScriptStates();
|
||||
|
||||
bool CanBeDeleted();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,9 +34,8 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
{
|
||||
string ScriptEngineName { get; }
|
||||
|
||||
string GetAssemblyName(UUID itemID);
|
||||
string GetXMLState(UUID itemID);
|
||||
bool CanBeDeleted(UUID itemID);
|
||||
void SetXMLState(UUID itemID, string xml);
|
||||
|
||||
bool PostScriptEvent(UUID itemID, string name, Object[] args);
|
||||
bool PostObjectEvent(UUID itemID, string name, Object[] args);
|
||||
|
|
|
@ -131,11 +131,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (left > 0)
|
||||
{
|
||||
x = m_inventoryDeletes.Dequeue();
|
||||
if (!x.objectGroup.CanBeDeleted())
|
||||
{
|
||||
m_inventoryDeletes.Enqueue(x);
|
||||
return true;
|
||||
}
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[SCENE]: Sending object to user's inventory, {0} item(s) remaining.", left);
|
||||
|
|
|
@ -387,6 +387,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
get { return StatsReporter.getLastReportedSimFPS(); }
|
||||
}
|
||||
|
||||
public float[] SimulatorStats
|
||||
{
|
||||
get { return StatsReporter.getLastReportedSimStats(); }
|
||||
}
|
||||
|
||||
public string DefaultScriptEngine
|
||||
{
|
||||
|
@ -618,7 +623,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
startupConfig.GetLong("MaximumTimeBeforePersistenceConsidered", DEFAULT_MAX_TIME_FOR_PERSISTENCE);
|
||||
m_persistAfter *= 10000000;
|
||||
|
||||
m_defaultScriptEngine = startupConfig.GetString("DefaultScriptEngine", "DotNetEngine");
|
||||
m_defaultScriptEngine = startupConfig.GetString("DefaultScriptEngine", "XEngine");
|
||||
|
||||
IConfig packetConfig = m_config.Configs["PacketPool"];
|
||||
if (packetConfig != null)
|
||||
|
@ -2381,103 +2386,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return successYN;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle a scene object that is crossing into this region from another.
|
||||
/// NOTE: Unused as of 2009-02-09. Soon to be deleted.
|
||||
/// </summary>
|
||||
/// <param name="regionHandle"></param>
|
||||
/// <param name="primID"></param>
|
||||
/// <param name="objXMLData"></param>
|
||||
/// <param name="XMLMethod"></param>
|
||||
/// <returns></returns>
|
||||
public bool IncomingInterRegionPrimGroup(UUID primID, string objXMLData, int XMLMethod)
|
||||
{
|
||||
if (XMLMethod == 0)
|
||||
{
|
||||
m_log.DebugFormat("[INTERREGION]: A new prim {0} arrived from a neighbor", primID);
|
||||
SceneObjectGroup sceneObject = m_serialiser.DeserializeGroupFromXml2(objXMLData);
|
||||
if (sceneObject.IsAttachment)
|
||||
sceneObject.RootPart.ObjectFlags |= (uint)PrimFlags.Phantom;
|
||||
|
||||
return AddSceneObject(sceneObject);
|
||||
}
|
||||
else if ((XMLMethod == 100) && m_allowScriptCrossings)
|
||||
{
|
||||
m_log.Warn("[INTERREGION]: Prim state data arrived from a neighbor");
|
||||
|
||||
XmlDocument doc = new XmlDocument();
|
||||
doc.LoadXml(objXMLData);
|
||||
|
||||
XmlNodeList rootL = doc.GetElementsByTagName("ScriptData");
|
||||
if (rootL.Count == 1)
|
||||
{
|
||||
XmlNode rootNode = rootL[0];
|
||||
if (rootNode != null)
|
||||
{
|
||||
XmlNodeList partL = rootNode.ChildNodes;
|
||||
|
||||
foreach (XmlNode part in partL)
|
||||
{
|
||||
XmlNodeList nodeL = part.ChildNodes;
|
||||
|
||||
switch (part.Name)
|
||||
{
|
||||
case "Assemblies":
|
||||
foreach (XmlNode asm in nodeL)
|
||||
{
|
||||
string fn = asm.Attributes.GetNamedItem("Filename").Value;
|
||||
|
||||
Byte[] filedata = Convert.FromBase64String(asm.InnerText);
|
||||
string path = Path.Combine("ScriptEngines", RegionInfo.RegionID.ToString());
|
||||
path = Path.Combine(path, fn);
|
||||
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
FileStream fs = File.Create(path);
|
||||
fs.Write(filedata, 0, filedata.Length);
|
||||
fs.Close();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "ScriptStates":
|
||||
foreach (XmlNode st in nodeL)
|
||||
{
|
||||
string id = st.Attributes.GetNamedItem("UUID").Value;
|
||||
UUID uuid = new UUID(id);
|
||||
XmlNode state = st.ChildNodes[0];
|
||||
|
||||
XmlDocument sdoc = new XmlDocument();
|
||||
XmlNode sxmlnode = sdoc.CreateNode(
|
||||
XmlNodeType.XmlDeclaration,
|
||||
"", "");
|
||||
sdoc.AppendChild(sxmlnode);
|
||||
|
||||
XmlNode newnode = sdoc.ImportNode(state, true);
|
||||
sdoc.AppendChild(newnode);
|
||||
|
||||
string spath = Path.Combine("ScriptEngines", RegionInfo.RegionID.ToString());
|
||||
spath = Path.Combine(spath, uuid.ToString());
|
||||
FileStream sfs = File.Create(spath + ".state");
|
||||
ASCIIEncoding enc = new ASCIIEncoding();
|
||||
Byte[] buf = enc.GetBytes(sdoc.InnerXml);
|
||||
sfs.Write(buf, 0, buf.Length);
|
||||
sfs.Close();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SceneObjectPart RootPrim = GetSceneObjectPart(primID);
|
||||
RootPrim.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool IncomingCreateObject(ISceneObject sog)
|
||||
{
|
||||
//m_log.Debug(" >>> IncomingCreateObject <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted);
|
||||
|
@ -3350,7 +3258,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_sceneGridService.OnCloseAgentConnection += IncomingCloseAgent;
|
||||
//m_eventManager.OnRegionUp += OtherRegionUp;
|
||||
//m_sceneGridService.OnChildAgentUpdate += IncomingChildAgentDataUpdate;
|
||||
m_sceneGridService.OnExpectPrim += IncomingInterRegionPrimGroup;
|
||||
//m_sceneGridService.OnRemoveKnownRegionFromAvatar += HandleRemoveKnownRegionsFromAvatar;
|
||||
m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid;
|
||||
m_sceneGridService.KiPrimitive += SendKillObject;
|
||||
|
@ -3374,7 +3281,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_sceneGridService.KiPrimitive -= SendKillObject;
|
||||
m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid;
|
||||
//m_sceneGridService.OnRemoveKnownRegionFromAvatar -= HandleRemoveKnownRegionsFromAvatar;
|
||||
m_sceneGridService.OnExpectPrim -= IncomingInterRegionPrimGroup;
|
||||
//m_sceneGridService.OnChildAgentUpdate -= IncomingChildAgentDataUpdate;
|
||||
//m_eventManager.OnRegionUp -= OtherRegionUp;
|
||||
m_sceneGridService.OnExpectUser -= HandleNewUserConnection;
|
||||
|
|
|
@ -85,7 +85,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <summary>
|
||||
/// A Prim will arrive shortly
|
||||
/// </summary>
|
||||
public event ExpectPrimDelegate OnExpectPrim;
|
||||
public event CloseAgentConnection OnCloseAgentConnection;
|
||||
|
||||
/// <summary>
|
||||
|
@ -116,7 +115,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
private AgentCrossing handlerAvatarCrossingIntoRegion = null; // OnAvatarCrossingIntoRegion;
|
||||
private ExpectUserDelegate handlerExpectUser = null; // OnExpectUser;
|
||||
private ExpectPrimDelegate handlerExpectPrim = null; // OnExpectPrim;
|
||||
private CloseAgentConnection handlerCloseAgentConnection = null; // OnCloseAgentConnection;
|
||||
private PrimCrossing handlerPrimCrossingIntoRegion = null; // OnPrimCrossingIntoRegion;
|
||||
//private RegionUp handlerRegionUp = null; // OnRegionUp;
|
||||
|
@ -147,30 +145,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <exception cref="System.Exception">Thrown if region registration fails.</exception>
|
||||
public void RegisterRegion(IInterregionCommsOut comms_out, RegionInfo regionInfos)
|
||||
{
|
||||
//m_interregionCommsOut = comms_out;
|
||||
|
||||
//m_regionInfo = regionInfos;
|
||||
//m_commsProvider.GridService.gdebugRegionName = regionInfos.RegionName;
|
||||
//regionCommsHost = m_commsProvider.GridService.RegisterRegion(m_regionInfo);
|
||||
|
||||
//if (regionCommsHost != null)
|
||||
//{
|
||||
// //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: registered with gridservice and got" + regionCommsHost.ToString());
|
||||
|
||||
// regionCommsHost.debugRegionName = regionInfos.RegionName;
|
||||
// regionCommsHost.OnExpectPrim += IncomingPrimCrossing;
|
||||
// regionCommsHost.OnExpectUser += NewUserConnection;
|
||||
// regionCommsHost.OnAvatarCrossingIntoRegion += AgentCrossing;
|
||||
// regionCommsHost.OnCloseAgentConnection += CloseConnection;
|
||||
// regionCommsHost.OnRegionUp += newRegionUp;
|
||||
// regionCommsHost.OnChildAgentUpdate += ChildAgentUpdate;
|
||||
// regionCommsHost.OnLogOffUser += GridLogOffUser;
|
||||
// regionCommsHost.OnGetLandData += FetchLandData;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// //m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: registered with gridservice and got null");
|
||||
//}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -179,31 +153,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// </summary>
|
||||
public void Close()
|
||||
{
|
||||
|
||||
//if (regionCommsHost != null)
|
||||
//{
|
||||
// regionCommsHost.OnLogOffUser -= GridLogOffUser;
|
||||
// regionCommsHost.OnChildAgentUpdate -= ChildAgentUpdate;
|
||||
// regionCommsHost.OnRegionUp -= newRegionUp;
|
||||
// regionCommsHost.OnExpectUser -= NewUserConnection;
|
||||
// regionCommsHost.OnExpectPrim -= IncomingPrimCrossing;
|
||||
// regionCommsHost.OnAvatarCrossingIntoRegion -= AgentCrossing;
|
||||
// regionCommsHost.OnCloseAgentConnection -= CloseConnection;
|
||||
// regionCommsHost.OnGetLandData -= FetchLandData;
|
||||
|
||||
// try
|
||||
// {
|
||||
// m_commsProvider.GridService.DeregisterRegion(m_regionInfo);
|
||||
// }
|
||||
// catch (Exception e)
|
||||
// {
|
||||
// m_log.ErrorFormat(
|
||||
// "[GRID]: Deregistration of region {0} from the grid failed - {1}. Continuing",
|
||||
// m_regionInfo.RegionName, e);
|
||||
// }
|
||||
|
||||
// regionCommsHost = null;
|
||||
//}
|
||||
}
|
||||
|
||||
#region CommsManager Event handlers
|
||||
|
@ -263,27 +212,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// We have a new prim from a neighbor
|
||||
/// </summary>
|
||||
/// <param name="primID">unique ID for the primative</param>
|
||||
/// <param name="objXMLData">XML2 encoded data of the primative</param>
|
||||
/// <param name="XMLMethod">An Int that represents the version of the XMLMethod</param>
|
||||
/// <returns>True if the prim was accepted, false if it was not</returns>
|
||||
protected bool IncomingPrimCrossing(UUID primID, String objXMLData, int XMLMethod)
|
||||
{
|
||||
handlerExpectPrim = OnExpectPrim;
|
||||
if (handlerExpectPrim != null)
|
||||
{
|
||||
return handlerExpectPrim(primID, objXMLData, XMLMethod);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void PrimCrossing(UUID primID, Vector3 position, bool isPhysical)
|
||||
{
|
||||
handlerPrimCrossingIntoRegion = OnPrimCrossingIntoRegion;
|
||||
|
|
|
@ -309,26 +309,15 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public string GetStateSnapshot()
|
||||
{
|
||||
//m_log.Debug(" >>> GetStateSnapshot <<<");
|
||||
|
||||
List<string> assemblies = new List<string>();
|
||||
Dictionary<UUID, string> states = new Dictionary<UUID, string>();
|
||||
|
||||
foreach (SceneObjectPart part in m_parts.Values)
|
||||
{
|
||||
foreach (string a in part.Inventory.GetScriptAssemblies())
|
||||
{
|
||||
if (a != "" && !assemblies.Contains(a))
|
||||
assemblies.Add(a);
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<UUID, string> s in part.Inventory.GetScriptStates())
|
||||
{
|
||||
states[s.Key] = s.Value;
|
||||
}
|
||||
}
|
||||
|
||||
if (states.Count < 1 || assemblies.Count < 1)
|
||||
if (states.Count < 1)
|
||||
return "";
|
||||
|
||||
XmlDocument xmldoc = new XmlDocument();
|
||||
|
@ -342,104 +331,49 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
xmldoc.AppendChild(rootElement);
|
||||
|
||||
XmlElement wrapper = xmldoc.CreateElement("", "Assemblies",
|
||||
"");
|
||||
|
||||
rootElement.AppendChild(wrapper);
|
||||
|
||||
foreach (string assembly in assemblies)
|
||||
{
|
||||
string fn = Path.GetFileName(assembly);
|
||||
if (fn == String.Empty)
|
||||
continue;
|
||||
|
||||
String filedata = String.Empty;
|
||||
|
||||
if (File.Exists(assembly+".text"))
|
||||
{
|
||||
FileInfo tfi = new FileInfo(assembly+".text");
|
||||
|
||||
if (tfi == null)
|
||||
continue;
|
||||
|
||||
Byte[] tdata = new Byte[tfi.Length];
|
||||
|
||||
try
|
||||
{
|
||||
FileStream tfs = File.Open(assembly+".text", FileMode.Open, FileAccess.Read);
|
||||
tfs.Read(tdata, 0, tdata.Length);
|
||||
tfs.Close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.DebugFormat("[SOG]: Unable to open script textfile {0}, reason: {1}", assembly+".text", e.Message);
|
||||
}
|
||||
|
||||
filedata = new System.Text.ASCIIEncoding().GetString(tdata);
|
||||
}
|
||||
else
|
||||
{
|
||||
FileInfo fi = new FileInfo(assembly);
|
||||
|
||||
if (fi == null)
|
||||
continue;
|
||||
|
||||
Byte[] data = new Byte[fi.Length];
|
||||
|
||||
try
|
||||
{
|
||||
FileStream fs = File.Open(assembly, FileMode.Open, FileAccess.Read);
|
||||
fs.Read(data, 0, data.Length);
|
||||
fs.Close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.DebugFormat("[SOG]: Unable to open script assembly {0}, reason: {1}", assembly, e.Message);
|
||||
}
|
||||
|
||||
filedata = System.Convert.ToBase64String(data);
|
||||
}
|
||||
XmlElement assemblyData = xmldoc.CreateElement("", "Assembly", "");
|
||||
XmlAttribute assemblyName = xmldoc.CreateAttribute("", "Filename", "");
|
||||
assemblyName.Value = fn;
|
||||
assemblyData.Attributes.Append(assemblyName);
|
||||
|
||||
assemblyData.InnerText = filedata;
|
||||
|
||||
wrapper.AppendChild(assemblyData);
|
||||
}
|
||||
|
||||
wrapper = xmldoc.CreateElement("", "ScriptStates",
|
||||
XmlElement wrapper = xmldoc.CreateElement("", "ScriptStates",
|
||||
"");
|
||||
|
||||
rootElement.AppendChild(wrapper);
|
||||
|
||||
foreach (KeyValuePair<UUID, string> state in states)
|
||||
{
|
||||
XmlElement stateData = xmldoc.CreateElement("", "State", "");
|
||||
|
||||
XmlAttribute stateID = xmldoc.CreateAttribute("", "UUID", "");
|
||||
stateID.Value = state.Key.ToString();
|
||||
stateData.Attributes.Append(stateID);
|
||||
|
||||
XmlDocument sdoc = new XmlDocument();
|
||||
sdoc.LoadXml(state.Value);
|
||||
XmlNodeList rootL = sdoc.GetElementsByTagName("ScriptState");
|
||||
XmlNodeList rootL = sdoc.GetElementsByTagName("State");
|
||||
XmlNode rootNode = rootL[0];
|
||||
|
||||
XmlNode newNode = xmldoc.ImportNode(rootNode, true);
|
||||
stateData.AppendChild(newNode);
|
||||
wrapper.AppendChild(stateData);
|
||||
wrapper.AppendChild(newNode);
|
||||
}
|
||||
|
||||
return xmldoc.InnerXml;
|
||||
}
|
||||
|
||||
public void SetState(string objXMLData, UUID RegionID)
|
||||
public void SetState(string objXMLData, IScene ins)
|
||||
{
|
||||
if (!(ins is Scene))
|
||||
return;
|
||||
|
||||
Scene s = (Scene)ins;
|
||||
|
||||
if (objXMLData == String.Empty)
|
||||
return;
|
||||
|
||||
IScriptModule scriptModule = null;
|
||||
|
||||
foreach (IScriptModule sm in s.RequestModuleInterfaces<IScriptModule>())
|
||||
{
|
||||
if (sm.ScriptEngineName == s.DefaultScriptEngine)
|
||||
scriptModule = sm;
|
||||
else if (scriptModule == null)
|
||||
scriptModule = sm;
|
||||
}
|
||||
|
||||
if (scriptModule == null)
|
||||
return;
|
||||
|
||||
XmlDocument doc = new XmlDocument();
|
||||
try
|
||||
{
|
||||
|
@ -457,69 +391,23 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
XmlNodeList rootL = doc.GetElementsByTagName("ScriptData");
|
||||
if (rootL.Count == 1)
|
||||
if (rootL.Count != 1)
|
||||
return;
|
||||
|
||||
XmlElement rootE = (XmlElement)rootL[0];
|
||||
|
||||
XmlNodeList dataL = rootE.GetElementsByTagName("ScriptStates");
|
||||
if (dataL.Count != 1)
|
||||
return;
|
||||
|
||||
XmlElement dataE = (XmlElement)dataL[0];
|
||||
|
||||
foreach (XmlNode n in dataE.ChildNodes)
|
||||
{
|
||||
XmlNode rootNode = rootL[0];
|
||||
if (rootNode != null)
|
||||
{
|
||||
XmlNodeList partL = rootNode.ChildNodes;
|
||||
XmlElement stateE = (XmlElement)n;
|
||||
UUID itemID = new UUID(stateE.GetAttribute("UUID"));
|
||||
|
||||
foreach (XmlNode part in partL)
|
||||
{
|
||||
XmlNodeList nodeL = part.ChildNodes;
|
||||
|
||||
switch (part.Name)
|
||||
{
|
||||
case "Assemblies":
|
||||
foreach (XmlNode asm in nodeL)
|
||||
{
|
||||
string fn = asm.Attributes.GetNamedItem("Filename").Value;
|
||||
|
||||
Byte[] filedata = Convert.FromBase64String(asm.InnerText);
|
||||
string path = Path.Combine("ScriptEngines", RegionID.ToString());
|
||||
path = Path.Combine(path, fn);
|
||||
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
FileStream fs = File.Create(path);
|
||||
fs.Write(filedata, 0, filedata.Length);
|
||||
fs.Close();
|
||||
|
||||
Byte[] textbytes = new System.Text.ASCIIEncoding().GetBytes(asm.InnerText);
|
||||
fs = File.Create(path+".text");
|
||||
fs.Write(textbytes, 0, textbytes.Length);
|
||||
fs.Close();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "ScriptStates":
|
||||
foreach (XmlNode st in nodeL)
|
||||
{
|
||||
string id = st.Attributes.GetNamedItem("UUID").Value;
|
||||
UUID uuid = new UUID(id);
|
||||
XmlNode state = st.ChildNodes[0];
|
||||
|
||||
XmlDocument sdoc = new XmlDocument();
|
||||
XmlNode sxmlnode = sdoc.CreateNode(
|
||||
XmlNodeType.XmlDeclaration,
|
||||
"", "");
|
||||
sdoc.AppendChild(sxmlnode);
|
||||
|
||||
XmlNode newnode = sdoc.ImportNode(state, true);
|
||||
sdoc.AppendChild(newnode);
|
||||
|
||||
string spath = Path.Combine("ScriptEngines", RegionID.ToString());
|
||||
spath = Path.Combine(spath, uuid.ToString());
|
||||
FileStream sfs = File.Create(spath + ".state");
|
||||
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
|
||||
Byte[] buf = enc.GetBytes(sdoc.InnerXml);
|
||||
sfs.Write(buf, 0, buf.Length);
|
||||
sfs.Close();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
scriptModule.SetXMLState(itemID, n.OuterXml);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3341,17 +3341,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
#endregion
|
||||
|
||||
public bool CanBeDeleted()
|
||||
{
|
||||
foreach (SceneObjectPart part in Children.Values)
|
||||
{
|
||||
if (!part.CanBeDeleted())
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public double GetUpdatePriority(IClientAPI client)
|
||||
{
|
||||
switch (Scene.UpdatePrioritizationScheme)
|
||||
|
|
|
@ -3797,10 +3797,5 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
Inventory.ApplyNextOwnerPermissions();
|
||||
}
|
||||
|
||||
public bool CanBeDeleted()
|
||||
{
|
||||
return Inventory.CanBeDeleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -857,36 +857,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return ret;
|
||||
}
|
||||
|
||||
public string[] GetScriptAssemblies()
|
||||
{
|
||||
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
|
||||
|
||||
List<string> ret = new List<string>();
|
||||
if (engines == null) // No engine at all
|
||||
return new string[0];
|
||||
|
||||
foreach (TaskInventoryItem item in m_items.Values)
|
||||
{
|
||||
if (item.InvType == (int)InventoryType.LSL)
|
||||
{
|
||||
foreach (IScriptModule e in engines)
|
||||
{
|
||||
if (e != null)
|
||||
{
|
||||
string n = e.GetAssemblyName(item.ItemID);
|
||||
if (n != String.Empty)
|
||||
{
|
||||
if (!ret.Contains(n))
|
||||
ret.Add(n);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret.ToArray();
|
||||
}
|
||||
|
||||
public Dictionary<UUID, string> GetScriptStates()
|
||||
{
|
||||
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
|
||||
|
@ -916,30 +886,5 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public bool CanBeDeleted()
|
||||
{
|
||||
if (!ContainsScripts())
|
||||
return true;
|
||||
|
||||
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
|
||||
|
||||
if (engines == null) // No engine at all
|
||||
return true;
|
||||
|
||||
foreach (TaskInventoryItem item in m_items.Values)
|
||||
{
|
||||
if (item.InvType == (int)InventoryType.LSL)
|
||||
{
|
||||
foreach (IScriptModule e in engines)
|
||||
{
|
||||
if (!e.CanBeDeleted(item.ItemID))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,6 +82,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
private int m_fps = 0;
|
||||
// saved last reported value so there is something available for llGetRegionFPS
|
||||
private float lastReportedSimFPS = 0;
|
||||
private float[] lastReportedSimStats = new float[21];
|
||||
private float m_pfps = 0;
|
||||
private int m_agentUpdates = 0;
|
||||
|
||||
|
@ -259,6 +260,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
sb[20].StatID = (uint)Stats.ScriptLinesPerSecond;
|
||||
sb[20].StatValue = m_scriptLinesPerSecond / statsUpdateFactor;
|
||||
|
||||
for (int i = 0; i < 21; i++)
|
||||
{
|
||||
lastReportedSimStats[i] = sb[i].StatValue;
|
||||
}
|
||||
|
||||
SimStats simStats
|
||||
= new SimStats(
|
||||
|
@ -438,6 +444,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
return lastReportedSimFPS;
|
||||
}
|
||||
|
||||
public float[] getLastReportedSimStats()
|
||||
{
|
||||
return lastReportedSimStats;
|
||||
}
|
||||
|
||||
public void AddPacketsStats(int inPackets, int outPackets, int unAckedBytes)
|
||||
{
|
||||
|
|
|
@ -62,7 +62,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
|
|||
|
||||
public void Initialise(IConfigSource config)
|
||||
{
|
||||
m_log.Info("[RegionReady] Initialising");
|
||||
//m_log.Info("[RegionReady] Initialising");
|
||||
|
||||
m_config = config.Configs["RegionReady"];
|
||||
if (m_config != null)
|
||||
|
@ -74,8 +74,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
|
|||
}
|
||||
}
|
||||
|
||||
if (!m_enabled)
|
||||
m_log.Info("[RegionReady] disabled.");
|
||||
// if (!m_enabled)
|
||||
// m_log.Info("[RegionReady] disabled.");
|
||||
}
|
||||
|
||||
public void AddRegion(Scene scene)
|
||||
|
@ -92,7 +92,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
|
|||
m_scene.EventManager.OnEmptyScriptCompileQueue += OnEmptyScriptCompileQueue;
|
||||
m_scene.EventManager.OnOarFileLoaded += OnOarFileLoaded;
|
||||
|
||||
m_log.InfoFormat("[RegionReady]: Enabled for region {0}", scene.RegionInfo.RegionName);
|
||||
m_log.DebugFormat("[RegionReady]: Enabled for region {0}", scene.RegionInfo.RegionName);
|
||||
}
|
||||
|
||||
public void RemoveRegion(Scene scene)
|
||||
|
@ -120,7 +120,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
|
|||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
void OnEmptyScriptCompileQueue(int numScriptsFailed, string message)
|
||||
{
|
||||
|
|
|
@ -96,7 +96,6 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
|
|||
UUID GetDetectID(int idx);
|
||||
void SaveState(string assembly);
|
||||
void DestroyScriptInstance();
|
||||
bool CanBeDeleted();
|
||||
|
||||
IScriptApi GetApi(string name);
|
||||
|
||||
|
|
|
@ -5784,6 +5784,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
return World.SimulatorFPS;
|
||||
}
|
||||
|
||||
|
||||
/* particle system rules should be coming into this routine as doubles, that is
|
||||
rule[0] should be an integer from this list and rule[1] should be the arg
|
||||
|
|
|
@ -1948,5 +1948,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
return key.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Return information regarding various simulator statistics (sim fps, physics fps, time
|
||||
/// dilation, total number of prims, total number of active scripts, script lps, various
|
||||
/// timing data, packets in/out, etc. Basically much the information that's shown in the
|
||||
/// client's Statistics Bar (Ctrl-Shift-1)
|
||||
/// </summary>
|
||||
/// <returns>List of floats</returns>
|
||||
public LSL_List osGetRegionStats()
|
||||
{
|
||||
CheckThreatLevel(ThreatLevel.Moderate, "osGetRegionStats");
|
||||
m_host.AddScriptLPS(1);
|
||||
LSL_List ret = new LSL_List();
|
||||
float[] stats = World.SimulatorStats;
|
||||
|
||||
for (int i = 0; i < 21; i++)
|
||||
{
|
||||
ret.Add(new LSL_Float( stats[i] ));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -162,5 +162,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
|||
|
||||
key osGetMapTexture();
|
||||
key osGetRegionMapTexture(string regionName);
|
||||
LSL_List osGetRegionStats();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -515,6 +515,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
public const string TEXTURE_PLYWOOD = "89556747-24cb-43ed-920b-47caed15465f";
|
||||
public const string TEXTURE_TRANSPARENT = "8dcd4a48-2d37-4909-9f78-f7a9eb4ef903";
|
||||
public const string TEXTURE_MEDIA = "8b5fec65-8d8d-9dc5-cda8-8fdf2716e361";
|
||||
|
||||
// Constants for osGetRegionStats
|
||||
public const int STATS_TIME_DILATION = 0;
|
||||
public const int STATS_SIM_FPS = 1;
|
||||
public const int STATS_PHYSICS_FPS = 2;
|
||||
public const int STATS_AGENT_UPDATES = 3;
|
||||
public const int STATS_ROOT_AGENTS = 4;
|
||||
public const int STATS_CHILD_AGENTS = 5;
|
||||
public const int STATS_TOTAL_PRIMS = 6;
|
||||
public const int STATS_ACTIVE_PRIMS = 7;
|
||||
public const int STATS_FRAME_MS = 8;
|
||||
public const int STATS_NET_MS = 9;
|
||||
public const int STATS_PHYSICS_MS = 10;
|
||||
public const int STATS_IMAGE_MS = 11;
|
||||
public const int STATS_OTHER_MS = 12;
|
||||
public const int STATS_IN_PACKETS_PER_SECOND = 13;
|
||||
public const int STATS_OUT_PACKETS_PER_SECOND = 14;
|
||||
public const int STATS_UNACKED_BYTES = 15;
|
||||
public const int STATS_AGENT_MS = 16;
|
||||
public const int STATS_PENDING_DOWNLOADS = 17;
|
||||
public const int STATS_PENDING_UPLOADS = 18;
|
||||
public const int STATS_ACTIVE_SCRIPTS = 19;
|
||||
public const int STATS_SCRIPT_LPS = 20;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -632,5 +632,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
{
|
||||
return m_OSSL_Functions.osGetRegionMapTexture(regionName);
|
||||
}
|
||||
|
||||
public LSL_List osGetRegionStats()
|
||||
{
|
||||
return m_OSSL_Functions.osGetRegionStats();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1011,10 +1011,5 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
{
|
||||
get { return m_RegionID; }
|
||||
}
|
||||
|
||||
public bool CanBeDeleted()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1245,34 +1245,219 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
}
|
||||
}
|
||||
|
||||
public string GetAssemblyName(UUID itemID)
|
||||
{
|
||||
IScriptInstance instance = GetInstance(itemID);
|
||||
if (instance == null)
|
||||
return "";
|
||||
return instance.GetAssemblyName();
|
||||
}
|
||||
|
||||
public string GetXMLState(UUID itemID)
|
||||
{
|
||||
IScriptInstance instance = GetInstance(itemID);
|
||||
if (instance == null)
|
||||
return "";
|
||||
return instance.GetXMLState();
|
||||
}
|
||||
string xml = instance.GetXMLState();
|
||||
|
||||
public bool CanBeDeleted(UUID itemID)
|
||||
{
|
||||
IScriptInstance instance = GetInstance(itemID);
|
||||
if (instance == null)
|
||||
return true;
|
||||
XmlDocument sdoc = new XmlDocument();
|
||||
sdoc.LoadXml(xml);
|
||||
XmlNodeList rootL = sdoc.GetElementsByTagName("ScriptState");
|
||||
XmlNode rootNode = rootL[0];
|
||||
|
||||
return instance.CanBeDeleted();
|
||||
// Create <State UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
|
||||
XmlDocument doc = new XmlDocument();
|
||||
XmlElement stateData = doc.CreateElement("", "State", "");
|
||||
XmlAttribute stateID = doc.CreateAttribute("", "UUID", "");
|
||||
stateID.Value = itemID.ToString();
|
||||
stateData.Attributes.Append(stateID);
|
||||
XmlAttribute assetID = doc.CreateAttribute("", "Asset", "");
|
||||
assetID.Value = instance.AssetID.ToString();
|
||||
stateData.Attributes.Append(assetID);
|
||||
doc.AppendChild(stateData);
|
||||
|
||||
// Add <ScriptState>...</ScriptState>
|
||||
XmlNode xmlstate = doc.ImportNode(rootNode, true);
|
||||
stateData.AppendChild(xmlstate);
|
||||
|
||||
string assemName = instance.GetAssemblyName();
|
||||
|
||||
string fn = Path.GetFileName(assemName);
|
||||
|
||||
string assem = String.Empty;
|
||||
|
||||
if (File.Exists(assemName + ".text"))
|
||||
{
|
||||
FileInfo tfi = new FileInfo(assemName + ".text");
|
||||
|
||||
if (tfi != null)
|
||||
{
|
||||
Byte[] tdata = new Byte[tfi.Length];
|
||||
|
||||
try
|
||||
{
|
||||
FileStream tfs = File.Open(assemName + ".text",
|
||||
FileMode.Open, FileAccess.Read);
|
||||
tfs.Read(tdata, 0, tdata.Length);
|
||||
tfs.Close();
|
||||
|
||||
assem = new System.Text.ASCIIEncoding().GetString(tdata);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.DebugFormat("[XEngine]: Unable to open script textfile {0}, reason: {1}", assemName+".text", e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FileInfo fi = new FileInfo(assemName);
|
||||
|
||||
if (fi != null)
|
||||
{
|
||||
Byte[] data = new Byte[fi.Length];
|
||||
|
||||
try
|
||||
{
|
||||
FileStream fs = File.Open(assemName, FileMode.Open, FileAccess.Read);
|
||||
fs.Read(data, 0, data.Length);
|
||||
fs.Close();
|
||||
|
||||
assem = System.Convert.ToBase64String(data);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.DebugFormat("[XEngine]: Unable to open script assembly {0}, reason: {1}", assemName, e.Message);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
string map = String.Empty;
|
||||
|
||||
if (File.Exists(fn + ".map"))
|
||||
{
|
||||
FileStream mfs = File.Open(fn + ".map", FileMode.Open, FileAccess.Read);
|
||||
StreamReader msr = new StreamReader(mfs);
|
||||
|
||||
map = msr.ReadToEnd();
|
||||
|
||||
msr.Close();
|
||||
mfs.Close();
|
||||
}
|
||||
|
||||
XmlElement assemblyData = doc.CreateElement("", "Assembly", "");
|
||||
XmlAttribute assemblyName = doc.CreateAttribute("", "Filename", "");
|
||||
|
||||
assemblyName.Value = fn;
|
||||
assemblyData.Attributes.Append(assemblyName);
|
||||
|
||||
assemblyData.InnerText = assem;
|
||||
|
||||
stateData.AppendChild(assemblyData);
|
||||
|
||||
XmlElement mapData = doc.CreateElement("", "LineMap", "");
|
||||
XmlAttribute mapName = doc.CreateAttribute("", "Filename", "");
|
||||
|
||||
mapName.Value = fn + ".map";
|
||||
mapData.Attributes.Append(mapName);
|
||||
|
||||
mapData.InnerText = map;
|
||||
|
||||
stateData.AppendChild(mapData);
|
||||
return doc.InnerXml;
|
||||
}
|
||||
|
||||
private bool ShowScriptSaveResponse(UUID ownerID, UUID assetID, string text, bool compiled)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void SetXMLState(UUID itemID, string xml)
|
||||
{
|
||||
if (xml == String.Empty)
|
||||
return;
|
||||
|
||||
XmlDocument doc = new XmlDocument();
|
||||
|
||||
try
|
||||
{
|
||||
doc.LoadXml(xml);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
m_log.Error("[XEngine]: Exception decoding XML data from region transfer");
|
||||
return;
|
||||
}
|
||||
|
||||
XmlNodeList rootL = doc.GetElementsByTagName("State");
|
||||
if (rootL.Count < 1)
|
||||
return;
|
||||
|
||||
XmlElement rootE = (XmlElement)rootL[0];
|
||||
|
||||
if (rootE.GetAttribute("UUID") != itemID.ToString())
|
||||
return;
|
||||
|
||||
string assetID = rootE.GetAttribute("Asset");
|
||||
|
||||
XmlNodeList stateL = rootE.GetElementsByTagName("ScriptState");
|
||||
|
||||
if (stateL.Count != 1)
|
||||
return;
|
||||
|
||||
XmlElement stateE = (XmlElement)stateL[0];
|
||||
|
||||
if (World.m_trustBinaries)
|
||||
{
|
||||
XmlNodeList assemL = rootE.GetElementsByTagName("Assembly");
|
||||
|
||||
if (assemL.Count != 1)
|
||||
return;
|
||||
|
||||
XmlElement assemE = (XmlElement)assemL[0];
|
||||
|
||||
string fn = assemE.GetAttribute("Filename");
|
||||
string base64 = assemE.InnerText;
|
||||
|
||||
string path = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString());
|
||||
path = Path.Combine(path, fn);
|
||||
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
Byte[] filedata = Convert.FromBase64String(base64);
|
||||
|
||||
FileStream fs = File.Create(path);
|
||||
fs.Write(filedata, 0, filedata.Length);
|
||||
fs.Close();
|
||||
|
||||
fs = File.Create(path + ".text");
|
||||
StreamWriter sw = new StreamWriter(fs);
|
||||
|
||||
sw.Write(base64);
|
||||
|
||||
sw.Close();
|
||||
fs.Close();
|
||||
}
|
||||
}
|
||||
|
||||
string statepath = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString());
|
||||
statepath = Path.Combine(statepath, itemID.ToString() + ".state");
|
||||
|
||||
FileStream sfs = File.Create(statepath);
|
||||
StreamWriter ssw = new StreamWriter(sfs);
|
||||
|
||||
ssw.Write(stateE.OuterXml);
|
||||
|
||||
ssw.Close();
|
||||
sfs.Close();
|
||||
|
||||
XmlNodeList mapL = rootE.GetElementsByTagName("LineMap");
|
||||
|
||||
XmlElement mapE = (XmlElement)mapL[0];
|
||||
|
||||
string mappath = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString());
|
||||
mappath = Path.Combine(mappath, mapE.GetAttribute("Filename"));
|
||||
|
||||
FileStream mfs = File.Create(mappath);
|
||||
StreamWriter msw = new StreamWriter(mfs);
|
||||
|
||||
msw.Write(mapE.InnerText);
|
||||
|
||||
msw.Close();
|
||||
mfs.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue