From 5dad0ed7296b4abfe2c934a8404022a4d2189051 Mon Sep 17 00:00:00 2001
From: Adam Frisby
Date: Mon, 22 Oct 2007 21:57:32 +0000
Subject: * Return of R2162. /Take that SVN!/
---
OpenSim/Region/Application/OpenSimMain.cs | 18 +--
.../Environment/Interfaces/IRegionDataStore.cs | 4 +-
OpenSim/Region/Environment/ModuleLoader.cs | 2 +-
OpenSim/Region/Environment/Scenes/Scene.cs | 8 +-
.../Region/ExtensionsScriptModule/ScriptManager.cs | 2 +-
.../Region/Physics/Manager/PhysicsPluginManager.cs | 2 +-
.../MonoSqliteDataStore.cs | 121 ++++++++++++++++++++-
.../OpenSim.DataStore.NullStorage/NullDataStore.cs | 4 +-
8 files changed, 138 insertions(+), 23 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
index d2f5648..9de3831 100644
--- a/OpenSim/Region/Application/OpenSimMain.cs
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -262,8 +262,10 @@ namespace OpenSim
}
else
{
- MainLog.Instance.Verbose("No startup command script specified. Moving on...");
+ MainLog.Instance.Verbose("STARTUP","No startup command script specified. Moving on...");
}
+
+ MainLog.Instance.Status("STARTUP","Startup complete, serving " + m_udpServers.Count.ToString() + " region(s)");
}
private static void CreateDefaultRegionInfoXml(string fileName)
@@ -361,11 +363,11 @@ namespace OpenSim
RunCommandScript(m_shutdownCommandsFile);
}
- m_log.Verbose("Closing all threads");
- m_log.Verbose("Killing listener thread");
- m_log.Verbose("Killing clients");
+ m_log.Verbose("SHUTDOWN", "Closing all threads");
+ m_log.Verbose("SHUTDOWN", "Killing listener thread");
+ m_log.Verbose("SHUTDOWN", "Killing clients");
// IMPLEMENT THIS
- m_log.Verbose("Closing console and terminating");
+ m_log.Verbose("SHUTDOWN", "Closing console and terminating");
m_sceneManager.Close();
@@ -380,7 +382,7 @@ namespace OpenSim
///
private void RunCommandScript(string fileName)
{
- MainLog.Instance.Verbose("Running command script (" + fileName + ")");
+ MainLog.Instance.Verbose("COMMANDFILE", "Running " + fileName);
if (File.Exists(fileName))
{
StreamReader readFile = File.OpenText(fileName);
@@ -389,14 +391,14 @@ namespace OpenSim
{
if (currentCommand != "")
{
- MainLog.Instance.Verbose("Running '" + currentCommand + "'");
+ MainLog.Instance.Verbose("COMMANDFILE", "Running '" + currentCommand + "'");
MainLog.Instance.MainLogRunCommand(currentCommand);
}
}
}
else
{
- MainLog.Instance.Error("Command script missing. Can not run commands");
+ MainLog.Instance.Error("COMMANDFILE","Command script missing. Can not run commands");
}
}
diff --git a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs
index 1a00f2c..e375343 100644
--- a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs
+++ b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs
@@ -47,8 +47,8 @@ namespace OpenSim.Region.Environment.Interfaces
List LoadObjects(LLUUID regionUUID);
- void StoreTerrain(double[,] terrain);
- double[,] LoadTerrain();
+ void StoreTerrain(double[,] terrain, LLUUID regionID);
+ double[,] LoadTerrain(LLUUID regionID);
void StoreParcel(Land Parcel);
void RemoveLandObject(uint ID);
diff --git a/OpenSim/Region/Environment/ModuleLoader.cs b/OpenSim/Region/Environment/ModuleLoader.cs
index c579c1d..4fc45a0 100644
--- a/OpenSim/Region/Environment/ModuleLoader.cs
+++ b/OpenSim/Region/Environment/ModuleLoader.cs
@@ -168,7 +168,7 @@ namespace OpenSim.Region.Environment
}
catch( BadImageFormatException e )
{
- m_log.Warn( "MODULES", "The file [{0}] is not a module assembly.", e.FileName );
+ m_log.Verbose( "MODULES", "The file [{0}] is not a module assembly.", e.FileName );
}
}
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index e2430f8..ee47678 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -370,7 +370,7 @@ namespace OpenSim.Region.Environment.Scenes
phyScene.SetTerrain(Terrain.GetHeights1D());
}
- storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
+ storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(),RegionInfo.RegionID);
float[] terData = Terrain.GetHeights1D();
@@ -466,7 +466,7 @@ namespace OpenSim.Region.Environment.Scenes
{
try
{
- double[,] map = storageManager.DataStore.LoadTerrain();
+ double[,] map = storageManager.DataStore.LoadTerrain(RegionInfo.RegionID);
if (map == null)
{
if (string.IsNullOrEmpty(m_regInfo.EstateSettings.terrainFile))
@@ -474,7 +474,7 @@ namespace OpenSim.Region.Environment.Scenes
MainLog.Instance.Verbose("TERRAIN", "No default terrain. Generating a new terrain.");
Terrain.HillsGenerator();
- storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
+ storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(),RegionInfo.RegionID);
}
else
{
@@ -488,7 +488,7 @@ namespace OpenSim.Region.Environment.Scenes
MainLog.Instance.Verbose("TERRAIN", "No terrain found in database or default. Generating a new terrain.");
Terrain.HillsGenerator();
}
- storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
+ storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(), RegionInfo.RegionID);
}
}
else
diff --git a/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs b/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
index be27a0b..95ab2ca 100644
--- a/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
+++ b/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
@@ -70,7 +70,7 @@ namespace OpenSim.Region.ExtensionsScriptModule
public void Initialise(Scene scene, IConfigSource config)
{
- System.Console.WriteLine("Initialising Extensions Scripting Module");
+ OpenSim.Framework.Console.MainLog.Instance.Verbose("SCRIPTMODULE", "Initialising Extensions Scripting Module");
m_scene = scene;
m_scene.RegisterModuleInterface(this);
diff --git a/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs b/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
index 87b6d34..81bc938 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
@@ -93,7 +93,7 @@ namespace OpenSim.Region.Physics.Manager
IPhysicsPlugin plug = (IPhysicsPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
plug.Init();
this._plugins.Add(plug.GetName(),plug);
- Console.WriteLine("added physics engine: " + plug.GetName());
+ OpenSim.Framework.Console.MainLog.Instance.Verbose("PHYSICS","Added physics engine: " + plug.GetName());
}
diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
index 733e4c4..cc0ff7a 100644
--- a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
+++ b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
@@ -43,10 +43,12 @@ namespace OpenSim.DataStore.MonoSqlite
{
private const string primSelect = "select * from prims";
private const string shapeSelect = "select * from primshapes";
+ private const string terrainSelect = "select * from terrain";
private DataSet ds;
private SqliteDataAdapter primDa;
private SqliteDataAdapter shapeDa;
+ private SqliteDataAdapter terrainDa;
/***********************************************************************
*
@@ -70,6 +72,8 @@ namespace OpenSim.DataStore.MonoSqlite
shapeDa = new SqliteDataAdapter(shapeSelectCmd);
// SqliteCommandBuilder shapeCb = new SqliteCommandBuilder(shapeDa);
+ SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, conn);
+ terrainDa = new SqliteDataAdapter(terrainSelectCmd);
// We fill the data set, now we've got copies in memory for the information
// TODO: see if the linkage actually holds.
@@ -83,6 +87,10 @@ namespace OpenSim.DataStore.MonoSqlite
ds.Tables.Add(createShapeTable());
setupShapeCommands(shapeDa, conn);
+
+ ds.Tables.Add(createTerrainTable());
+ setupTerrainCommands(terrainDa, conn);
+ terrainDa.Fill(ds.Tables["terrain"]);
// WORKAROUND: This is a work around for sqlite on
// windows, which gets really unhappy with blob columns
@@ -210,14 +218,57 @@ namespace OpenSim.DataStore.MonoSqlite
}
- public void StoreTerrain(double[,] ter)
+ public void StoreTerrain(double[,] ter, LLUUID regionID)
{
+ int revision = OpenSim.Framework.Utilities.Util.UnixTimeSinceEpoch();
+
+ MainLog.Instance.Verbose("DATASTORE", "Storing terrain revision r" + revision.ToString());
+
+ DataTable terrain = ds.Tables["terrain"];
+
+ DataRow newrow = terrain.NewRow();
+ fillTerrainRow(newrow, regionID, revision, ter);
+ terrain.Rows.Add(newrow);
+ Commit();
}
- public double[,] LoadTerrain()
+ public double[,] LoadTerrain(LLUUID regionID)
{
- return null;
+ double[,] terret = new double[256, 256];
+ terret.Initialize();
+
+ DataTable terrain = ds.Tables["terrain"];
+
+ DataRow[] rows = terrain.Select("RegionUUID = '" + regionID.ToString() + "'","Revision DESC");
+
+ int rev = 0;
+
+ if (rows.Length > 0)
+ {
+ DataRow row = rows[0];
+
+ byte[] heightmap = (byte[])row["Heightfield"];
+ for (int x = 0; x < 256; x++)
+ {
+ for (int y = 0; y < 256; y++)
+ {
+ terret[x, y] = BitConverter.ToDouble(heightmap, ((x * 256) + y) * 8);
+ }
+ }
+
+ rev = (int)row["Revision"];
+ }
+ else
+ {
+ MainLog.Instance.Verbose("DATASTORE", "No terrain found for region");
+ return null;
+ }
+
+
+ MainLog.Instance.Verbose("DATASTORE", "Loaded terrain revision r" + rev.ToString());
+
+ return terret;
}
public void RemoveLandObject(uint id)
@@ -240,6 +291,7 @@ namespace OpenSim.DataStore.MonoSqlite
lock (ds) {
primDa.Update(ds, "prims");
shapeDa.Update(ds, "primshapes");
+ terrainDa.Update(ds, "terrain");
ds.AcceptChanges();
}
}
@@ -263,6 +315,22 @@ namespace OpenSim.DataStore.MonoSqlite
dt.Columns.Add(col);
}
+ private DataTable createTerrainTable()
+ {
+ DataTable terrain = new DataTable("terrain");
+
+ createCol(terrain, "RegionUUID", typeof(System.String));
+ createCol(terrain, "Revision", typeof(System.Int32));
+ createCol(terrain, "Heightfield", typeof(System.Byte[]));
+
+ /* // Attempting to work out requirements to get SQLite to actually *save* the data.
+ createCol(terrain, "PrIndex", typeof(System.String));
+ terrain.PrimaryKey = new DataColumn[] { terrain.Columns["PrIndex"] };
+ */
+
+ return terrain;
+ }
+
private DataTable createPrimTable()
{
DataTable prims = new DataTable("prims");
@@ -431,6 +499,22 @@ namespace OpenSim.DataStore.MonoSqlite
return prim;
}
+ private void fillTerrainRow(DataRow row, LLUUID regionUUID, int rev, double[,] val)
+ {
+ row["RegionUUID"] = regionUUID;
+ row["Revision"] = rev;
+
+ System.IO.MemoryStream str = new System.IO.MemoryStream(65536 * sizeof(double));
+ System.IO.BinaryWriter bw = new System.IO.BinaryWriter(str);
+
+ // TODO: COMPATIBILITY - Add byte-order conversions
+ for (int x = 0; x < 256; x++)
+ for (int y = 0; y < 256; y++)
+ bw.Write(val[x, y]);
+
+ row["Heightfield"] = str.ToArray();
+ }
+
private void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID)
{
row["UUID"] = prim.UUID;
@@ -692,7 +776,7 @@ namespace OpenSim.DataStore.MonoSqlite
subsql += ",\n";
}
subsql += col.ColumnName + " " + sqliteType(col.DataType);
- if (col == dt.PrimaryKey[0])
+ if (dt.PrimaryKey.Length > 0 && col == dt.PrimaryKey[0])
{
subsql += " primary key";
}
@@ -746,6 +830,12 @@ namespace OpenSim.DataStore.MonoSqlite
da.DeleteCommand = delete;
}
+ private void setupTerrainCommands(SqliteDataAdapter da, SqliteConnection conn)
+ {
+ da.InsertCommand = createInsertCommand("terrain", ds.Tables["terrain"]);
+ da.InsertCommand.Connection = conn;
+ }
+
private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn)
{
da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]);
@@ -764,12 +854,15 @@ namespace OpenSim.DataStore.MonoSqlite
{
string createPrims = defineTable(createPrimTable());
string createShapes = defineTable(createShapeTable());
+ string createTerrain = defineTable(createTerrainTable());
SqliteCommand pcmd = new SqliteCommand(createPrims, conn);
SqliteCommand scmd = new SqliteCommand(createShapes, conn);
+ SqliteCommand tcmd = new SqliteCommand(createTerrain, conn);
conn.Open();
pcmd.ExecuteNonQuery();
scmd.ExecuteNonQuery();
+ tcmd.ExecuteNonQuery();
conn.Close();
}
@@ -779,12 +872,15 @@ namespace OpenSim.DataStore.MonoSqlite
SqliteDataAdapter pDa = new SqliteDataAdapter(primSelectCmd);
SqliteCommand shapeSelectCmd = new SqliteCommand(shapeSelect, conn);
SqliteDataAdapter sDa = new SqliteDataAdapter(shapeSelectCmd);
+ SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, conn);
+ SqliteDataAdapter tDa = new SqliteDataAdapter(terrainSelectCmd);
DataSet tmpDS = new DataSet();
try
{
pDa.Fill(tmpDS, "prims");
sDa.Fill(tmpDS, "primshapes");
+ tDa.Fill(tmpDS, "terrain");
}
catch (Mono.Data.SqliteClient.SqliteSyntaxException)
{
@@ -794,6 +890,7 @@ namespace OpenSim.DataStore.MonoSqlite
pDa.Fill(tmpDS, "prims");
sDa.Fill(tmpDS, "primshapes");
+ tDa.Fill(tmpDS, "terrain");
foreach (DataColumn col in createPrimTable().Columns)
{
@@ -811,6 +908,14 @@ namespace OpenSim.DataStore.MonoSqlite
return false;
}
}
+ foreach (DataColumn col in createTerrainTable().Columns)
+ {
+ if (!tmpDS.Tables["terrain"].Columns.Contains(col.ColumnName))
+ {
+ MainLog.Instance.Verbose("DATASTORE", "Missing require column:" + col.ColumnName);
+ return false;
+ }
+ }
return true;
}
@@ -834,6 +939,14 @@ namespace OpenSim.DataStore.MonoSqlite
{
return DbType.Double;
}
+ else if (type == typeof(System.Byte))
+ {
+ return DbType.Byte;
+ }
+ else if (type == typeof(System.Double))
+ {
+ return DbType.Double;
+ }
else if (type == typeof(System.Byte[]))
{
return DbType.Binary;
diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs
index 91b1914..f726ea2 100644
--- a/OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs
+++ b/OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs
@@ -61,12 +61,12 @@ namespace OpenSim.DataStore.NullStorage
return new List();
}
- public void StoreTerrain(double[,] ter)
+ public void StoreTerrain(double[,] ter, LLUUID regionID)
{
}
- public double[,] LoadTerrain()
+ public double[,] LoadTerrain(LLUUID regionID)
{
return null;
}
--
cgit v1.1