Rename OpenSim.Framework.Archive to OpenSim.Framework.Serialization
Update using statements and prebuild.xml. Also trim trailing whitespace.0.6.5-rc1
parent
abc5df12c8
commit
f28886e26d
|
@ -28,7 +28,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Archive
|
namespace OpenSim.Framework.Serialization
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constants for the archiving module
|
/// Constants for the archiving module
|
|
@ -31,7 +31,7 @@ using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using log4net;
|
using log4net;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Archive
|
namespace OpenSim.Framework.Serialization
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Temporary code to do the bare minimum required to read a tar archive for our purposes
|
/// Temporary code to do the bare minimum required to read a tar archive for our purposes
|
|
@ -30,7 +30,7 @@ using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Archive
|
namespace OpenSim.Framework.Serialization
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Temporary code to produce a tar archive in tar v7 format
|
/// Temporary code to produce a tar archive in tar v7 format
|
|
@ -33,7 +33,7 @@ using System.Xml;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
using OpenSim.Framework.Servers;
|
using OpenSim.Framework.Servers;
|
||||||
using log4net;
|
using log4net;
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ using System.Xml;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
using OpenSim.Framework.Communications;
|
using OpenSim.Framework.Communications;
|
||||||
using OpenSim.Framework.Communications.Cache;
|
using OpenSim.Framework.Communications.Cache;
|
||||||
using OpenSim.Region.CoreModules.World.Archiver;
|
using OpenSim.Region.CoreModules.World.Archiver;
|
||||||
|
@ -208,19 +208,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
failedAssetRestores++;
|
failedAssetRestores++;
|
||||||
}
|
}
|
||||||
else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH))
|
else if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH))
|
||||||
{
|
{
|
||||||
string fsPath = filePath.Substring(ArchiveConstants.INVENTORY_PATH.Length);
|
string fsPath = filePath.Substring(ArchiveConstants.INVENTORY_PATH.Length);
|
||||||
|
|
||||||
// Remove the file portion if we aren't already dealing with a directory path
|
// Remove the file portion if we aren't already dealing with a directory path
|
||||||
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
|
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
|
||||||
fsPath = fsPath.Remove(fsPath.LastIndexOf("/") + 1);
|
fsPath = fsPath.Remove(fsPath.LastIndexOf("/") + 1);
|
||||||
|
|
||||||
string originalFsPath = fsPath;
|
string originalFsPath = fsPath;
|
||||||
|
|
||||||
m_log.DebugFormat("[INVENTORY ARCHIVER]: Loading to folder {0}", fsPath);
|
m_log.DebugFormat("[INVENTORY ARCHIVER]: Loading to folder {0}", fsPath);
|
||||||
|
|
||||||
InventoryFolderImpl foundFolder = null;
|
InventoryFolderImpl foundFolder = null;
|
||||||
|
|
||||||
// XXX: Nasty way of dealing with a path that has no directory component
|
// XXX: Nasty way of dealing with a path that has no directory component
|
||||||
if (fsPath.Length > 0)
|
if (fsPath.Length > 0)
|
||||||
{
|
{
|
||||||
|
@ -323,15 +323,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
|
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
|
||||||
{
|
{
|
||||||
InventoryItemBase item = LoadInvItem(m_asciiEncoding.GetString(data));
|
InventoryItemBase item = LoadInvItem(m_asciiEncoding.GetString(data));
|
||||||
|
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
// Don't use the item ID that's in the file
|
// Don't use the item ID that's in the file
|
||||||
item.ID = UUID.Random();
|
item.ID = UUID.Random();
|
||||||
|
|
||||||
item.Creator = m_userInfo.UserProfile.ID;
|
item.Creator = m_userInfo.UserProfile.ID;
|
||||||
item.Owner = m_userInfo.UserProfile.ID;
|
item.Owner = m_userInfo.UserProfile.ID;
|
||||||
|
|
||||||
// Reset folder ID to the one in which we want to load it
|
// Reset folder ID to the one in which we want to load it
|
||||||
item.Folder = foundFolder.ID;
|
item.Folder = foundFolder.ID;
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ using System.Xml;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
using OpenSim.Framework.Communications;
|
using OpenSim.Framework.Communications;
|
||||||
using OpenSim.Framework.Communications.Cache;
|
using OpenSim.Framework.Communications.Cache;
|
||||||
using OpenSim.Region.CoreModules.World.Archiver;
|
using OpenSim.Region.CoreModules.World.Archiver;
|
||||||
|
|
|
@ -34,7 +34,7 @@ using NUnit.Framework.SyntaxHelpers;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Data;
|
using OpenSim.Data;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
using OpenSim.Framework.Communications;
|
using OpenSim.Framework.Communications;
|
||||||
using OpenSim.Framework.Communications.Cache;
|
using OpenSim.Framework.Communications.Cache;
|
||||||
using OpenSim.Region.CoreModules.Avatar.Inventory.Archiver;
|
using OpenSim.Region.CoreModules.Avatar.Inventory.Archiver;
|
||||||
|
|
|
@ -35,7 +35,7 @@ using System.Text;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
using OpenSim.Framework.Communications.Cache;
|
using OpenSim.Framework.Communications.Cache;
|
||||||
using OpenSim.Region.CoreModules.World.Terrain;
|
using OpenSim.Region.CoreModules.World.Terrain;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
@ -52,14 +52,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
private static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding();
|
private static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding();
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private Stream m_loadStream;
|
private Stream m_loadStream;
|
||||||
private string m_errorMessage;
|
private string m_errorMessage;
|
||||||
|
|
||||||
/// <value>
|
/// <value>
|
||||||
/// Should the archive being loaded be merged with what is already on the region?
|
/// Should the archive being loaded be merged with what is already on the region?
|
||||||
/// </value>
|
/// </value>
|
||||||
private bool m_merge;
|
private bool m_merge;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Used to cache lookups for valid uuids.
|
/// Used to cache lookups for valid uuids.
|
||||||
|
@ -109,7 +109,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat(
|
//m_log.DebugFormat(
|
||||||
// "[ARCHIVER]: Successfully read {0} ({1} bytes)}", filePath, data.Length);
|
// "[ARCHIVER]: Successfully read {0} ({1} bytes)}", filePath, data.Length);
|
||||||
|
|
||||||
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType)
|
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
|
|
|
@ -33,7 +33,7 @@ using System.Xml;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
using OpenSim.Region.CoreModules.World.Terrain;
|
using OpenSim.Region.CoreModules.World.Terrain;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
@ -44,7 +44,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
/// Method called when all the necessary assets for an archive request have been received.
|
/// Method called when all the necessary assets for an archive request have been received.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public delegate void AssetsRequestCallback(IDictionary<UUID, AssetBase> assetsFound, ICollection<UUID> assetsNotFoundUuids);
|
public delegate void AssetsRequestCallback(IDictionary<UUID, AssetBase> assetsFound, ICollection<UUID> assetsNotFoundUuids);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Execute the write of an archive once we have received all the necessary data
|
/// Execute the write of an archive once we have received all the necessary data
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -81,34 +81,34 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.InfoFormat(
|
m_log.InfoFormat(
|
||||||
"[ARCHIVER]: Received {0} of {1} assets requested",
|
"[ARCHIVER]: Received {0} of {1} assets requested",
|
||||||
assetsFound.Count, assetsFound.Count + assetsNotFoundUuids.Count);
|
assetsFound.Count, assetsFound.Count + assetsNotFoundUuids.Count);
|
||||||
|
|
||||||
m_log.InfoFormat("[ARCHIVER]: Creating archive file. This may take some time.");
|
m_log.InfoFormat("[ARCHIVER]: Creating archive file. This may take some time.");
|
||||||
|
|
||||||
TarArchiveWriter archive = new TarArchiveWriter(m_saveStream);
|
TarArchiveWriter archive = new TarArchiveWriter(m_saveStream);
|
||||||
|
|
||||||
// Write out control file
|
// Write out control file
|
||||||
archive.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p2ControlFile());
|
archive.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p2ControlFile());
|
||||||
|
|
||||||
m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
|
m_log.InfoFormat("[ARCHIVER]: Added control file to archive.");
|
||||||
|
|
||||||
// Write out region settings
|
// Write out region settings
|
||||||
string settingsPath
|
string settingsPath
|
||||||
= String.Format("{0}{1}.xml", ArchiveConstants.SETTINGS_PATH, m_scene.RegionInfo.RegionName);
|
= String.Format("{0}{1}.xml", ArchiveConstants.SETTINGS_PATH, m_scene.RegionInfo.RegionName);
|
||||||
archive.WriteFile(settingsPath, RegionSettingsSerializer.Serialize(m_scene.RegionInfo.RegionSettings));
|
archive.WriteFile(settingsPath, RegionSettingsSerializer.Serialize(m_scene.RegionInfo.RegionSettings));
|
||||||
|
|
||||||
m_log.InfoFormat("[ARCHIVER]: Added region settings to archive.");
|
m_log.InfoFormat("[ARCHIVER]: Added region settings to archive.");
|
||||||
|
|
||||||
// Write out terrain
|
// Write out terrain
|
||||||
string terrainPath
|
string terrainPath
|
||||||
= String.Format("{0}{1}.r32", ArchiveConstants.TERRAINS_PATH, m_scene.RegionInfo.RegionName);
|
= String.Format("{0}{1}.r32", ArchiveConstants.TERRAINS_PATH, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
MemoryStream ms = new MemoryStream();
|
MemoryStream ms = new MemoryStream();
|
||||||
m_terrainModule.SaveToStream(terrainPath, ms);
|
m_terrainModule.SaveToStream(terrainPath, ms);
|
||||||
archive.WriteFile(terrainPath, ms.ToArray());
|
archive.WriteFile(terrainPath, ms.ToArray());
|
||||||
ms.Close();
|
ms.Close();
|
||||||
|
|
||||||
m_log.InfoFormat("[ARCHIVER]: Added terrain information to archive.");
|
m_log.InfoFormat("[ARCHIVER]: Added terrain information to archive.");
|
||||||
|
|
||||||
// Write out scene object metadata
|
// Write out scene object metadata
|
||||||
|
@ -128,7 +128,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
archive.WriteFile(filename, serializedObject);
|
archive.WriteFile(filename, serializedObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.InfoFormat("[ARCHIVER]: Added scene objects to archive.");
|
m_log.InfoFormat("[ARCHIVER]: Added scene objects to archive.");
|
||||||
|
|
||||||
// Write out assets
|
// Write out assets
|
||||||
|
@ -138,7 +138,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
archive.Close();
|
archive.Close();
|
||||||
|
|
||||||
m_log.InfoFormat("[ARCHIVER]: Wrote out OpenSimulator archive for {0}", m_scene.RegionInfo.RegionName);
|
m_log.InfoFormat("[ARCHIVER]: Wrote out OpenSimulator archive for {0}", m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
m_scene.EventManager.TriggerOarFileSaved(String.Empty);
|
m_scene.EventManager.TriggerOarFileSaved(String.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ using System.Xml;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.World.Archiver
|
namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
{
|
{
|
||||||
|
@ -47,7 +47,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
/// Post a message to the log every x assets as a progress bar
|
/// Post a message to the log every x assets as a progress bar
|
||||||
/// </value>
|
/// </value>
|
||||||
private static int LOG_ASSET_LOAD_NOTIFICATION_INTERVAL = 50;
|
private static int LOG_ASSET_LOAD_NOTIFICATION_INTERVAL = 50;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Archive assets
|
/// Archive assets
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -122,7 +122,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
{
|
{
|
||||||
// It appears that gtar, at least, doesn't need the intermediate directory entries in the tar
|
// It appears that gtar, at least, doesn't need the intermediate directory entries in the tar
|
||||||
//archive.AddDir("assets");
|
//archive.AddDir("assets");
|
||||||
|
|
||||||
int assetsAdded = 0;
|
int assetsAdded = 0;
|
||||||
|
|
||||||
foreach (UUID uuid in m_assets.Keys)
|
foreach (UUID uuid in m_assets.Keys)
|
||||||
|
@ -145,13 +145,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
archive.WriteFile(
|
archive.WriteFile(
|
||||||
ArchiveConstants.ASSETS_PATH + uuid.ToString() + extension,
|
ArchiveConstants.ASSETS_PATH + uuid.ToString() + extension,
|
||||||
asset.Data);
|
asset.Data);
|
||||||
|
|
||||||
assetsAdded++;
|
assetsAdded++;
|
||||||
|
|
||||||
if (assetsAdded % LOG_ASSET_LOAD_NOTIFICATION_INTERVAL == 0)
|
if (assetsAdded % LOG_ASSET_LOAD_NOTIFICATION_INTERVAL == 0)
|
||||||
m_log.InfoFormat("[ARCHIVER]: Added {0} assets to archive", assetsAdded);
|
m_log.InfoFormat("[ARCHIVER]: Added {0} assets to archive", assetsAdded);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (assetsAdded % LOG_ASSET_LOAD_NOTIFICATION_INTERVAL != 0)
|
if (assetsAdded % LOG_ASSET_LOAD_NOTIFICATION_INTERVAL != 0)
|
||||||
m_log.InfoFormat("[ARCHIVER]: Added {0} assets to archive", assetsAdded);
|
m_log.InfoFormat("[ARCHIVER]: Added {0} assets to archive", assetsAdded);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ using System.Xml;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.World.Archiver
|
namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,7 +34,7 @@ using NUnit.Framework;
|
||||||
using NUnit.Framework.SyntaxHelpers;
|
using NUnit.Framework.SyntaxHelpers;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Archive;
|
using OpenSim.Framework.Serialization;
|
||||||
using OpenSim.Region.CoreModules.World.Serialiser;
|
using OpenSim.Region.CoreModules.World.Serialiser;
|
||||||
using OpenSim.Region.CoreModules.World.Terrain;
|
using OpenSim.Region.CoreModules.World.Terrain;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
@ -48,29 +48,29 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
private void SaveCompleted(string errorMessage)
|
private void SaveCompleted(string errorMessage)
|
||||||
{
|
{
|
||||||
lock (this)
|
lock (this)
|
||||||
{
|
{
|
||||||
System.Console.WriteLine("About to pulse ArchiverTests");
|
System.Console.WriteLine("About to pulse ArchiverTests");
|
||||||
Monitor.PulseAll(this);
|
Monitor.PulseAll(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test saving a V0.2 OpenSim Region Archive.
|
/// Test saving a V0.2 OpenSim Region Archive.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
public void TestSaveOarV0p2()
|
public void TestSaveOarV0p2()
|
||||||
{
|
{
|
||||||
log4net.Config.XmlConfigurator.Configure();
|
log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
ArchiverModule archiverModule = new ArchiverModule();
|
ArchiverModule archiverModule = new ArchiverModule();
|
||||||
SerialiserModule serialiserModule = new SerialiserModule();
|
SerialiserModule serialiserModule = new SerialiserModule();
|
||||||
TerrainModule terrainModule = new TerrainModule();
|
TerrainModule terrainModule = new TerrainModule();
|
||||||
|
|
||||||
Scene scene = SceneSetupHelpers.SetupScene();
|
Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
|
SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
|
||||||
|
|
||||||
SceneObjectPart part1;
|
SceneObjectPart part1;
|
||||||
|
|
||||||
// Create and add prim 1
|
// Create and add prim 1
|
||||||
{
|
{
|
||||||
string partName = "My Little Pony";
|
string partName = "My Little Pony";
|
||||||
|
@ -79,17 +79,17 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
Vector3 groupPosition = new Vector3(10, 20, 30);
|
Vector3 groupPosition = new Vector3(10, 20, 30);
|
||||||
Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
|
Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
|
||||||
Vector3 offsetPosition = new Vector3(5, 10, 15);
|
Vector3 offsetPosition = new Vector3(5, 10, 15);
|
||||||
|
|
||||||
part1
|
part1
|
||||||
= new SceneObjectPart(
|
= new SceneObjectPart(
|
||||||
ownerId, shape, groupPosition, rotationOffset, offsetPosition);
|
ownerId, shape, groupPosition, rotationOffset, offsetPosition);
|
||||||
part1.Name = partName;
|
part1.Name = partName;
|
||||||
|
|
||||||
scene.AddNewSceneObject(new SceneObjectGroup(part1), false);
|
scene.AddNewSceneObject(new SceneObjectGroup(part1), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneObjectPart part2;
|
SceneObjectPart part2;
|
||||||
|
|
||||||
// Create and add prim 2
|
// Create and add prim 2
|
||||||
{
|
{
|
||||||
string partName = "Action Man";
|
string partName = "Action Man";
|
||||||
|
@ -98,28 +98,28 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
Vector3 groupPosition = new Vector3(90, 80, 70);
|
Vector3 groupPosition = new Vector3(90, 80, 70);
|
||||||
Quaternion rotationOffset = new Quaternion(60, 70, 80, 90);
|
Quaternion rotationOffset = new Quaternion(60, 70, 80, 90);
|
||||||
Vector3 offsetPosition = new Vector3(20, 25, 30);
|
Vector3 offsetPosition = new Vector3(20, 25, 30);
|
||||||
|
|
||||||
part2
|
part2
|
||||||
= new SceneObjectPart(
|
= new SceneObjectPart(
|
||||||
ownerId, shape, groupPosition, rotationOffset, offsetPosition);
|
ownerId, shape, groupPosition, rotationOffset, offsetPosition);
|
||||||
part2.Name = partName;
|
part2.Name = partName;
|
||||||
|
|
||||||
scene.AddNewSceneObject(new SceneObjectGroup(part2), false);
|
scene.AddNewSceneObject(new SceneObjectGroup(part2), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
MemoryStream archiveWriteStream = new MemoryStream();
|
MemoryStream archiveWriteStream = new MemoryStream();
|
||||||
scene.EventManager.OnOarFileSaved += SaveCompleted;
|
scene.EventManager.OnOarFileSaved += SaveCompleted;
|
||||||
|
|
||||||
lock (this)
|
lock (this)
|
||||||
{
|
{
|
||||||
archiverModule.ArchiveRegion(archiveWriteStream);
|
archiverModule.ArchiveRegion(archiveWriteStream);
|
||||||
Monitor.Wait(this, 60000);
|
Monitor.Wait(this, 60000);
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] archive = archiveWriteStream.ToArray();
|
byte[] archive = archiveWriteStream.ToArray();
|
||||||
MemoryStream archiveReadStream = new MemoryStream(archive);
|
MemoryStream archiveReadStream = new MemoryStream(archive);
|
||||||
TarArchiveReader tar = new TarArchiveReader(archiveReadStream);
|
TarArchiveReader tar = new TarArchiveReader(archiveReadStream);
|
||||||
|
|
||||||
bool gotControlFile = false;
|
bool gotControlFile = false;
|
||||||
bool gotObject1File = false;
|
bool gotObject1File = false;
|
||||||
bool gotObject2File = false;
|
bool gotObject2File = false;
|
||||||
|
@ -132,11 +132,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml",
|
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml",
|
||||||
part2.Name,
|
part2.Name,
|
||||||
Math.Round(part2.GroupPosition.X), Math.Round(part2.GroupPosition.Y), Math.Round(part2.GroupPosition.Z),
|
Math.Round(part2.GroupPosition.X), Math.Round(part2.GroupPosition.Y), Math.Round(part2.GroupPosition.Z),
|
||||||
part2.UUID);
|
part2.UUID);
|
||||||
|
|
||||||
string filePath;
|
string filePath;
|
||||||
TarArchiveReader.TarEntryType tarEntryType;
|
TarArchiveReader.TarEntryType tarEntryType;
|
||||||
|
|
||||||
while (tar.ReadEntry(out filePath, out tarEntryType) != null)
|
while (tar.ReadEntry(out filePath, out tarEntryType) != null)
|
||||||
{
|
{
|
||||||
if (ArchiveConstants.CONTROL_FILE_PATH == filePath)
|
if (ArchiveConstants.CONTROL_FILE_PATH == filePath)
|
||||||
|
@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
else if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH))
|
else if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH))
|
||||||
{
|
{
|
||||||
string fileName = filePath.Remove(0, ArchiveConstants.OBJECTS_PATH.Length);
|
string fileName = filePath.Remove(0, ArchiveConstants.OBJECTS_PATH.Length);
|
||||||
|
|
||||||
if (fileName.StartsWith(part1.Name))
|
if (fileName.StartsWith(part1.Name))
|
||||||
{
|
{
|
||||||
Assert.That(fileName, Is.EqualTo(expectedObject1FileName));
|
Assert.That(fileName, Is.EqualTo(expectedObject1FileName));
|
||||||
|
@ -155,7 +155,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
else if (fileName.StartsWith(part2.Name))
|
else if (fileName.StartsWith(part2.Name))
|
||||||
{
|
{
|
||||||
Assert.That(fileName, Is.EqualTo(expectedObject2FileName));
|
Assert.That(fileName, Is.EqualTo(expectedObject2FileName));
|
||||||
gotObject2File = true;
|
gotObject2File = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
Assert.That(gotControlFile, Is.True, "No control file in archive");
|
Assert.That(gotControlFile, Is.True, "No control file in archive");
|
||||||
Assert.That(gotObject1File, Is.True, "No object1 file in archive");
|
Assert.That(gotObject1File, Is.True, "No object1 file in archive");
|
||||||
Assert.That(gotObject2File, Is.True, "No object2 file in archive");
|
Assert.That(gotObject2File, Is.True, "No object2 file in archive");
|
||||||
|
|
||||||
// TODO: Test presence of more files and contents of files.
|
// TODO: Test presence of more files and contents of files.
|
||||||
// Temporary
|
// Temporary
|
||||||
Console.WriteLine("Successfully completed {0}", MethodBase.GetCurrentMethod());
|
Console.WriteLine("Successfully completed {0}", MethodBase.GetCurrentMethod());
|
||||||
|
@ -171,143 +171,143 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test loading a V0.2 OpenSim Region Archive.
|
/// Test loading a V0.2 OpenSim Region Archive.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLoadOarV0p2()
|
public void TestLoadOarV0p2()
|
||||||
{
|
{
|
||||||
//log4net.Config.XmlConfigurator.Configure();
|
//log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
MemoryStream archiveWriteStream = new MemoryStream();
|
MemoryStream archiveWriteStream = new MemoryStream();
|
||||||
TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream);
|
TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream);
|
||||||
|
|
||||||
tar.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, ArchiveWriteRequestExecution.Create0p2ControlFile());
|
tar.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, ArchiveWriteRequestExecution.Create0p2ControlFile());
|
||||||
|
|
||||||
string part1Name = "object1";
|
string part1Name = "object1";
|
||||||
PrimitiveBaseShape shape = PrimitiveBaseShape.CreateCylinder();
|
PrimitiveBaseShape shape = PrimitiveBaseShape.CreateCylinder();
|
||||||
Vector3 groupPosition = new Vector3(90, 80, 70);
|
Vector3 groupPosition = new Vector3(90, 80, 70);
|
||||||
Quaternion rotationOffset = new Quaternion(60, 70, 80, 90);
|
Quaternion rotationOffset = new Quaternion(60, 70, 80, 90);
|
||||||
Vector3 offsetPosition = new Vector3(20, 25, 30);
|
Vector3 offsetPosition = new Vector3(20, 25, 30);
|
||||||
|
|
||||||
SceneObjectPart part1
|
SceneObjectPart part1
|
||||||
= new SceneObjectPart(
|
= new SceneObjectPart(
|
||||||
UUID.Zero, shape, groupPosition, rotationOffset, offsetPosition);
|
UUID.Zero, shape, groupPosition, rotationOffset, offsetPosition);
|
||||||
part1.Name = part1Name;
|
part1.Name = part1Name;
|
||||||
SceneObjectGroup object1 = new SceneObjectGroup(part1);
|
SceneObjectGroup object1 = new SceneObjectGroup(part1);
|
||||||
|
|
||||||
string object1FileName = string.Format(
|
string object1FileName = string.Format(
|
||||||
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml",
|
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml",
|
||||||
part1Name,
|
part1Name,
|
||||||
Math.Round(groupPosition.X), Math.Round(groupPosition.Y), Math.Round(groupPosition.Z),
|
Math.Round(groupPosition.X), Math.Round(groupPosition.Y), Math.Round(groupPosition.Z),
|
||||||
part1.UUID);
|
part1.UUID);
|
||||||
tar.WriteFile(ArchiveConstants.OBJECTS_PATH + object1FileName, object1.ToXmlString2());
|
tar.WriteFile(ArchiveConstants.OBJECTS_PATH + object1FileName, object1.ToXmlString2());
|
||||||
|
|
||||||
tar.Close();
|
tar.Close();
|
||||||
|
|
||||||
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
|
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
|
||||||
|
|
||||||
SerialiserModule serialiserModule = new SerialiserModule();
|
SerialiserModule serialiserModule = new SerialiserModule();
|
||||||
ArchiverModule archiverModule = new ArchiverModule();
|
ArchiverModule archiverModule = new ArchiverModule();
|
||||||
|
|
||||||
Scene scene = SceneSetupHelpers.SetupScene();
|
Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
|
SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
|
||||||
|
|
||||||
archiverModule.DearchiveRegion(archiveReadStream);
|
archiverModule.DearchiveRegion(archiveReadStream);
|
||||||
|
|
||||||
SceneObjectPart object1PartLoaded = scene.GetSceneObjectPart(part1Name);
|
SceneObjectPart object1PartLoaded = scene.GetSceneObjectPart(part1Name);
|
||||||
|
|
||||||
Assert.That(object1PartLoaded, Is.Not.Null, "object1 was not loaded");
|
Assert.That(object1PartLoaded, Is.Not.Null, "object1 was not loaded");
|
||||||
Assert.That(object1PartLoaded.Name, Is.EqualTo(part1Name), "object1 names not identical");
|
Assert.That(object1PartLoaded.Name, Is.EqualTo(part1Name), "object1 names not identical");
|
||||||
Assert.That(object1PartLoaded.GroupPosition, Is.EqualTo(groupPosition), "object1 group position not equal");
|
Assert.That(object1PartLoaded.GroupPosition, Is.EqualTo(groupPosition), "object1 group position not equal");
|
||||||
Assert.That(
|
Assert.That(
|
||||||
object1PartLoaded.RotationOffset, Is.EqualTo(rotationOffset), "object1 rotation offset not equal");
|
object1PartLoaded.RotationOffset, Is.EqualTo(rotationOffset), "object1 rotation offset not equal");
|
||||||
Assert.That(
|
Assert.That(
|
||||||
object1PartLoaded.OffsetPosition, Is.EqualTo(offsetPosition), "object1 offset position not equal");
|
object1PartLoaded.OffsetPosition, Is.EqualTo(offsetPosition), "object1 offset position not equal");
|
||||||
|
|
||||||
// Temporary
|
// Temporary
|
||||||
Console.WriteLine("Successfully completed {0}", MethodBase.GetCurrentMethod());
|
Console.WriteLine("Successfully completed {0}", MethodBase.GetCurrentMethod());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test merging a V0.2 OpenSim Region Archive into an existing scene
|
/// Test merging a V0.2 OpenSim Region Archive into an existing scene
|
||||||
/// </summary>
|
/// </summary>
|
||||||
///[Test]
|
///[Test]
|
||||||
public void TestMergeOarV0p2()
|
public void TestMergeOarV0p2()
|
||||||
{
|
{
|
||||||
//XmlConfigurator.Configure();
|
//XmlConfigurator.Configure();
|
||||||
|
|
||||||
MemoryStream archiveWriteStream = new MemoryStream();
|
MemoryStream archiveWriteStream = new MemoryStream();
|
||||||
|
|
||||||
string part2Name = "objectMerge";
|
string part2Name = "objectMerge";
|
||||||
PrimitiveBaseShape part2Shape = PrimitiveBaseShape.CreateCylinder();
|
PrimitiveBaseShape part2Shape = PrimitiveBaseShape.CreateCylinder();
|
||||||
Vector3 part2GroupPosition = new Vector3(90, 80, 70);
|
Vector3 part2GroupPosition = new Vector3(90, 80, 70);
|
||||||
Quaternion part2RotationOffset = new Quaternion(60, 70, 80, 90);
|
Quaternion part2RotationOffset = new Quaternion(60, 70, 80, 90);
|
||||||
Vector3 part2OffsetPosition = new Vector3(20, 25, 30);
|
Vector3 part2OffsetPosition = new Vector3(20, 25, 30);
|
||||||
|
|
||||||
// Create an oar file that we can use for the merge
|
// Create an oar file that we can use for the merge
|
||||||
{
|
{
|
||||||
ArchiverModule archiverModule = new ArchiverModule();
|
ArchiverModule archiverModule = new ArchiverModule();
|
||||||
SerialiserModule serialiserModule = new SerialiserModule();
|
SerialiserModule serialiserModule = new SerialiserModule();
|
||||||
TerrainModule terrainModule = new TerrainModule();
|
TerrainModule terrainModule = new TerrainModule();
|
||||||
|
|
||||||
Scene scene = SceneSetupHelpers.SetupScene();
|
Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
|
SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
|
||||||
|
|
||||||
SceneObjectPart part2
|
SceneObjectPart part2
|
||||||
= new SceneObjectPart(
|
= new SceneObjectPart(
|
||||||
UUID.Zero, part2Shape, part2GroupPosition, part2RotationOffset, part2OffsetPosition);
|
UUID.Zero, part2Shape, part2GroupPosition, part2RotationOffset, part2OffsetPosition);
|
||||||
part2.Name = part2Name;
|
part2.Name = part2Name;
|
||||||
SceneObjectGroup object2 = new SceneObjectGroup(part2);
|
SceneObjectGroup object2 = new SceneObjectGroup(part2);
|
||||||
|
|
||||||
scene.AddNewSceneObject(object2, false);
|
scene.AddNewSceneObject(object2, false);
|
||||||
|
|
||||||
// Write out this scene
|
// Write out this scene
|
||||||
scene.EventManager.OnOarFileSaved += SaveCompleted;
|
scene.EventManager.OnOarFileSaved += SaveCompleted;
|
||||||
|
|
||||||
lock (this)
|
lock (this)
|
||||||
{
|
{
|
||||||
archiverModule.ArchiveRegion(archiveWriteStream);
|
archiverModule.ArchiveRegion(archiveWriteStream);
|
||||||
Monitor.Wait(this, 60000);
|
Monitor.Wait(this, 60000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
ArchiverModule archiverModule = new ArchiverModule();
|
ArchiverModule archiverModule = new ArchiverModule();
|
||||||
SerialiserModule serialiserModule = new SerialiserModule();
|
SerialiserModule serialiserModule = new SerialiserModule();
|
||||||
TerrainModule terrainModule = new TerrainModule();
|
TerrainModule terrainModule = new TerrainModule();
|
||||||
|
|
||||||
Scene scene = SceneSetupHelpers.SetupScene();
|
Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
|
SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
|
||||||
|
|
||||||
string part1Name = "objectExisting";
|
string part1Name = "objectExisting";
|
||||||
PrimitiveBaseShape part1Shape = PrimitiveBaseShape.CreateCylinder();
|
PrimitiveBaseShape part1Shape = PrimitiveBaseShape.CreateCylinder();
|
||||||
Vector3 part1GroupPosition = new Vector3(80, 70, 60);
|
Vector3 part1GroupPosition = new Vector3(80, 70, 60);
|
||||||
Quaternion part1RotationOffset = new Quaternion(50, 60, 70, 80);
|
Quaternion part1RotationOffset = new Quaternion(50, 60, 70, 80);
|
||||||
Vector3 part1OffsetPosition = new Vector3(15, 20, 25);
|
Vector3 part1OffsetPosition = new Vector3(15, 20, 25);
|
||||||
|
|
||||||
SceneObjectPart part1
|
SceneObjectPart part1
|
||||||
= new SceneObjectPart(
|
= new SceneObjectPart(
|
||||||
UUID.Zero, part1Shape, part1GroupPosition, part1RotationOffset, part1OffsetPosition);
|
UUID.Zero, part1Shape, part1GroupPosition, part1RotationOffset, part1OffsetPosition);
|
||||||
part1.Name = part1Name;
|
part1.Name = part1Name;
|
||||||
SceneObjectGroup object1 = new SceneObjectGroup(part1);
|
SceneObjectGroup object1 = new SceneObjectGroup(part1);
|
||||||
|
|
||||||
scene.AddNewSceneObject(object1, false);
|
scene.AddNewSceneObject(object1, false);
|
||||||
|
|
||||||
// Merge in the archive we created earlier
|
// Merge in the archive we created earlier
|
||||||
byte[] archive = archiveWriteStream.ToArray();
|
byte[] archive = archiveWriteStream.ToArray();
|
||||||
MemoryStream archiveReadStream = new MemoryStream(archive);
|
MemoryStream archiveReadStream = new MemoryStream(archive);
|
||||||
|
|
||||||
archiverModule.DearchiveRegion(archiveReadStream, true);
|
archiverModule.DearchiveRegion(archiveReadStream, true);
|
||||||
|
|
||||||
SceneObjectPart object1Existing = scene.GetSceneObjectPart(part1Name);
|
SceneObjectPart object1Existing = scene.GetSceneObjectPart(part1Name);
|
||||||
Assert.That(object1Existing, Is.Not.Null, "object1 was not present after merge");
|
Assert.That(object1Existing, Is.Not.Null, "object1 was not present after merge");
|
||||||
Assert.That(object1Existing.Name, Is.EqualTo(part1Name), "object1 names not identical after merge");
|
Assert.That(object1Existing.Name, Is.EqualTo(part1Name), "object1 names not identical after merge");
|
||||||
Assert.That(object1Existing.GroupPosition, Is.EqualTo(part1GroupPosition), "object1 group position not equal after merge");
|
Assert.That(object1Existing.GroupPosition, Is.EqualTo(part1GroupPosition), "object1 group position not equal after merge");
|
||||||
|
|
||||||
SceneObjectPart object2PartMerged = scene.GetSceneObjectPart(part2Name);
|
SceneObjectPart object2PartMerged = scene.GetSceneObjectPart(part2Name);
|
||||||
Assert.That(object2PartMerged, Is.Not.Null, "object2 was not present after merge");
|
Assert.That(object2PartMerged, Is.Not.Null, "object2 was not present after merge");
|
||||||
Assert.That(object2PartMerged.Name, Is.EqualTo(part2Name), "object2 names not identical after merge");
|
Assert.That(object2PartMerged.Name, Is.EqualTo(part2Name), "object2 names not identical after merge");
|
||||||
Assert.That(object2PartMerged.GroupPosition, Is.EqualTo(part2GroupPosition), "object2 group position not equal after merge");
|
Assert.That(object2PartMerged.GroupPosition, Is.EqualTo(part2GroupPosition), "object2 group position not equal after merge");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,7 +105,7 @@
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
<Project name="OpenSim.Framework.Archive" path="OpenSim/Framework/Archive" type="Library">
|
<Project name="OpenSim.Framework.Serialization" path="OpenSim/Framework/Serialization" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
<OutputPath>../../../bin/</OutputPath>
|
<OutputPath>../../../bin/</OutputPath>
|
||||||
|
@ -885,7 +885,7 @@
|
||||||
<Reference name="OpenMetaverseTypes"/>
|
<Reference name="OpenMetaverseTypes"/>
|
||||||
<Reference name="OpenMetaverse.StructuredData"/>
|
<Reference name="OpenMetaverse.StructuredData"/>
|
||||||
<Reference name="OpenSim.Framework"/>
|
<Reference name="OpenSim.Framework"/>
|
||||||
<Reference name="OpenSim.Framework.Archive"/>
|
<Reference name="OpenSim.Framework.Serialization"/>
|
||||||
<Reference name="OpenSim.Framework.Servers"/>
|
<Reference name="OpenSim.Framework.Servers"/>
|
||||||
<Reference name="OpenSim.Grid.AssetInventoryServer" />
|
<Reference name="OpenSim.Grid.AssetInventoryServer" />
|
||||||
<Reference name="log4net"/>
|
<Reference name="log4net"/>
|
||||||
|
@ -1150,7 +1150,7 @@
|
||||||
<Reference name="OpenSim.Framework.Communications"/>
|
<Reference name="OpenSim.Framework.Communications"/>
|
||||||
<Reference name="OpenSim.Data" />
|
<Reference name="OpenSim.Data" />
|
||||||
<Reference name="OpenSim.Region.Framework" />
|
<Reference name="OpenSim.Region.Framework" />
|
||||||
<Reference name="OpenSim.Framework.Archive"/>
|
<Reference name="OpenSim.Framework.Serialization"/>
|
||||||
<Reference name="OpenSim.Framework.Console"/>
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
<Reference name="OpenSim.Framework.Servers"/>
|
<Reference name="OpenSim.Framework.Servers"/>
|
||||||
<Reference name="OpenSim.Framework.Statistics"/>
|
<Reference name="OpenSim.Framework.Statistics"/>
|
||||||
|
@ -2972,7 +2972,7 @@
|
||||||
<Reference name="OpenMetaverse.dll"/>
|
<Reference name="OpenMetaverse.dll"/>
|
||||||
<Reference name="OpenSim.Data"/>
|
<Reference name="OpenSim.Data"/>
|
||||||
<Reference name="OpenSim.Framework"/>
|
<Reference name="OpenSim.Framework"/>
|
||||||
<Reference name="OpenSim.Framework.Archive"/>
|
<Reference name="OpenSim.Framework.Serialization"/>
|
||||||
<Reference name="OpenSim.Framework.Communications"/>
|
<Reference name="OpenSim.Framework.Communications"/>
|
||||||
<Reference name="OpenSim.Framework.Console"/>
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
<Reference name="OpenSim.Framework.Servers"/>
|
<Reference name="OpenSim.Framework.Servers"/>
|
||||||
|
|
Loading…
Reference in New Issue