aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim.RegionServer
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim.RegionServer')
-rw-r--r--OpenSim.RegionServer/OpenSim.RegionServer.csproj9
-rw-r--r--OpenSim.RegionServer/OpenSim.RegionServer.dll.build2
-rw-r--r--OpenSim.RegionServer/OpenSimMain.cs59
-rw-r--r--OpenSim.RegionServer/RegionInfo.cs229
-rw-r--r--OpenSim.RegionServer/world/World.cs4
5 files changed, 283 insertions, 20 deletions
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.csproj b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
index e293a8c..b9b440f 100644
--- a/OpenSim.RegionServer/OpenSim.RegionServer.csproj
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
@@ -92,6 +92,12 @@
92 <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> 92 <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
93 <Private>False</Private> 93 <Private>False</Private>
94 </ProjectReference> 94 </ProjectReference>
95 <ProjectReference Include="..\OpenSim.GenericConfig\Xml\OpenSim.GenericConfig.Xml.csproj">
96 <Name>OpenSim.GenericConfig.Xml</Name>
97 <Project>{E88EF749-0000-0000-0000-000000000000}</Project>
98 <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
99 <Private>False</Private>
100 </ProjectReference>
95 <ProjectReference Include="..\OpenSim.Physics\Manager\OpenSim.Physics.Manager.csproj"> 101 <ProjectReference Include="..\OpenSim.Physics\Manager\OpenSim.Physics.Manager.csproj">
96 <Name>OpenSim.Physics.Manager</Name> 102 <Name>OpenSim.Physics.Manager</Name>
97 <Project>{8BE16150-0000-0000-0000-000000000000}</Project> 103 <Project>{8BE16150-0000-0000-0000-000000000000}</Project>
@@ -127,6 +133,9 @@
127 <Compile Include="QueItem.cs"> 133 <Compile Include="QueItem.cs">
128 <SubType>Code</SubType> 134 <SubType>Code</SubType>
129 </Compile> 135 </Compile>
136 <Compile Include="RegionInfo.cs">
137 <SubType>Code</SubType>
138 </Compile>
130 <Compile Include="SimClient.cs"> 139 <Compile Include="SimClient.cs">
131 <SubType>Code</SubType> 140 <SubType>Code</SubType>
132 </Compile> 141 </Compile>
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
index 6f86970..926a310 100644
--- a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
@@ -18,6 +18,7 @@
18 <include name="OpenSimNetworkHandler.cs" /> 18 <include name="OpenSimNetworkHandler.cs" />
19 <include name="PacketServer.cs" /> 19 <include name="PacketServer.cs" />
20 <include name="QueItem.cs" /> 20 <include name="QueItem.cs" />
21 <include name="RegionInfo.cs" />
21 <include name="SimClient.cs" /> 22 <include name="SimClient.cs" />
22 <include name="SimConsole.cs" /> 23 <include name="SimConsole.cs" />
23 <include name="VersionInfo.cs" /> 24 <include name="VersionInfo.cs" />
@@ -47,6 +48,7 @@
47 <include name="../bin/Db4objects.Db4o.dll" /> 48 <include name="../bin/Db4objects.Db4o.dll" />
48 <include name="../bin/OpenSim.Framework.dll" /> 49 <include name="../bin/OpenSim.Framework.dll" />
49 <include name="../bin/OpenSim.Framework.Console.dll" /> 50 <include name="../bin/OpenSim.Framework.Console.dll" />
51 <include name="../bin/OpenSim.GenericConfig.Xml.dll" />
50 <include name="../bin/OpenSim.Physics.Manager.dll" /> 52 <include name="../bin/OpenSim.Physics.Manager.dll" />
51 <include name="../bin/OpenSim.Servers.dll" /> 53 <include name="../bin/OpenSim.Servers.dll" />
52 </references> 54 </references>
diff --git a/OpenSim.RegionServer/OpenSimMain.cs b/OpenSim.RegionServer/OpenSimMain.cs
index c0fe95b..8bbdcd5 100644
--- a/OpenSim.RegionServer/OpenSimMain.cs
+++ b/OpenSim.RegionServer/OpenSimMain.cs
@@ -45,6 +45,7 @@ using OpenSim.Assets;
45using OpenSim.CAPS; 45using OpenSim.CAPS;
46using OpenSim.Framework.Console; 46using OpenSim.Framework.Console;
47using OpenSim.Physics.Manager; 47using OpenSim.Physics.Manager;
48using OpenSim.GenericConfig;
48using Nwc.XmlRpc; 49using Nwc.XmlRpc;
49using OpenSim.Servers; 50using OpenSim.Servers;
50 51
@@ -53,7 +54,9 @@ namespace OpenSim
53 54
54 public class OpenSimMain : OpenSimNetworkHandler, conscmd_callback 55 public class OpenSimMain : OpenSimNetworkHandler, conscmd_callback
55 { 56 {
56 private SimConfig Cfg; 57 //private SimConfig Cfg;
58 private IGenericConfig localConfig;
59 //private IGenericConfig remoteConfig;
57 private PhysicsManager physManager; 60 private PhysicsManager physManager;
58 private Grid GridServers; 61 private Grid GridServers;
59 private BaseHttpServer _httpServer; 62 private BaseHttpServer _httpServer;
@@ -64,6 +67,7 @@ namespace OpenSim
64 //private Dictionary<uint, SimClient> ClientThreads = new Dictionary<uint, SimClient>(); 67 //private Dictionary<uint, SimClient> ClientThreads = new Dictionary<uint, SimClient>();
65 private Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>(); 68 private Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>();
66 private DateTime startuptime; 69 private DateTime startuptime;
70 private RegionInfo regionData;
67 71
68 public Socket Server; 72 public Socket Server;
69 private IPEndPoint ServerIncoming; 73 private IPEndPoint ServerIncoming;
@@ -74,7 +78,7 @@ namespace OpenSim
74 private AsyncCallback ReceivedData; 78 private AsyncCallback ReceivedData;
75 79
76 private System.Timers.Timer m_heartbeatTimer = new System.Timers.Timer(); 80 private System.Timers.Timer m_heartbeatTimer = new System.Timers.Timer();
77 private string ConfigDll = "OpenSim.Config.SimConfigDb4o.dll"; 81 //private string ConfigDll = "OpenSim.Config.SimConfigDb4o.dll";
78 public string m_physicsEngine; 82 public string m_physicsEngine;
79 public bool m_sandbox = false; 83 public bool m_sandbox = false;
80 public bool m_loginserver; 84 public bool m_loginserver;
@@ -94,6 +98,30 @@ namespace OpenSim
94 98
95 public virtual void StartUp() 99 public virtual void StartUp()
96 { 100 {
101 this.regionData = new RegionInfo();
102 try
103 {
104 this.localConfig = new XmlConfig("simconfig.xml");
105 this.localConfig.LoadData();
106 }
107 catch (Exception e)
108 {
109 Console.WriteLine(e.Message);
110 }
111
112 string configfromgrid = localConfig.GetAttribute("ConfigFromGrid");
113 if (configfromgrid == "true")
114 {
115 //config from remote server is not implemented yet
116 //this.remoteConfig = new RemoteConfig(localConfig.GetAttribute("RemoteConfigURL"), localConfig.GetAttribute("SimUUID"));
117 //this.remoteConfig.LoadData();
118 //this.regionData.InitConfig(this.m_sandbox, this.remoteConfig);
119 //this.remoteConfig.Close();
120 }
121 else
122 {
123 this.regionData.InitConfig(this.m_sandbox, this.localConfig);
124 }
97 125
98 GridServers = new Grid(); 126 GridServers = new Grid();
99 if (m_sandbox) 127 if (m_sandbox)
@@ -120,17 +148,14 @@ namespace OpenSim
120 148
121 // We check our local database first, then the grid for config options 149 // We check our local database first, then the grid for config options
122 m_console.WriteLine("Main.cs:Startup() - Loading configuration"); 150 m_console.WriteLine("Main.cs:Startup() - Loading configuration");
123 Cfg = this.LoadConfigDll(this.ConfigDll); 151 //Cfg = this.LoadConfigDll(this.ConfigDll);
124 Cfg.InitConfig(this.m_sandbox); 152 //Cfg.InitConfig(this.m_sandbox);
125 m_console.WriteLine("Main.cs:Startup() - Contacting gridserver");
126 Cfg.LoadFromGrid();
127 153
128 PacketServer packetServer = new PacketServer(this); 154 PacketServer packetServer = new PacketServer(this);
129 155
130 m_console.WriteLine("Main.cs:Startup() - We are " + Cfg.RegionName + " at " + Cfg.RegionLocX.ToString() + "," + Cfg.RegionLocY.ToString()); 156 m_console.WriteLine("Main.cs:Startup() - We are " + regionData.RegionName + " at " + regionData.RegionLocX.ToString() + "," + regionData.RegionLocY.ToString());
131 m_console.WriteLine("Initialising world"); 157 m_console.WriteLine("Initialising world");
132 LocalWorld = new World(this._packetServer.ClientThreads, Cfg.RegionHandle, Cfg.RegionName, Cfg); 158 LocalWorld = new World(this._packetServer.ClientThreads, regionData.RegionHandle, regionData.RegionName);
133 //LocalWorld.LandMap = Cfg.LoadWorld();
134 LocalWorld.InventoryCache = InventoryCache; 159 LocalWorld.InventoryCache = InventoryCache;
135 LocalWorld.AssetCache = AssetCache; 160 LocalWorld.AssetCache = AssetCache;
136 161
@@ -147,10 +172,10 @@ namespace OpenSim
147 LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this.m_physicsEngine); //should be reading from the config file what physics engine to use 172 LocalWorld.PhysScene = this.physManager.GetPhysicsScene(this.m_physicsEngine); //should be reading from the config file what physics engine to use
148 LocalWorld.PhysScene.SetTerrain(LocalWorld.LandMap); 173 LocalWorld.PhysScene.SetTerrain(LocalWorld.LandMap);
149 174
150 GridServers.AssetServer.SetServerInfo(Cfg.AssetURL, Cfg.AssetSendKey); 175 //should be passing a IGenericConfig object to these so they can read the config data they want from it
151 //GridServers.GridServer.SetServerInfo(Cfg.GridURL, Cfg.GridSendKey, Cfg.GridRecvKey); 176 GridServers.AssetServer.SetServerInfo(regionData.AssetURL, regionData.AssetSendKey);
152 IGridServer gridServer = GridServers.GridServer; 177 IGridServer gridServer = GridServers.GridServer;
153 gridServer.SetServerInfo(Cfg.GridURL, Cfg.GridSendKey, Cfg.GridRecvKey); 178 gridServer.SetServerInfo(regionData.GridURL, regionData.GridSendKey, regionData.GridRecvKey);
154 179
155 LocalWorld.LoadPrimsFromStorage(); 180 LocalWorld.LoadPrimsFromStorage();
156 181
@@ -161,7 +186,7 @@ namespace OpenSim
161 186
162 m_console.WriteLine("Main.cs:Startup() - Initialising HTTP server"); 187 m_console.WriteLine("Main.cs:Startup() - Initialising HTTP server");
163 // HttpServer = new SimCAPSHTTPServer(GridServers.GridServer, Cfg.IPListenPort); 188 // HttpServer = new SimCAPSHTTPServer(GridServers.GridServer, Cfg.IPListenPort);
164 _httpServer = new BaseHttpServer(Cfg.IPListenPort); 189 _httpServer = new BaseHttpServer(regionData.IPListenPort);
165 190
166 if (gridServer.GetName() == "Remote") 191 if (gridServer.GetName() == "Remote")
167 { 192 {
@@ -195,7 +220,7 @@ namespace OpenSim
195 bool sandBoxWithLoginServer = m_loginserver && m_sandbox; 220 bool sandBoxWithLoginServer = m_loginserver && m_sandbox;
196 if (sandBoxWithLoginServer) 221 if (sandBoxWithLoginServer)
197 { 222 {
198 loginServer = new LoginServer(gridServer, Cfg.IPListenAddr, Cfg.IPListenPort, this.user_accounts); 223 loginServer = new LoginServer(gridServer, regionData.IPListenAddr, regionData.IPListenPort, this.user_accounts);
199 loginServer.Startup(); 224 loginServer.Startup();
200 225
201 if( user_accounts ) 226 if( user_accounts )
@@ -294,9 +319,9 @@ namespace OpenSim
294 private void MainServerListener() 319 private void MainServerListener()
295 { 320 {
296 m_console.WriteLine("Main.cs:MainServerListener() - New thread started"); 321 m_console.WriteLine("Main.cs:MainServerListener() - New thread started");
297 m_console.WriteLine("Main.cs:MainServerListener() - Opening UDP socket on " + Cfg.IPListenAddr + ":" + Cfg.IPListenPort); 322 m_console.WriteLine("Main.cs:MainServerListener() - Opening UDP socket on " + regionData.IPListenAddr + ":" + regionData.IPListenPort);
298 323
299 ServerIncoming = new IPEndPoint(IPAddress.Any, Cfg.IPListenPort); 324 ServerIncoming = new IPEndPoint(IPAddress.Any, regionData.IPListenPort);
300 Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 325 Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
301 Server.Bind(ServerIncoming); 326 Server.Bind(ServerIncoming);
302 327
diff --git a/OpenSim.RegionServer/RegionInfo.cs b/OpenSim.RegionServer/RegionInfo.cs
new file mode 100644
index 0000000..15cc105
--- /dev/null
+++ b/OpenSim.RegionServer/RegionInfo.cs
@@ -0,0 +1,229 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using OpenSim.Framework.Interfaces;
5using OpenSim.Framework.Utilities;
6
7namespace OpenSim
8{
9 public class RegionInfo // could inherit from SimProfileBase
10 {
11 public string RegionName;
12
13 public uint RegionLocX;
14 public uint RegionLocY;
15 public ulong RegionHandle;
16
17 public int IPListenPort;
18 public string IPListenAddr;
19
20 //following should be removed and the GenericConfig object passed around,
21 //so each class (AssetServer, GridServer etc) can access what config data they want
22 public string AssetURL = "";
23 public string AssetSendKey = "";
24
25 public string GridURL = "";
26 public string GridSendKey = "";
27 public string GridRecvKey = "";
28 public string UserURL = "";
29 public string UserSendKey = "";
30 public string UserRecvKey = "";
31 private bool isSandbox;
32
33 public RegionInfo()
34 {
35
36 }
37
38 public void InitConfig(bool sandboxMode, IGenericConfig configData)
39 {
40 this.isSandbox = sandboxMode;
41 try
42 {
43 // Sim name
44 string attri ="";
45 attri = configData.GetAttribute("SimName");
46 if (attri == "")
47 {
48 this.RegionName = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Name [OpenSim test]: ", "OpenSim test");
49 configData.SetAttribute("SimName", this.RegionName);
50 }
51 else
52 {
53 this.RegionName = attri;
54 }
55 // Sim/Grid location X
56 attri = "";
57 attri = configData.GetAttribute("SimLocationX");
58 if (attri == "")
59 {
60 string location = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid Location X [997]: ", "997");
61 configData.SetAttribute("SimLocationX", location);
62 this.RegionLocX = (uint)Convert.ToInt32(location);
63 }
64 else
65 {
66 this.RegionLocX = (uint)Convert.ToInt32(attri);
67 }
68 // Sim/Grid location Y
69 attri = "";
70 attri = configData.GetAttribute("SimLocationY");
71 if (attri == "")
72 {
73 string location = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid Location Y [996]: ", "996");
74 configData.SetAttribute("SimLocationY", location);
75 this.RegionLocY = (uint)Convert.ToInt32(location);
76 }
77 else
78 {
79 this.RegionLocY = (uint)Convert.ToInt32(attri);
80 }
81 //Sim Listen Port
82 attri = "";
83 attri = configData.GetAttribute("SimListenPort");
84 if (attri == "")
85 {
86 string port = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("UDP port for client connections [9000]: ", "9000");
87 configData.SetAttribute("SimListenPort", port);
88 this.IPListenPort = Convert.ToInt32(port);
89 }
90 else
91 {
92 this.IPListenPort = Convert.ToInt32(attri);
93 }
94 //Sim Listen Address
95 attri = "";
96 attri = configData.GetAttribute("SimListenAddress");
97 if (attri == "")
98 {
99 this.IPListenAddr = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("IP Address to listen on for client connections [127.0.0.1]: ", "127.0.0.1");
100 configData.SetAttribute("SimListenAddress", this.IPListenAddr);
101 }
102 else
103 {
104 this.IPListenAddr = attri;
105 }
106
107 if (!isSandbox)
108 {
109 //shouldn't be reading this data in here, it should be up to the classes implementing the server interfaces to read what they need from the config object
110
111 // Asset Server URL
112 attri = "";
113 attri = configData.GetAttribute("AssetServerURL");
114 if (attri == "")
115 {
116 this.AssetURL = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Asset server URL: ");
117 configData.SetAttribute("AssetServerURL", this.AssetURL);
118 }
119 else
120 {
121 this.AssetURL = attri;
122 }
123 //Asset Server key
124 attri = "";
125 attri = configData.GetAttribute("AssetServerKey");
126 if (attri == "")
127 {
128 this.AssetSendKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Asset server key: ");
129 configData.SetAttribute("AssetServerKey", this.AssetSendKey);
130 }
131 else
132 {
133 this.AssetSendKey = attri;
134 }
135 //Grid Sever URL
136 attri = "";
137 attri = configData.GetAttribute("GridServerURL");
138 if (attri == "")
139 {
140 this.GridURL = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Grid server URL: ");
141 configData.SetAttribute("GridServerURL", this.GridURL);
142 }
143 else
144 {
145 this.GridURL = attri;
146 }
147 //Grid Send Key
148 attri = "";
149 attri = configData.GetAttribute("GridSendKey");
150 if (attri == "")
151 {
152 this.GridSendKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Key to send to grid server: ");
153 configData.SetAttribute("GridSendKey", this.GridSendKey);
154 }
155 else
156 {
157 this.GridSendKey = attri;
158 }
159 //Grid Receive Key
160 attri = "";
161 attri = configData.GetAttribute("GridRecvKey");
162 if (attri == "")
163 {
164 this.GridRecvKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Key to expect from grid server: ");
165 configData.SetAttribute("GridRecvKey", this.GridRecvKey);
166 }
167 else
168 {
169 this.GridRecvKey = attri;
170 }
171 //User Server URL
172 attri = "";
173 attri = configData.GetAttribute("UserServerURL");
174 if (attri == "")
175 {
176 this.UserURL = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("User server URL: ");
177 configData.SetAttribute("UserServerURL", this.UserURL);
178 }
179 else
180 {
181 this.UserURL = attri;
182 }
183 //User Send Key
184 attri = "";
185 attri = configData.GetAttribute("UserSendKey");
186 if (attri == "")
187 {
188 this.UserSendKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Key to send to user server: ");
189 configData.SetAttribute("UserSendKey", this.UserSendKey);
190 }
191 else
192 {
193 this.UserSendKey = attri;
194 }
195 //User Receive Key
196 attri = "";
197 attri = configData.GetAttribute("UserRecvKey");
198 if (attri == "")
199 {
200 this.UserRecvKey = OpenSim.Framework.Console.MainConsole.Instance.CmdPrompt("Key to expect from user server: ");
201 configData.SetAttribute("UserRecvKey", this.UserRecvKey);
202 }
203 else
204 {
205 this.UserRecvKey = attri;
206 }
207 }
208 this.RegionHandle = Util.UIntsToLong((RegionLocX * 256), (RegionLocY * 256));
209 configData.Commit();
210 }
211 catch (Exception e)
212 {
213 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Exception occured");
214 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(e.ToString());
215 }
216
217 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Sim settings loaded:");
218 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Name: " + this.RegionName);
219 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Region Location: [" + this.RegionLocX.ToString() + "," + this.RegionLocY + "]");
220 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Region Handle: " + this.RegionHandle.ToString());
221 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Listening on IP: " + this.IPListenAddr + ":" + this.IPListenPort);
222 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Sandbox Mode? " + isSandbox.ToString());
223 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Asset URL: " + this.AssetURL);
224 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Asset key: " + this.AssetSendKey);
225 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Grid URL: " + this.GridURL);
226 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Grid key: " + this.GridSendKey);
227 }
228 }
229}
diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs
index 4f8e53d..e848cad 100644
--- a/OpenSim.RegionServer/world/World.cs
+++ b/OpenSim.RegionServer/world/World.cs
@@ -31,16 +31,14 @@ namespace OpenSim.world
31 private Dictionary<uint, SimClient> m_clientThreads; 31 private Dictionary<uint, SimClient> m_clientThreads;
32 private ulong m_regionHandle; 32 private ulong m_regionHandle;
33 private string m_regionName; 33 private string m_regionName;
34 private SimConfig m_cfg;
35 private InventoryCache _inventoryCache; 34 private InventoryCache _inventoryCache;
36 private AssetCache _assetCache; 35 private AssetCache _assetCache;
37 36
38 public World(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, string regionName, SimConfig cfg) 37 public World(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, string regionName)
39 { 38 {
40 m_clientThreads = clientThreads; 39 m_clientThreads = clientThreads;
41 m_regionHandle = regionHandle; 40 m_regionHandle = regionHandle;
42 m_regionName = regionName; 41 m_regionName = regionName;
43 m_cfg = cfg;
44 42
45 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance"); 43 OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance");
46 Entities = new Dictionary<libsecondlife.LLUUID, Entity>(); 44 Entities = new Dictionary<libsecondlife.LLUUID, Entity>();