From d3766d0aef46c53b9e92afa77ffaa33817c7a04a Mon Sep 17 00:00:00 2001 From: MW Date: Wed, 4 Apr 2007 18:26:33 +0000 Subject: Deleted OpenSim.Config/SimConfigDb4o, as it hasn't been used for a while now. Split World class into two partial classes --- OpenSim.RegionServer/OpenSim.RegionServer.csproj | 3 + .../OpenSim.RegionServer.dll.build | 1 + OpenSim.RegionServer/SimClient.cs | 7 +- OpenSim.RegionServer/world/World.cs | 224 +++------------------ OpenSim.RegionServer/world/WorldPacketHandlers.cs | 200 ++++++++++++++++++ 5 files changed, 237 insertions(+), 198 deletions(-) create mode 100644 OpenSim.RegionServer/world/WorldPacketHandlers.cs (limited to 'OpenSim.RegionServer') diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.csproj b/OpenSim.RegionServer/OpenSim.RegionServer.csproj index cee91f8..73f523a 100644 --- a/OpenSim.RegionServer/OpenSim.RegionServer.csproj +++ b/OpenSim.RegionServer/OpenSim.RegionServer.csproj @@ -190,6 +190,9 @@ Code + + Code + Code diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build index c0289e7..7488a3e 100644 --- a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build +++ b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build @@ -37,6 +37,7 @@ + diff --git a/OpenSim.RegionServer/SimClient.cs b/OpenSim.RegionServer/SimClient.cs index 1564238..770573a 100644 --- a/OpenSim.RegionServer/SimClient.cs +++ b/OpenSim.RegionServer/SimClient.cs @@ -813,12 +813,13 @@ namespace OpenSim } m_gridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode); - lock (m_world.Entities) + /*lock (m_world.Entities) { m_world.Entities.Remove(this.AgentID); - } + }*/ + m_world.RemoveViewerAgent(this); //need to do other cleaning up here too - m_clientThreads.Remove(this.CircuitCode); //this.userEP); + m_clientThreads.Remove(this.CircuitCode); m_application.RemoveClientCircuit(this.CircuitCode); this.ClientThread.Abort(); return true; diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs index 4661a90..5e4a3d3 100644 --- a/OpenSim.RegionServer/world/World.cs +++ b/OpenSim.RegionServer/world/World.cs @@ -17,7 +17,7 @@ using OpenSim.RegionServer.world.scripting.Scripts; namespace OpenSim.world { - public class World : ILocalStorageReceiver + public partial class World : ILocalStorageReceiver { public object LockPhysicsEngine = new object(); public Dictionary Entities; @@ -86,10 +86,10 @@ namespace OpenSim.world if (this.m_scripts.TryGetValue(substring, out scriptFactory)) { - //Console.WriteLine("added script"); + //Console.WriteLine("added script"); this.AddScript(entity, scriptFactory()); } - + } public InventoryCache InventoryCache @@ -208,7 +208,6 @@ namespace OpenSim.world public void RegenerateTerrain(float[] newMap) { - this.LandMap = newMap; lock (this.LockPhysicsEngine) { @@ -309,8 +308,8 @@ namespace OpenSim.world Packet layerpack = TerrainManager.CreateLandPacket(LandMap, patches); RemoteClient.OutPacket(layerpack); - } + public void GetInitialPrims(SimClient RemoteClient) { foreach (libsecondlife.LLUUID UUID in Entities.Keys) @@ -323,19 +322,38 @@ namespace OpenSim.world } } - public void AddViewerAgent(SimClient AgentClient) + public void AddViewerAgent(SimClient agentClient) { OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent"); - Avatar NewAvatar = new Avatar(AgentClient, this, m_regionName, m_clientThreads, m_regionHandle); + Avatar newAvatar = new Avatar(agentClient, this, m_regionName, m_clientThreads, m_regionHandle); OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world"); OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake "); - NewAvatar.SendRegionHandshake(this); - PhysicsVector pVec = new PhysicsVector(NewAvatar.Pos.X, NewAvatar.Pos.Y, NewAvatar.Pos.Z); + newAvatar.SendRegionHandshake(this); + PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z); lock (this.LockPhysicsEngine) { - NewAvatar.PhysActor = this.phyScene.AddAvatar(pVec); + newAvatar.PhysActor = this.phyScene.AddAvatar(pVec); + } + lock (Entities) + { + this.Entities.Add(agentClient.AgentID, newAvatar); + } + lock (Avatars) + { + this.Avatars.Add(agentClient.AgentID, newAvatar); + } + } + + public void RemoveViewerAgent(SimClient agentClient) + { + lock (Entities) + { + Entities.Remove(agentClient.AgentID); + } + lock (Avatars) + { + Avatars.Remove(agentClient.AgentID); } - this.Entities.Add(AgentClient.AgentID, NewAvatar); } public void AddNewPrim(ObjectAddPacket addPacket, SimClient AgentClient) @@ -357,94 +375,6 @@ namespace OpenSim.world this._primCount++; } - public bool DeRezObject(SimClient simClient, Packet packet) - { - DeRezObjectPacket DeRezPacket = (DeRezObjectPacket)packet; - // Console.WriteLine(DeRezPacket); - //Needs to delete object from physics at a later date - if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero) - { - libsecondlife.LLUUID[] DeRezEnts; - DeRezEnts = new libsecondlife.LLUUID[DeRezPacket.ObjectData.Length]; - int i = 0; - foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) - { - - //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString()); - foreach (Entity ent in this.Entities.Values) - { - if (ent.localid == Data.ObjectLocalID) - { - DeRezEnts[i++] = ent.uuid; - this.localStorage.RemovePrim(ent.uuid); - KillObjectPacket kill = new KillObjectPacket(); - kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; - kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); - kill.ObjectData[0].ID = ent.localid; - foreach (SimClient client in m_clientThreads.Values) - { - client.OutPacket(kill); - } - //Uncommenting this means an old UUID will be re-used, thus crashing the asset server - //Uncomment when prim/object UUIDs are random or such - //2007-03-22 - Randomskk - //this._primCount--; - OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Deleted UUID " + ent.uuid); - } - } - } - foreach (libsecondlife.LLUUID uuid in DeRezEnts) - { - lock (Entities) - { - Entities.Remove(uuid); - } - } - } - else - { - foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) - { - Entity selectedEnt = null; - //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString()); - foreach (Entity ent in this.Entities.Values) - { - if (ent.localid == Data.ObjectLocalID) - { - AssetBase primAsset = new AssetBase(); - primAsset.FullID = LLUUID.Random();//DeRezPacket.AgentBlock.TransactionID.Combine(LLUUID.Zero); //should be combining with securesessionid - primAsset.InvType = 6; - primAsset.Type = 6; - primAsset.Name = "Prim"; - primAsset.Description = ""; - primAsset.Data = ((Primitive)ent).GetByteArray(); - this._assetCache.AddAsset(primAsset); - this._inventoryCache.AddNewInventoryItem(simClient, DeRezPacket.AgentBlock.DestinationID, primAsset); - selectedEnt = ent; - break; - } - } - if (selectedEnt != null) - { - this.localStorage.RemovePrim(selectedEnt.uuid); - KillObjectPacket kill = new KillObjectPacket(); - kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; - kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); - kill.ObjectData[0].ID = selectedEnt.localid; - foreach (SimClient client in m_clientThreads.Values) - { - client.OutPacket(kill); - } - lock (Entities) - { - Entities.Remove(selectedEnt.uuid); - } - } - } - } - return true; - } - public bool Backup() { @@ -456,100 +386,6 @@ namespace OpenSim.world return true; } - #region Packet Handlers - public bool ModifyTerrain(SimClient simClient, Packet packet) - { - ModifyLandPacket modify = (ModifyLandPacket)packet; - - switch (modify.ModifyBlock.Action) - { - case 1: - // raise terrain - if (modify.ParcelData.Length > 0) - { - int mody = (int)modify.ParcelData[0].North; - int modx = (int)modify.ParcelData[0].West; - lock (LandMap) - { - LandMap[(mody * 256) + modx - 1] += 0.05f; - LandMap[(mody * 256) + modx] += 0.1f; - LandMap[(mody * 256) + modx + 1] += 0.05f; - LandMap[((mody + 1) * 256) + modx] += 0.05f; - LandMap[((mody - 1) * 256) + modx] += 0.05f; - } - RegenerateTerrain(true, modx, mody); - } - break; - case 2: - //lower terrain - if (modify.ParcelData.Length > 0) - { - int mody = (int)modify.ParcelData[0].North; - int modx = (int)modify.ParcelData[0].West; - lock (LandMap) - { - LandMap[(mody * 256) + modx - 1] -= 0.05f; - LandMap[(mody * 256) + modx] -= 0.1f; - LandMap[(mody * 256) + modx + 1] -= 0.05f; - LandMap[((mody + 1) * 256) + modx] -= 0.05f; - LandMap[((mody - 1) * 256) + modx] -= 0.05f; - } - RegenerateTerrain(true, modx, mody); - } - break; - } - return true; - } - - public bool SimChat(SimClient simClient, Packet packet) - { - System.Text.Encoding enc = System.Text.Encoding.ASCII; - ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)packet; - if (Helpers.FieldToString(inchatpack.ChatData.Message) == "") - { - //empty message so don't bother with it - return true; - } - - libsecondlife.Packets.ChatFromSimulatorPacket reply = new ChatFromSimulatorPacket(); - reply.ChatData.Audible = 1; - reply.ChatData.Message = inchatpack.ChatData.Message; - reply.ChatData.ChatType = 1; - reply.ChatData.SourceType = 1; - reply.ChatData.Position = simClient.ClientAvatar.Pos; - reply.ChatData.FromName = enc.GetBytes(simClient.ClientAvatar.firstname + " " + simClient.ClientAvatar.lastname + "\0"); - reply.ChatData.OwnerID = simClient.AgentID; - reply.ChatData.SourceID = simClient.AgentID; - foreach (SimClient client in m_clientThreads.Values) - { - client.OutPacket(reply); - } - return true; - } - - public bool RezObject(SimClient simClient, Packet packet) - { - RezObjectPacket rezPacket = (RezObjectPacket)packet; - AgentInventory inven = this._inventoryCache.GetAgentsInventory(simClient.AgentID); - if (inven != null) - { - if (inven.InventoryItems.ContainsKey(rezPacket.InventoryData.ItemID)) - { - AssetBase asset = this._assetCache.GetAsset(inven.InventoryItems[rezPacket.InventoryData.ItemID].AssetID); - if (asset != null) - { - PrimData primd = new PrimData(asset.Data); - Primitive nPrim = new Primitive(m_clientThreads, m_regionHandle, this); - nPrim.CreateFromStorage(primd, rezPacket.RezData.RayEnd, this._primCount, true); - this.Entities.Add(nPrim.uuid, nPrim); - this._primCount++; - this._inventoryCache.DeleteInventoryItem(simClient, rezPacket.InventoryData.ItemID); - } - } - } - return true; - } - public void SetDefaultScripts() { this.m_scripts.Add("FollowRandomAvatar", delegate() @@ -558,7 +394,5 @@ namespace OpenSim.world }); } - - #endregion } } diff --git a/OpenSim.RegionServer/world/WorldPacketHandlers.cs b/OpenSim.RegionServer/world/WorldPacketHandlers.cs new file mode 100644 index 0000000..a155ffe --- /dev/null +++ b/OpenSim.RegionServer/world/WorldPacketHandlers.cs @@ -0,0 +1,200 @@ +using System; +using System.Collections.Generic; +using System.Text; +using libsecondlife; +using libsecondlife.Packets; +using OpenSim.Physics.Manager; +using OpenSim.Framework.Interfaces; +using OpenSim.Framework.Assets; +using OpenSim.Framework.Terrain; +using OpenSim.Framework.Inventory; +using OpenSim.Assets; + +namespace OpenSim.world +{ + partial class World + { + public bool ModifyTerrain(SimClient simClient, Packet packet) + { + ModifyLandPacket modify = (ModifyLandPacket)packet; + + switch (modify.ModifyBlock.Action) + { + case 1: + // raise terrain + if (modify.ParcelData.Length > 0) + { + int mody = (int)modify.ParcelData[0].North; + int modx = (int)modify.ParcelData[0].West; + lock (LandMap) + { + LandMap[(mody * 256) + modx - 1] += 0.05f; + LandMap[(mody * 256) + modx] += 0.1f; + LandMap[(mody * 256) + modx + 1] += 0.05f; + LandMap[((mody + 1) * 256) + modx] += 0.05f; + LandMap[((mody - 1) * 256) + modx] += 0.05f; + } + RegenerateTerrain(true, modx, mody); + } + break; + case 2: + //lower terrain + if (modify.ParcelData.Length > 0) + { + int mody = (int)modify.ParcelData[0].North; + int modx = (int)modify.ParcelData[0].West; + lock (LandMap) + { + LandMap[(mody * 256) + modx - 1] -= 0.05f; + LandMap[(mody * 256) + modx] -= 0.1f; + LandMap[(mody * 256) + modx + 1] -= 0.05f; + LandMap[((mody + 1) * 256) + modx] -= 0.05f; + LandMap[((mody - 1) * 256) + modx] -= 0.05f; + } + RegenerateTerrain(true, modx, mody); + } + break; + } + return true; + } + + public bool SimChat(SimClient simClient, Packet packet) + { + System.Text.Encoding enc = System.Text.Encoding.ASCII; + ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)packet; + if (Helpers.FieldToString(inchatpack.ChatData.Message) == "") + { + //empty message so don't bother with it + return true; + } + + libsecondlife.Packets.ChatFromSimulatorPacket reply = new ChatFromSimulatorPacket(); + reply.ChatData.Audible = 1; + reply.ChatData.Message = inchatpack.ChatData.Message; + reply.ChatData.ChatType = 1; + reply.ChatData.SourceType = 1; + reply.ChatData.Position = simClient.ClientAvatar.Pos; + reply.ChatData.FromName = enc.GetBytes(simClient.ClientAvatar.firstname + " " + simClient.ClientAvatar.lastname + "\0"); + reply.ChatData.OwnerID = simClient.AgentID; + reply.ChatData.SourceID = simClient.AgentID; + foreach (SimClient client in m_clientThreads.Values) + { + client.OutPacket(reply); + } + return true; + } + + public bool RezObject(SimClient simClient, Packet packet) + { + RezObjectPacket rezPacket = (RezObjectPacket)packet; + AgentInventory inven = this._inventoryCache.GetAgentsInventory(simClient.AgentID); + if (inven != null) + { + if (inven.InventoryItems.ContainsKey(rezPacket.InventoryData.ItemID)) + { + AssetBase asset = this._assetCache.GetAsset(inven.InventoryItems[rezPacket.InventoryData.ItemID].AssetID); + if (asset != null) + { + PrimData primd = new PrimData(asset.Data); + Primitive nPrim = new Primitive(m_clientThreads, m_regionHandle, this); + nPrim.CreateFromStorage(primd, rezPacket.RezData.RayEnd, this._primCount, true); + this.Entities.Add(nPrim.uuid, nPrim); + this._primCount++; + this._inventoryCache.DeleteInventoryItem(simClient, rezPacket.InventoryData.ItemID); + } + } + } + return true; + } + + public bool DeRezObject(SimClient simClient, Packet packet) + { + DeRezObjectPacket DeRezPacket = (DeRezObjectPacket)packet; + + //Needs to delete object from physics at a later date + if (DeRezPacket.AgentBlock.DestinationID == LLUUID.Zero) + { + //currently following code not used (or don't know of any case of destination being zero + libsecondlife.LLUUID[] DeRezEnts; + DeRezEnts = new libsecondlife.LLUUID[DeRezPacket.ObjectData.Length]; + int i = 0; + foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) + { + + //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString()); + foreach (Entity ent in this.Entities.Values) + { + if (ent.localid == Data.ObjectLocalID) + { + DeRezEnts[i++] = ent.uuid; + this.localStorage.RemovePrim(ent.uuid); + KillObjectPacket kill = new KillObjectPacket(); + kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; + kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); + kill.ObjectData[0].ID = ent.localid; + foreach (SimClient client in m_clientThreads.Values) + { + client.OutPacket(kill); + } + //Uncommenting this means an old UUID will be re-used, thus crashing the asset server + //Uncomment when prim/object UUIDs are random or such + //2007-03-22 - Randomskk + //this._primCount--; + OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Deleted UUID " + ent.uuid); + } + } + } + foreach (libsecondlife.LLUUID uuid in DeRezEnts) + { + lock (Entities) + { + Entities.Remove(uuid); + } + } + } + else + { + foreach (DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData) + { + Entity selectedEnt = null; + //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString()); + foreach (Entity ent in this.Entities.Values) + { + if (ent.localid == Data.ObjectLocalID) + { + AssetBase primAsset = new AssetBase(); + primAsset.FullID = LLUUID.Random();//DeRezPacket.AgentBlock.TransactionID.Combine(LLUUID.Zero); //should be combining with securesessionid + primAsset.InvType = 6; + primAsset.Type = 6; + primAsset.Name = "Prim"; + primAsset.Description = ""; + primAsset.Data = ((Primitive)ent).GetByteArray(); + this._assetCache.AddAsset(primAsset); + this._inventoryCache.AddNewInventoryItem(simClient, DeRezPacket.AgentBlock.DestinationID, primAsset); + selectedEnt = ent; + break; + } + } + if (selectedEnt != null) + { + this.localStorage.RemovePrim(selectedEnt.uuid); + KillObjectPacket kill = new KillObjectPacket(); + kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; + kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); + kill.ObjectData[0].ID = selectedEnt.localid; + foreach (SimClient client in m_clientThreads.Values) + { + client.OutPacket(kill); + } + lock (Entities) + { + Entities.Remove(selectedEnt.uuid); + } + } + } + } + return true; + } + + } +} -- cgit v1.1