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