aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Simulation/Scenes/SceneBase.cs
diff options
context:
space:
mode:
authorMW2007-06-27 15:28:52 +0000
committerMW2007-06-27 15:28:52 +0000
commit646bbbc84b8010e0dacbeed5342cdb045f46cc49 (patch)
tree770b34d19855363c3c113ab9a0af9a56d821d887 /OpenSim/Region/Simulation/Scenes/SceneBase.cs
downloadopensim-SC-646bbbc84b8010e0dacbeed5342cdb045f46cc49.zip
opensim-SC-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.gz
opensim-SC-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.bz2
opensim-SC-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.xz
Some work on restructuring the namespaces / project names. Note this doesn't compile yet as not all the code has been changed to use the new namespaces. Am committing it now for feedback on the namespaces.
Diffstat (limited to 'OpenSim/Region/Simulation/Scenes/SceneBase.cs')
-rw-r--r--OpenSim/Region/Simulation/Scenes/SceneBase.cs201
1 files changed, 201 insertions, 0 deletions
diff --git a/OpenSim/Region/Simulation/Scenes/SceneBase.cs b/OpenSim/Region/Simulation/Scenes/SceneBase.cs
new file mode 100644
index 0000000..4dbd374
--- /dev/null
+++ b/OpenSim/Region/Simulation/Scenes/SceneBase.cs
@@ -0,0 +1,201 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using libsecondlife;
30using libsecondlife.Packets;
31using System.Collections.Generic;
32using System.Text;
33using System.Reflection;
34using System.IO;
35using System.Threading;
36using OpenSim.Physics.Manager;
37using OpenSim.Framework.Interfaces;
38using OpenSim.Framework.Types;
39using OpenSim.Framework.Inventory;
40using OpenSim.Region.Scripting;
41using OpenSim.Terrain;
42using OpenSim.Caches;
43
44namespace OpenSim.Region.Scenes
45{
46 public abstract class SceneBase : IWorld
47 {
48 public Dictionary<libsecondlife.LLUUID, Entity> Entities;
49 protected Dictionary<uint, IClientAPI> m_clientThreads;
50 protected ulong m_regionHandle;
51 protected string m_regionName;
52 protected RegionInfo m_regInfo;
53
54 public TerrainEngine Terrain;
55
56 public string m_datastore;
57 public ILocalStorage localStorage;
58
59 protected object m_syncRoot = new object();
60 private uint m_nextLocalId = 8880000;
61 protected AssetCache assetCache;
62
63 #region Update Methods
64 /// <summary>
65 /// Normally called once every frame/tick to let the world preform anything required (like running the physics simulation)
66 /// </summary>
67 public abstract void Update();
68
69 #endregion
70
71 #region Terrain Methods
72
73 /// <summary>
74 /// Loads the World heightmap
75 /// </summary>
76 public abstract void LoadWorldMap();
77
78 /// <summary>
79 /// Loads a new storage subsystem from a named library
80 /// </summary>
81 /// <param name="dllName">Storage Library</param>
82 /// <returns>Successful or not</returns>
83 public bool LoadStorageDLL(string dllName)
84 {
85 try
86 {
87 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
88 ILocalStorage store = null;
89
90 foreach (Type pluginType in pluginAssembly.GetTypes())
91 {
92 if (pluginType.IsPublic)
93 {
94 if (!pluginType.IsAbstract)
95 {
96 Type typeInterface = pluginType.GetInterface("ILocalStorage", true);
97
98 if (typeInterface != null)
99 {
100 ILocalStorage plug = (ILocalStorage)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
101 store = plug;
102
103 store.Initialise(this.m_datastore);
104 break;
105 }
106
107 typeInterface = null;
108 }
109 }
110 }
111 pluginAssembly = null;
112 this.localStorage = store;
113 return (store == null);
114 }
115 catch (Exception e)
116 {
117 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadStorageDLL() - Failed with exception " + e.ToString());
118 return false;
119 }
120 }
121
122
123 /// <summary>
124 /// Send the region heightmap to the client
125 /// </summary>
126 /// <param name="RemoteClient">Client to send to</param>
127 public virtual void SendLayerData(IClientAPI RemoteClient)
128 {
129 RemoteClient.SendLayerData(Terrain.getHeights1D());
130 }
131
132 /// <summary>
133 /// Sends a specified patch to a client
134 /// </summary>
135 /// <param name="px">Patch coordinate (x) 0..16</param>
136 /// <param name="py">Patch coordinate (y) 0..16</param>
137 /// <param name="RemoteClient">The client to send to</param>
138 public virtual void SendLayerData(int px, int py, IClientAPI RemoteClient)
139 {
140 RemoteClient.SendLayerData(px, py, Terrain.getHeights1D());
141 }
142
143 #endregion
144
145 #region Add/Remove Agent/Avatar
146 /// <summary>
147 ///
148 /// </summary>
149 /// <param name="remoteClient"></param>
150 /// <param name="agentID"></param>
151 /// <param name="child"></param>
152 public abstract void AddNewClient(IClientAPI remoteClient, LLUUID agentID, bool child);
153
154 /// <summary>
155 ///
156 /// </summary>
157 /// <param name="agentID"></param>
158 public abstract void RemoveClient(LLUUID agentID);
159
160 #endregion
161
162 /// <summary>
163 ///
164 /// </summary>
165 /// <returns></returns>
166 public virtual RegionInfo RegionInfo
167 {
168 get { return this.m_regInfo; }
169 }
170
171 public object SyncRoot
172 {
173 get { return m_syncRoot; }
174 }
175
176 public uint NextLocalId
177 {
178 get { return m_nextLocalId++; }
179 }
180
181 #region Shutdown
182 /// <summary>
183 /// Tidy before shutdown
184 /// </summary>
185 public virtual void Close()
186 {
187 try
188 {
189 this.localStorage.ShutDown();
190 }
191 catch (Exception e)
192 {
193 OpenSim.Framework.Console.MainLog.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, "World.cs: Close() - Failed with exception " + e.ToString());
194 }
195 }
196
197 #endregion
198
199
200 }
201}