aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes
diff options
context:
space:
mode:
authorMW2007-09-04 13:43:56 +0000
committerMW2007-09-04 13:43:56 +0000
commitbfd36e2e836f92539e68bba077104d5016c5bf8b (patch)
tree36491a61df9cb936500cf349fa7a1ac377b2f350 /OpenSim/Region/Environment/Scenes
parentreverting opensim.ini to proper default state (diff)
downloadopensim-SC-bfd36e2e836f92539e68bba077104d5016c5bf8b.zip
opensim-SC-bfd36e2e836f92539e68bba077104d5016c5bf8b.tar.gz
opensim-SC-bfd36e2e836f92539e68bba077104d5016c5bf8b.tar.bz2
opensim-SC-bfd36e2e836f92539e68bba077104d5016c5bf8b.tar.xz
Some work on Module loading/management.
Some more modules templates classes (hoping that someone will pick some of these and work on implementing them). Early version of the "Dynamic Texture Module", although currently there are no render modules included (so not really functional without them). Added osSetDynamicTextureURL script function, for attaching a dynamic texture to a prim. Some work on the console command handling. Added "change-region <regionname>" and "exit-region" so that after the use of change-region, the commands entered will apply to that region only. Then use exit-region to return to the top level (so commands then function as they did before and either apply to all regions or to the first region) (Note: this hasn't been tested very much)
Diffstat (limited to 'OpenSim/Region/Environment/Scenes')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs53
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs137
2 files changed, 114 insertions, 76 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
index a9ded3f..90e4a1f 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
@@ -35,6 +35,7 @@ using OpenSim.Framework.Types;
35using OpenSim.Framework.Communications.Caches; 35using OpenSim.Framework.Communications.Caches;
36using OpenSim.Framework.Data; 36using OpenSim.Framework.Data;
37using OpenSim.Framework.Utilities; 37using OpenSim.Framework.Utilities;
38using OpenSim.Region.Environment.Interfaces;
38 39
39namespace OpenSim.Region.Environment.Scenes 40namespace OpenSim.Region.Environment.Scenes
40{ 41{
@@ -94,7 +95,7 @@ namespace OpenSim.Region.Environment.Scenes
94 } 95 }
95 96
96 /// <summary> 97 /// <summary>
97 /// Should be removed soon as the Chat modules should take over this function 98 ///
98 /// </summary> 99 /// </summary>
99 /// <param name="message"></param> 100 /// <param name="message"></param>
100 /// <param name="type"></param> 101 /// <param name="type"></param>
@@ -103,56 +104,10 @@ namespace OpenSim.Region.Environment.Scenes
103 /// <param name="fromAgentID"></param> 104 /// <param name="fromAgentID"></param>
104 public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) 105 public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
105 { 106 {
106 ScenePresence avatar = null; 107 if (m_simChatModule != null)
107 if (this.Avatars.ContainsKey(fromAgentID))
108 { 108 {
109 avatar = this.Avatars[fromAgentID]; 109 m_simChatModule.SimChat(message, type, fromPos, fromName, fromAgentID);
110 fromPos = avatar.AbsolutePosition;
111 fromName = avatar.Firstname + " " + avatar.Lastname;
112 avatar = null;
113 } 110 }
114
115 this.ForEachScenePresence(delegate(ScenePresence presence)
116 {
117 int dis = -1000;
118 if (this.Avatars.ContainsKey(presence.ControllingClient.AgentId))
119 {
120 avatar = this.Avatars[presence.ControllingClient.AgentId];
121 dis = (int)avatar.AbsolutePosition.GetDistanceTo(fromPos);
122 }
123
124 switch (type)
125 {
126 case 0: // Whisper
127 if ((dis < 10) && (dis > -10))
128 {
129 //should change so the message is sent through the avatar rather than direct to the ClientView
130 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
131 fromAgentID);
132 }
133 break;
134 case 1: // Say
135 if ((dis < 30) && (dis > -30))
136 {
137 //Console.WriteLine("sending chat");
138 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
139 fromAgentID);
140 }
141 break;
142 case 2: // Shout
143 if ((dis < 100) && (dis > -100))
144 {
145 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
146 fromAgentID);
147 }
148 break;
149
150 case 0xff: // Broadcast
151 presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
152 fromAgentID);
153 break;
154 }
155 });
156 } 111 }
157 112
158 /// <summary> 113 /// <summary>
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 46fc86b..b92f8c8 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -78,20 +78,23 @@ namespace OpenSim.Region.Environment.Scenes
78 protected StorageManager storageManager; 78 protected StorageManager storageManager;
79 protected AgentCircuitManager authenticateHandler; 79 protected AgentCircuitManager authenticateHandler;
80 protected RegionCommsListener regionCommsHost; 80 protected RegionCommsListener regionCommsHost;
81 protected CommunicationsManager commsManager; 81 public CommunicationsManager commsManager;
82 // protected XferManager xferManager; 82 // protected XferManager xferManager;
83 83
84 protected Dictionary<LLUUID, Caps> capsHandlers = new Dictionary<LLUUID, Caps>(); 84 protected Dictionary<LLUUID, Caps> capsHandlers = new Dictionary<LLUUID, Caps>();
85 protected BaseHttpServer httpListener; 85 protected BaseHttpServer httpListener;
86 86
87 protected Dictionary<string, IRegionModule> Modules = new Dictionary<string, IRegionModule>(); 87 protected Dictionary<string, IRegionModule> Modules = new Dictionary<string, IRegionModule>();
88 protected Dictionary<string, object> APIMethods = new Dictionary<string, object>(); 88 public Dictionary<Type, object> ModuleInterfaces = new Dictionary<Type, object>();
89 protected Dictionary<string, object> ModuleAPIMethods = new Dictionary<string, object>();
89 90
90 //API method Delegates 91 //API method Delegates and interfaces
91 92
92 // this most likely shouldn't be handled as a API method like this, but doing it for testing purposes 93 // this most likely shouldn't be handled as a API method like this, but doing it for testing purposes
93 public ModuleAPIMethod2<bool, string, byte[]>AddXferFile = null; 94 public ModuleAPIMethod2<bool, string, byte[]> AddXferFile = null;
94 95
96 private ISimChat m_simChatModule = null;
97
95 #region Properties 98 #region Properties
96 99
97 public AgentCircuitManager AuthenticateHandler 100 public AgentCircuitManager AuthenticateHandler
@@ -152,7 +155,7 @@ namespace OpenSim.Region.Environment.Scenes
152 AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer, ModuleLoader moduleLoader) 155 AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer, ModuleLoader moduleLoader)
153 { 156 {
154 updateLock = new Mutex(false); 157 updateLock = new Mutex(false);
155 158
156 m_moduleLoader = moduleLoader; 159 m_moduleLoader = moduleLoader;
157 authenticateHandler = authen; 160 authenticateHandler = authen;
158 commsManager = commsMan; 161 commsManager = commsMan;
@@ -169,9 +172,6 @@ namespace OpenSim.Region.Environment.Scenes
169 m_eventManager = new EventManager(); 172 m_eventManager = new EventManager();
170 m_permissionManager = new PermissionManager(this); 173 m_permissionManager = new PermissionManager(this);
171 174
172 MainLog.Instance.Verbose("Loading Region Modules");
173 m_moduleLoader.CreateDefaultModules(this);
174
175 m_eventManager.OnParcelPrimCountAdd += 175 m_eventManager.OnParcelPrimCountAdd +=
176 m_LandManager.addPrimToLandPrimCounts; 176 m_LandManager.addPrimToLandPrimCounts;
177 177
@@ -189,13 +189,15 @@ namespace OpenSim.Region.Environment.Scenes
189 189
190 httpListener = httpServer; 190 httpListener = httpServer;
191 191
192 SetMethodDelegates();
193 } 192 }
194 193
195 #endregion 194 #endregion
196 195
197 private void SetMethodDelegates() 196 public void SetModuleInterfaces()
198 { 197 {
198 m_simChatModule = this.RequestModuleInterface<ISimChat>();
199
200 //should change so it uses the module interface functions
199 AddXferFile = (ModuleAPIMethod2<bool, string, byte[]>)this.RequestAPIMethod("API_AddXferFile"); 201 AddXferFile = (ModuleAPIMethod2<bool, string, byte[]>)this.RequestAPIMethod("API_AddXferFile");
200 } 202 }
201 203
@@ -526,7 +528,7 @@ namespace OpenSim.Region.Environment.Scenes
526 MainLog.Instance.Verbose("Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)"); 528 MainLog.Instance.Verbose("Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)");
527 } 529 }
528 530
529 531
530 532
531 /// <summary> 533 /// <summary>
532 /// Returns a new unallocated primitive ID 534 /// Returns a new unallocated primitive ID
@@ -635,12 +637,12 @@ namespace OpenSim.Region.Environment.Scenes
635 //obj.RegenerateFullIDs(); 637 //obj.RegenerateFullIDs();
636 AddEntity(obj); 638 AddEntity(obj);
637 639
638 SceneObjectPart rootPart = obj.GetChildPart(obj.UUID); 640 SceneObjectPart rootPart = obj.GetChildPart(obj.UUID);
639 rootPart.PhysActor = phyScene.AddPrim( 641 rootPart.PhysActor = phyScene.AddPrim(
640 new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y, rootPart.AbsolutePosition.Z), 642 new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y, rootPart.AbsolutePosition.Z),
641 new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z), 643 new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
642 new Axiom.Math.Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X, 644 new Axiom.Math.Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
643 rootPart.RotationOffset.Y, rootPart.RotationOffset.Z)); 645 rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
644 primCount++; 646 primCount++;
645 } 647 }
646 } 648 }
@@ -692,7 +694,7 @@ namespace OpenSim.Region.Environment.Scenes
692 694
693 protected virtual void SubscribeToClientEvents(IClientAPI client) 695 protected virtual void SubscribeToClientEvents(IClientAPI client)
694 { 696 {
695 // client.OnStartAnim += StartAnimation; 697 // client.OnStartAnim += StartAnimation;
696 client.OnRegionHandShakeReply += SendLayerData; 698 client.OnRegionHandShakeReply += SendLayerData;
697 //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims); 699 //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims);
698 client.OnModifyTerrain += ModifyTerrain; 700 client.OnModifyTerrain += ModifyTerrain;
@@ -742,7 +744,7 @@ namespace OpenSim.Region.Environment.Scenes
742 client.OnRezScript += RezScript; 744 client.OnRezScript += RezScript;
743 client.OnRemoveTaskItem += RemoveTaskInventory; 745 client.OnRemoveTaskItem += RemoveTaskInventory;
744 746
745 // client.OnRequestAvatarProperties += RequestAvatarProperty; 747 // client.OnRequestAvatarProperties += RequestAvatarProperty;
746 748
747 client.OnGrabObject += ProcessObjectGrab; 749 client.OnGrabObject += ProcessObjectGrab;
748 750
@@ -1071,13 +1073,12 @@ namespace OpenSim.Region.Environment.Scenes
1071 AgentCircuitData agent = remoteClient.RequestClientInfo(); 1073 AgentCircuitData agent = remoteClient.RequestClientInfo();
1072 agent.BaseFolder = LLUUID.Zero; 1074 agent.BaseFolder = LLUUID.Zero;
1073 agent.InventoryFolder = LLUUID.Zero; 1075 agent.InventoryFolder = LLUUID.Zero;
1074 // agent.startpos = new LLVector3(128, 128, 70); 1076 // agent.startpos = new LLVector3(128, 128, 70);
1075 agent.startpos = position; 1077 agent.startpos = position;
1076 agent.child = true; 1078 agent.child = true;
1077 commsManager.InterRegion.InformRegionOfChildAgent(regionHandle, agent); 1079 commsManager.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
1078 commsManager.InterRegion.ExpectAvatarCrossing(regionHandle, remoteClient.AgentId, position, false); 1080 commsManager.InterRegion.ExpectAvatarCrossing(regionHandle, remoteClient.AgentId, position, false);
1079 1081
1080 //TODO: following line is hard coded to port 9000, really need to change this as soon as possible
1081 AgentCircuitData circuitdata = remoteClient.RequestClientInfo(); 1082 AgentCircuitData circuitdata = remoteClient.RequestClientInfo();
1082 string capsPath = Util.GetCapsURL(remoteClient.AgentId); 1083 string capsPath = Util.GetCapsURL(remoteClient.AgentId);
1083 remoteClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4), capsPath); 1084 remoteClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4), capsPath);
@@ -1114,23 +1115,45 @@ namespace OpenSim.Region.Environment.Scenes
1114 } 1115 }
1115 } 1116 }
1116 1117
1118 //following delegate methods will be removed, so use the interface methods (below these)
1117 public void RegisterAPIMethod(string name, object method) 1119 public void RegisterAPIMethod(string name, object method)
1118 { 1120 {
1119 if (!this.APIMethods.ContainsKey(name)) 1121 if (!this.ModuleAPIMethods.ContainsKey(name))
1120 { 1122 {
1121 this.APIMethods.Add(name, method); 1123 this.ModuleAPIMethods.Add(name, method);
1122 } 1124 }
1123 } 1125 }
1124 1126
1125 public object RequestAPIMethod(string name) 1127 public object RequestAPIMethod(string name)
1126 { 1128 {
1127 if (this.APIMethods.ContainsKey(name)) 1129 if (this.ModuleAPIMethods.ContainsKey(name))
1128 { 1130 {
1129 return APIMethods[name]; 1131 return ModuleAPIMethods[name];
1130 } 1132 }
1131 return false; 1133 return false;
1132 } 1134 }
1133 1135
1136 public void RegisterModuleInterface<M>( M mod)
1137 {
1138 //Console.WriteLine("registering module interface " + typeof(M));
1139 if (!this.ModuleInterfaces.ContainsKey(typeof(M)))
1140 {
1141 ModuleInterfaces.Add(typeof(M), mod);
1142 }
1143 }
1144
1145 public T RequestModuleInterface<T>()
1146 {
1147 if (ModuleInterfaces.ContainsKey(typeof(T)))
1148 {
1149 return (T)ModuleInterfaces[typeof(T)];
1150 }
1151 else
1152 {
1153 return default(T);
1154 }
1155 }
1156
1134 public void SetTimePhase(int phase) 1157 public void SetTimePhase(int phase)
1135 { 1158 {
1136 m_timePhase = phase; 1159 m_timePhase = phase;
@@ -1205,6 +1228,49 @@ namespace OpenSim.Region.Environment.Scenes
1205 } 1228 }
1206 #endregion 1229 #endregion
1207 1230
1231 public void ProcessConsoleCmd(string command, string[] cmdparams)
1232 {
1233 switch (command)
1234 {
1235 case "save-xml":
1236 if (cmdparams.Length > 0)
1237 {
1238 SavePrimsToXml(cmdparams[0]);
1239 }
1240 else
1241 {
1242 SavePrimsToXml("test.xml");
1243 }
1244 break;
1245
1246 case "load-xml":
1247 if (cmdparams.Length > 0)
1248 {
1249 LoadPrimsFromXml(cmdparams[0]);
1250 }
1251 else
1252 {
1253 LoadPrimsFromXml("test.xml");
1254 }
1255 break;
1256
1257 case "set-time":
1258 break;
1259
1260 case "backup":
1261 Backup();
1262 break;
1263
1264 case "alert":
1265 HandleAlertCommand(cmdparams);
1266 break;
1267
1268 default:
1269 MainLog.Instance.Error("Unknown command: " + command);
1270 break;
1271 }
1272 }
1273
1208 #region Script Engine 1274 #region Script Engine
1209 private List<OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface> ScriptEngines = new List<OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface>(); 1275 private List<OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface> ScriptEngines = new List<OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface>();
1210 public void AddScriptEngine(OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface ScriptEngine, LogBase m_logger) 1276 public void AddScriptEngine(OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface ScriptEngine, LogBase m_logger)
@@ -1248,5 +1314,22 @@ namespace OpenSim.Region.Environment.Scenes
1248 } 1314 }
1249 return null; 1315 return null;
1250 } 1316 }
1317
1318 public SceneObjectPart GetSceneObjectPart(LLUUID fullID)
1319 {
1320 bool hasPrim = false;
1321 foreach (EntityBase ent in Entities.Values)
1322 {
1323 if (ent is SceneObjectGroup)
1324 {
1325 hasPrim = ((SceneObjectGroup)ent).HasChildPrim(fullID);
1326 if (hasPrim != false)
1327 {
1328 return ((SceneObjectGroup)ent).GetChildPart(fullID);
1329 }
1330 }
1331 }
1332 return null;
1333 }
1251 } 1334 }
1252} 1335}