From 73a36680bd5dacd4f2630c50115ef4c1f10dc387 Mon Sep 17 00:00:00 2001 From: mingchen Date: Wed, 6 Jun 2007 18:15:12 +0000 Subject: *Added new commands ('backup','show parcels','reset parcels') *Added parcel join support *Made parcel saving and loading much more efficient *Fixed bug that would not allow joining of parcel locally in the viewer (gives an error before sending to server) *Known Issue: Restoring parcels from storage is not working correctly. For now, do a 'reset parcels' to regenerate a standard parcel --- .../ClientView.ProcessPackets.cs | 5 ++ .../OpenSim.RegionServer/world/ParcelManager.cs | 66 +++++++++++----- .../world/World.PacketHandlers.cs | 22 +++++- OpenSim/OpenSim.RegionServer/world/World.cs | 8 +- .../LocalStorageBerkeleyDB/BDBLocalStorage.cs | 11 +++ .../LocalStorageDb4o/Db4LocalStorage.cs | 88 +++++++++++++++------- .../OpenSim.Storage.LocalStorageDb4o.csproj | 42 ++++++----- .../LocalStorageDb4o/UUIDPrimQuery.cs | 52 +++++++++++++ .../OpenSim.Storage/LocalStorageDb4o/UUIDQuery.cs | 52 ------------- .../LocalStorageSQLite/SQLiteLocalStorage.cs | 12 +++ OpenSim/OpenSim/OpenSimMain.cs | 21 +++++- 11 files changed, 256 insertions(+), 123 deletions(-) create mode 100644 OpenSim/OpenSim.Storage/LocalStorageDb4o/UUIDPrimQuery.cs delete mode 100644 OpenSim/OpenSim.Storage/LocalStorageDb4o/UUIDQuery.cs (limited to 'OpenSim') diff --git a/OpenSim/OpenSim.RegionServer/ClientView.ProcessPackets.cs b/OpenSim/OpenSim.RegionServer/ClientView.ProcessPackets.cs index 2a75205..e329f09 100644 --- a/OpenSim/OpenSim.RegionServer/ClientView.ProcessPackets.cs +++ b/OpenSim/OpenSim.RegionServer/ClientView.ProcessPackets.cs @@ -85,6 +85,7 @@ namespace OpenSim public event StatusChange OnChildAgentStatus; public event ParcelPropertiesRequest OnParcelPropertiesRequest; public event ParcelDivideRequest OnParcelDivideRequest; + public event ParcelJoinRequest OnParcelJoinRequest; protected override void ProcessInPacket(Packet Pack) { @@ -477,6 +478,10 @@ namespace OpenSim ParcelDividePacket parcelDivide = (ParcelDividePacket)Pack; OnParcelDivideRequest((int)Math.Round(parcelDivide.ParcelData.West), (int)Math.Round(parcelDivide.ParcelData.South), (int)Math.Round(parcelDivide.ParcelData.East), (int)Math.Round(parcelDivide.ParcelData.North), this); break; + case PacketType.ParcelJoin: + ParcelJoinPacket parcelJoin = (ParcelJoinPacket)Pack; + OnParcelJoinRequest((int)Math.Round(parcelJoin.ParcelData.West), (int)Math.Round(parcelJoin.ParcelData.South), (int)Math.Round(parcelJoin.ParcelData.East), (int)Math.Round(parcelJoin.ParcelData.North), this); + break; #endregion #region unimplemented handlers diff --git a/OpenSim/OpenSim.RegionServer/world/ParcelManager.cs b/OpenSim/OpenSim.RegionServer/world/ParcelManager.cs index 68e22db..c751b0b 100644 --- a/OpenSim/OpenSim.RegionServer/world/ParcelManager.cs +++ b/OpenSim/OpenSim.RegionServer/world/ParcelManager.cs @@ -38,6 +38,7 @@ namespace OpenSim.RegionServer.world { public delegate void ParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, bool snap_selection, ClientView remote_client); public delegate void ParcelDivideRequest(int west, int south, int east, int north, ClientView remote_client); + public delegate void ParcelJoinRequest(int west, int south, int east, int north, ClientView remote_client); #region ParcelManager Class /// @@ -63,6 +64,9 @@ namespace OpenSim.RegionServer.world public const byte PARCEL_FLAG_PROPERTY_BORDER_WEST = (byte)64; //Equals 01000000 public const byte PARCEL_FLAG_PROPERTY_BORDER_SOUTH = (byte)128; //Equals 10000000 + //RequestResults (I think these are right, they seem to work): + public const int PARCEL_RESULT_ONE_PARCEL = 0; // The request they made contained only one parcel + public const int PARCEL_RESULT_MULTIPLE_PARCELS = 1; // The request they made contained more than one parcel //These are other constants. Yay! public const int START_PARCEL_LOCAL_ID = 1; @@ -158,8 +162,26 @@ namespace OpenSim.RegionServer.world } } } + m_world.localStorage.RemoveParcel(parcelList[local_id].parcelData); parcelList.Remove(local_id); } + + public void performFinalParcelJoin(Parcel master, Parcel slave) + { + int x, y; + bool[,] parcelBitmapSlave = slave.getParcelBitmap(); + for (x = 0; x < 64; x++) + { + for (y = 0; y < 64; y++) + { + if (parcelBitmapSlave[x, y]) + { + parcelIDList[x, y] = master.parcelData.localID; + } + } + } + removeParcel(slave.parcelData.localID); + } /// /// Get the parcel at the specified point /// @@ -228,6 +250,7 @@ namespace OpenSim.RegionServer.world //Lets create a new parcel with bitmap activated at that point (keeping the old parcels info) Parcel newParcel = startParcel.Copy(); newParcel.parcelData.parcelName = "Subdivision of " + newParcel.parcelData.parcelName; + newParcel.parcelData.globalID = LLUUID.Random(); newParcel.setParcelBitmap(Parcel.getSquareParcelBitmap(start_x, start_y, end_x, end_y)); @@ -257,6 +280,10 @@ namespace OpenSim.RegionServer.world /// Returns true if successful public bool join(int start_x, int start_y, int end_x, int end_y, LLUUID attempting_user_id) { + end_x -= 4; + end_y -= 4; + Console.WriteLine("Joining Parcels between (" + start_x + ", " + start_y + ") and (" + end_x + ", " + end_y + ")"); + //NOTE: The following only connects the parcels in each corner and not all the parcels that are within the selection box! //This should be fixed later -- somewhat "incomplete code" --Ming Parcel startParcel, endParcel; @@ -270,6 +297,11 @@ namespace OpenSim.RegionServer.world { return false; //Error occured when trying to get the start and end parcels } + if (startParcel == endParcel) + { + return false; //Subdivision of the same parcel is not allowed + } + //Check the parcel owners: if (startParcel.parcelData.ownerID != endParcel.parcelData.ownerID) { @@ -281,12 +313,11 @@ namespace OpenSim.RegionServer.world return false; } + Console.WriteLine("Performing Join on parcel: " + startParcel.parcelData.parcelName + " - " + startParcel.parcelData.area + "sqm and " + endParcel.parcelData.parcelName + " - " + endParcel.parcelData.area + "sqm"); //Same owners! Lets join them //Merge them to startParcel parcelList[startParcel.parcelData.localID].setParcelBitmap(Parcel.mergeParcelBitmaps(startParcel.getParcelBitmap(), endParcel.getParcelBitmap())); - - //Remove the old parcel - parcelList.Remove(endParcel.parcelData.localID); + performFinalParcelJoin(startParcel, endParcel); return true; @@ -386,6 +417,7 @@ namespace OpenSim.RegionServer.world { //Remove all the parcels in the sim and add a blank, full sim parcel set to public parcelList.Clear(); + lastParcelLocalID = START_PARCEL_LOCAL_ID - 1; parcelIDList.Initialize(); Parcel fullSimParcel = new Parcel(LLUUID.Zero, false, m_world); @@ -475,7 +507,7 @@ namespace OpenSim.RegionServer.world /// ID sent by client for them to keep track of /// Bool sent by client for them to use /// Object representing the client - public void sendParcelProperties(int sequence_id, bool snap_selection, ClientView remote_client) + public void sendParcelProperties(int sequence_id, bool snap_selection, int request_result, ClientView remote_client) { ParcelPropertiesPacket updatePacket = new ParcelPropertiesPacket(); @@ -495,7 +527,7 @@ namespace OpenSim.RegionServer.world updatePacket.ParcelData.GroupPrims = parcelData.groupPrims; updatePacket.ParcelData.IsGroupOwned = parcelData.isGroupOwned; updatePacket.ParcelData.LandingType = (byte)0; //unemplemented - updatePacket.ParcelData.LocalID = (byte)parcelData.localID; + updatePacket.ParcelData.LocalID = parcelData.localID; updatePacket.ParcelData.MaxPrims = 1000; //unemplemented updatePacket.ParcelData.MediaAutoScale = (byte)0; //unemplemented updatePacket.ParcelData.MediaID = LLUUID.Zero; //unemplemented @@ -517,7 +549,7 @@ namespace OpenSim.RegionServer.world updatePacket.ParcelData.RegionDenyTransacted = false; //unemplemented updatePacket.ParcelData.RegionPushOverride = true; //unemplemented updatePacket.ParcelData.RentPrice = 0; //?? - updatePacket.ParcelData.RequestResult = 0;//?? + updatePacket.ParcelData.RequestResult = request_result; updatePacket.ParcelData.SalePrice = parcelData.salePrice; //unemplemented updatePacket.ParcelData.SelectedPrims = 0; //unemeplemented updatePacket.ParcelData.SelfCount = 0;//unemplemented @@ -646,17 +678,9 @@ namespace OpenSim.RegionServer.world private bool[,] convertBytesToParcelBitmap() { bool[,] tempConvertMap = new bool[64, 64]; - //00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 - //00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 - //00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 - //00000000 00000000 00000000 00000001 10000000 00000000 00000000 00000000 - //00000000 00000000 00000000 00000001 10000000 00000000 00000000 00000000 - //00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 - //00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 - //00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 - // + tempConvertMap.Initialize(); byte tempByte = 0; - int x = 63, y = 63, i = 0, bitNum = 0; + int x = 0, y = 0, i = 0, bitNum = 0; for(i = 0; i < 512; i++) { tempByte = parcelData.parcelBitmapByteArray[i]; @@ -664,13 +688,15 @@ namespace OpenSim.RegionServer.world { bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte)1); tempConvertMap[x, y] = bit; - x--; - if (x < 0) + x++; + if(x > 63) { - y--; - x = 63; + x = 0; + y++; } + } + } return tempConvertMap; } diff --git a/OpenSim/OpenSim.RegionServer/world/World.PacketHandlers.cs b/OpenSim/OpenSim.RegionServer/world/World.PacketHandlers.cs index 74a64a0..8513e30 100644 --- a/OpenSim/OpenSim.RegionServer/world/World.PacketHandlers.cs +++ b/OpenSim/OpenSim.RegionServer/world/World.PacketHandlers.cs @@ -325,7 +325,7 @@ namespace OpenSim.world { //Get the parcels within the bounds List temp = new List(); - int x, y; + int x, y, i; int inc_x = end_x - start_x; int inc_y = end_y - start_y; for(x = 0; x < inc_x; x++) @@ -335,13 +335,25 @@ namespace OpenSim.world OpenSim.RegionServer.world.Parcel currentParcel = parcelManager.getParcel(start_x + x, start_y + y); if(!temp.Contains(currentParcel)) { + currentParcel. + forceUpdateParcelInfo(); temp.Add(currentParcel); - currentParcel.forceUpdateParcelInfo(); - currentParcel.sendParcelProperties(sequence_id,snap_selection,remote_client); } } } + int requestResult = OpenSim.RegionServer.world.ParcelManager.PARCEL_RESULT_ONE_PARCEL; + if (temp.Count > 1) + { + requestResult = OpenSim.RegionServer.world.ParcelManager.PARCEL_RESULT_MULTIPLE_PARCELS; + } + + for (i = 0; i < temp.Count; i++) + { + temp[i].sendParcelProperties(sequence_id, snap_selection, requestResult, remote_client); + } + + parcelManager.sendParcelOverlay(remote_client); } @@ -349,6 +361,10 @@ namespace OpenSim.world { parcelManager.subdivide(west, south, east, north, remote_client.AgentID); } + void ParcelJoinRequest(int west, int south, int east, int north, ClientView remote_client) + { + parcelManager.join(west, south, east, north, remote_client.AgentID); + } #endregion /* diff --git a/OpenSim/OpenSim.RegionServer/world/World.cs b/OpenSim/OpenSim.RegionServer/world/World.cs index 0eea039..8b26ecd 100644 --- a/OpenSim/OpenSim.RegionServer/world/World.cs +++ b/OpenSim/OpenSim.RegionServer/world/World.cs @@ -282,10 +282,11 @@ namespace OpenSim.world //Parcel backup routines. Yay! ParcelData[] parcels = new ParcelData[parcelManager.parcelList.Count]; - int i; - for (i = 0; i < parcelManager.parcelList.Count; i++) + int i = 0; + foreach(OpenSim.RegionServer.world.Parcel parcel in parcelManager.parcelList.Values) { - parcels[i] = parcelManager.parcelList[OpenSim.RegionServer.world.ParcelManager.START_PARCEL_LOCAL_ID + i].parcelData; + parcels[i] = parcel.parcelData; + i++; } localStorage.SaveParcels(parcels); @@ -616,6 +617,7 @@ namespace OpenSim.world agentClient.OnParcelPropertiesRequest += new OpenSim.RegionServer.world.ParcelPropertiesRequest(ParcelPropertiesRequest); agentClient.OnParcelDivideRequest += new OpenSim.RegionServer.world.ParcelDivideRequest(ParcelDivideRequest); + agentClient.OnParcelJoinRequest+=new OpenSim.RegionServer.world.ParcelJoinRequest(ParcelJoinRequest); Avatar newAvatar = null; try { diff --git a/OpenSim/OpenSim.Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs b/OpenSim/OpenSim.Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs index 6228403..1818e3a 100644 --- a/OpenSim/OpenSim.Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs +++ b/OpenSim/OpenSim.Storage/LocalStorageBerkeleyDB/BDBLocalStorage.cs @@ -92,6 +92,17 @@ namespace OpenSim.Storage.LocalStorageBDB { } + public void SaveParcel(ParcelData parcel) + { + } + + public void RemoveParcel(ParcelData parcel) + { + } + + public void RemoveAllParcels() + { + } public void LoadParcels(ILocalStorageParcelReceiver recv) { diff --git a/OpenSim/OpenSim.Storage/LocalStorageDb4o/Db4LocalStorage.cs b/OpenSim/OpenSim.Storage/LocalStorageDb4o/Db4LocalStorage.cs index 2fb3c90..d7b9f38 100644 --- a/OpenSim/OpenSim.Storage/LocalStorageDb4o/Db4LocalStorage.cs +++ b/OpenSim/OpenSim.Storage/LocalStorageDb4o/Db4LocalStorage.cs @@ -71,7 +71,7 @@ namespace OpenSim.Storage.LocalStorageDb4o public void StorePrim(PrimData prim) { - IObjectSet result = db.Query(new UUIDQuery(prim.FullID)); + IObjectSet result = db.Query(new UUIDPrimQuery(prim.FullID)); if(result.Count>0) { //prim already in storage @@ -112,7 +112,7 @@ namespace OpenSim.Storage.LocalStorageDb4o public void RemovePrim(LLUUID primID) { - IObjectSet result = db.Query(new UUIDQuery(primID)); + IObjectSet result = db.Query(new UUIDPrimQuery(primID)); if(result.Count>0) { PrimData found = (PrimData) result.Next(); @@ -133,7 +133,6 @@ namespace OpenSim.Storage.LocalStorageDb4o public float[] LoadWorld() { OpenSim.Framework.Console.MainConsole.Instance.Verbose("LoadWorld() - Loading world...."); - //World blank = new World(); float[] heightmap = null; OpenSim.Framework.Console.MainConsole.Instance.Verbose("LoadWorld() - Looking for a heightmap in local DB"); IObjectSet world_result = db.Get(typeof(MapStorage)); @@ -144,21 +143,6 @@ namespace OpenSim.Storage.LocalStorageDb4o //blank.LandMap = map.Map; heightmap = map.Map; } - else - { - /* - OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LoadWorld() - No heightmap found, generating new one"); - HeightmapGenHills hills = new HeightmapGenHills(); - // blank.LandMap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false); - // heightmap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false); - heightmap = new float[256, 256]; - OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LoadWorld() - Saving heightmap to local database"); - MapStorage map = new MapStorage(); - map.Map = heightmap; //blank.LandMap; - db.Set(map); - db.Commit(); - */ - } return heightmap; } @@ -177,27 +161,77 @@ namespace OpenSim.Storage.LocalStorageDb4o db.Commit(); } - public void SaveParcels(ParcelData[] parcel_data) + public void SaveParcel(ParcelData parcel) { - MainConsole.Instance.Notice("Parcel Backup: Saving Parcels..."); - IObjectSet result = db.Get(typeof(ParcelData)); - foreach (ParcelData parcel in result) + IObjectSet result = db.Query(new UUIDParcelQuery(parcel.globalID)); + if (result.Count > 0) + { + //Old Parcel + ParcelData updateParcel = (ParcelData)result.Next(); + updateParcel.AABBMax = parcel.AABBMax; + updateParcel.AABBMin = parcel.AABBMin; + updateParcel.area = parcel.area; + updateParcel.auctionID = parcel.auctionID; + updateParcel.authBuyerID = parcel.authBuyerID; + updateParcel.category = parcel.category; + updateParcel.claimDate = parcel.claimDate; + updateParcel.claimPrice = parcel.claimPrice; + updateParcel.groupID = parcel.groupID; + updateParcel.groupPrims = parcel.groupPrims; + updateParcel.isGroupOwned = parcel.isGroupOwned; + updateParcel.localID = parcel.localID; + updateParcel.ownerID = parcel.ownerID; + updateParcel.parcelBitmapByteArray = (byte[])parcel.parcelBitmapByteArray.Clone(); + updateParcel.parcelDesc = parcel.parcelDesc; + updateParcel.parcelFlags = parcel.parcelFlags; + updateParcel.parcelName = parcel.parcelName; + updateParcel.parcelStatus = parcel.parcelStatus; + updateParcel.salePrice = parcel.salePrice; + + db.Set(updateParcel); + } + else { - db.Delete(parcel); + db.Set(parcel); } - MainConsole.Instance.Notice("Parcel Backup: Removing old entries complete. Adding new entries."); + db.Commit(); + } + + public void SaveParcels(ParcelData[] parcel_data) + { + MainConsole.Instance.Notice("Parcel Backup: Saving Parcels..."); int i; for (i = 0; i < parcel_data.GetLength(0); i++) { - MainConsole.Instance.Notice("Adding : " + i + " - SAMPLE: " + parcel_data[i].parcelBitmapByteArray[0]); - db.Set(parcel_data[i]); + SaveParcel(parcel_data[i]); } - db.Commit(); MainConsole.Instance.Notice("Parcel Backup: Parcel Save Complete"); } + public void RemoveParcel(ParcelData parcel) + { + IObjectSet result = db.Query(new UUIDParcelQuery(parcel.globalID)); + if (result.Count > 0) + { + db.Delete(result[0]); + } + db.Commit(); + } + public void RemoveAllParcels() + { + MainConsole.Instance.Notice("Parcel Backup: Removing all parcels..."); + IObjectSet result = db.Get(typeof(ParcelData)); + if (result.Count > 0) + { + foreach (ParcelData parcelData in result) + { + RemoveParcel(parcelData); + } + } + } + public void LoadParcels(ILocalStorageParcelReceiver recv) { MainConsole.Instance.Notice("Parcel Backup: Loading Parcels..."); diff --git a/OpenSim/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj b/OpenSim/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj index 9b4ff5d..231ba1d 100644 --- a/OpenSim/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj +++ b/OpenSim/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj @@ -1,4 +1,4 @@ - + Local 8.0.50727 @@ -6,7 +6,8 @@ {E1B79ECF-0000-0000-0000-000000000000} Debug AnyCPU - + + OpenSim.Storage.LocalStorageDb4o @@ -15,9 +16,11 @@ IE50 false Library - + + OpenSim.Storage.LocalStorageDb4o - + + @@ -28,7 +31,8 @@ TRACE;DEBUG - + + True 4096 False @@ -37,7 +41,8 @@ False False 4 - + + False @@ -46,7 +51,8 @@ TRACE - + + False 4096 True @@ -55,22 +61,23 @@ False False 4 - + + - + System.dll False - + System.Xml.dll False - + ..\..\..\bin\Db4objects.Db4o.dll False - + ..\..\..\bin\libsecondlife.dll False @@ -80,26 +87,27 @@ OpenSim.Framework {8ACA2445-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Framework.Console {A7CD0630-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False Code - + + Code Code - + Code @@ -110,4 +118,4 @@ - + \ No newline at end of file diff --git a/OpenSim/OpenSim.Storage/LocalStorageDb4o/UUIDPrimQuery.cs b/OpenSim/OpenSim.Storage/LocalStorageDb4o/UUIDPrimQuery.cs new file mode 100644 index 0000000..b2e8a91 --- /dev/null +++ b/OpenSim/OpenSim.Storage/LocalStorageDb4o/UUIDPrimQuery.cs @@ -0,0 +1,52 @@ +/* +* Copyright (c) Contributors, http://www.openmetaverse.org/ +* See CONTRIBUTORS.TXT for a full list of copyright holders. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are met: +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* * Neither the name of the OpenSim Project nor the +* names of its contributors may be used to endorse or promote products +* derived from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY +* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*/ +using System; +using System.Collections.Generic; +using System.Text; +using Db4objects.Db4o; +using Db4objects.Db4o.Query; +using libsecondlife; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Types; + +namespace OpenSim.Storage.LocalStorageDb4o +{ + public class UUIDPrimQuery : Predicate + { + private LLUUID _findID; + + public UUIDPrimQuery(LLUUID find) + { + _findID = find; + } + public bool Match(PrimData prim) + { + return (prim.FullID == _findID); + } + } +} diff --git a/OpenSim/OpenSim.Storage/LocalStorageDb4o/UUIDQuery.cs b/OpenSim/OpenSim.Storage/LocalStorageDb4o/UUIDQuery.cs deleted file mode 100644 index 4c0be60..0000000 --- a/OpenSim/OpenSim.Storage/LocalStorageDb4o/UUIDQuery.cs +++ /dev/null @@ -1,52 +0,0 @@ -/* -* Copyright (c) Contributors, http://www.openmetaverse.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ -using System; -using System.Collections.Generic; -using System.Text; -using Db4objects.Db4o; -using Db4objects.Db4o.Query; -using libsecondlife; -using OpenSim.Framework.Interfaces; -using OpenSim.Framework.Types; - -namespace OpenSim.Storage.LocalStorageDb4o -{ - public class UUIDQuery : Predicate - { - private LLUUID _findID; - - public UUIDQuery(LLUUID find) - { - _findID = find; - } - public bool Match(PrimData prim) - { - return (prim.FullID == _findID); - } - } -} diff --git a/OpenSim/OpenSim.Storage/LocalStorageSQLite/SQLiteLocalStorage.cs b/OpenSim/OpenSim.Storage/LocalStorageSQLite/SQLiteLocalStorage.cs index 2170898..8106727 100644 --- a/OpenSim/OpenSim.Storage/LocalStorageSQLite/SQLiteLocalStorage.cs +++ b/OpenSim/OpenSim.Storage/LocalStorageSQLite/SQLiteLocalStorage.cs @@ -173,6 +173,18 @@ namespace OpenSim.Storage.LocalStorageSQLite } + public void SaveParcel(ParcelData parcel) + { + } + + public void RemoveParcel(ParcelData parcel) + { + } + + public void RemoveAllParcels() + { + } + public void LoadParcels(ILocalStorageParcelReceiver recv) { recv.NoParcelDataFromStorage(); diff --git a/OpenSim/OpenSim/OpenSimMain.cs b/OpenSim/OpenSim/OpenSimMain.cs index bf0ae56..6db4572 100644 --- a/OpenSim/OpenSim/OpenSimMain.cs +++ b/OpenSim/OpenSim/OpenSimMain.cs @@ -205,7 +205,7 @@ namespace OpenSim } else { - m_console.Notice("Main.cs:Startup() - Grid Mode; Do not know how to get the user's master key yet!"); + m_console.Warn("Main.cs:Startup() - Grid Mode; Do not know how to get the user's master key yet!"); } m_console.Notice("Creating ParcelManager"); @@ -528,6 +528,15 @@ namespace OpenSim case "backup": LocalWorld.Backup(); break; + + case "reset": + if (cmdparams[0] == "parcels") + { + LocalWorld.localStorage.RemoveAllParcels(); + LocalWorld.localStorage.LoadParcels((ILocalStorageParcelReceiver)LocalWorld.parcelManager); + } + break; + default: m_console.Error("Unknown command"); break; @@ -558,6 +567,16 @@ namespace OpenSim } } break; + case "parcels": + foreach (OpenSim.RegionServer.world.Parcel parcel in LocalWorld.parcelManager.parcelList.Values) + { + m_console.Error("Parcel ID#" + parcel.parcelData.localID + "(Global UUID: " + parcel.parcelData.globalID + "):"); + m_console.Error("\tParcel Name: " + parcel.parcelData.parcelName); + m_console.Error("\tParcel Owner UUID: " + parcel.parcelData.ownerID); + m_console.Error("\tParcel Area: " + parcel.parcelData.area + "sqm"); + m_console.Error(" "); + } + break; } } #endregion -- cgit v1.1