aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Communications/Cache/AssetCache.cs4
-rw-r--r--OpenSim/Framework/Communications/Cache/AssetServer.cs4
-rw-r--r--OpenSim/Framework/Communications/Cache/AssetServerBase.cs4
-rw-r--r--OpenSim/Framework/Communications/Cache/SQLAssetServer.cs4
-rw-r--r--OpenSim/Framework/Communications/InventoryServiceBase.cs2
-rw-r--r--OpenSim/Framework/Communications/LoginService.cs2
-rw-r--r--OpenSim/Framework/Console/LogBase.cs63
-rw-r--r--OpenSim/Framework/General/Types/EstateSettings.cs8
-rw-r--r--OpenSim/Framework/Servers/BaseHttpServer.cs2
-rw-r--r--OpenSim/Region/Application/OpenSimMain.cs18
-rw-r--r--OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs4
-rw-r--r--OpenSim/Region/Environment/ModuleLoader.cs428
-rw-r--r--OpenSim/Region/Environment/Modules/ChatModule.cs381
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs8
-rw-r--r--OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs4
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs2
-rw-r--r--OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs121
-rw-r--r--OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs4
18 files changed, 495 insertions, 568 deletions
diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs
index 9dbd50e..17829b2 100644
--- a/OpenSim/Framework/Communications/Cache/AssetCache.cs
+++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs
@@ -72,7 +72,7 @@ namespace OpenSim.Framework.Communications.Cache
72 /// </summary> 72 /// </summary>
73 public AssetCache(IAssetServer assetServer) 73 public AssetCache(IAssetServer assetServer)
74 { 74 {
75 OpenSim.Framework.Console.MainLog.Instance.Verbose("ASSETSTORAGE","Creating Asset cache"); 75 System.Console.WriteLine("Creating Asset cache");
76 _assetServer = assetServer; 76 _assetServer = assetServer;
77 _assetServer.SetReceiver(this); 77 _assetServer.SetReceiver(this);
78 Assets = new Dictionary<LLUUID, AssetInfo>(); 78 Assets = new Dictionary<LLUUID, AssetInfo>();
@@ -89,7 +89,7 @@ namespace OpenSim.Framework.Communications.Cache
89 89
90 public AssetCache(string assetServerDLLName, string assetServerURL, string assetServerKey) 90 public AssetCache(string assetServerDLLName, string assetServerURL, string assetServerKey)
91 { 91 {
92 OpenSim.Framework.Console.MainLog.Instance.Verbose("ASSETSTORAGE", "Creating Asset cache"); 92 System.Console.WriteLine("Creating Asset cache");
93 _assetServer = this.LoadAssetDll(assetServerDLLName); 93 _assetServer = this.LoadAssetDll(assetServerDLLName);
94 94
95 95
diff --git a/OpenSim/Framework/Communications/Cache/AssetServer.cs b/OpenSim/Framework/Communications/Cache/AssetServer.cs
index aebda00..22bdc5c 100644
--- a/OpenSim/Framework/Communications/Cache/AssetServer.cs
+++ b/OpenSim/Framework/Communications/Cache/AssetServer.cs
@@ -51,7 +51,7 @@ namespace OpenSim.Framework.Communications.Cache
51 yapfile = File.Exists(Path.Combine(Util.dataDir(), "regionassets.yap")); 51 yapfile = File.Exists(Path.Combine(Util.dataDir(), "regionassets.yap"));
52 52
53 db = Db4oFactory.OpenFile(Path.Combine(Util.dataDir(), "regionassets.yap")); 53 db = Db4oFactory.OpenFile(Path.Combine(Util.dataDir(), "regionassets.yap"));
54 MainLog.Instance.Verbose("ASSETS","Db4 Asset database creation"); 54 MainLog.Instance.Verbose("Db4 Asset database creation");
55 55
56 if (!yapfile) 56 if (!yapfile)
57 { 57 {
@@ -75,7 +75,7 @@ namespace OpenSim.Framework.Communications.Cache
75 75
76 if (db != null) 76 if (db != null)
77 { 77 {
78 MainLog.Instance.Verbose("ASSETSERVER","Closing local asset server database"); 78 MainLog.Instance.Verbose("Closing local asset server database");
79 db.Close(); 79 db.Close();
80 } 80 }
81 } 81 }
diff --git a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs
index 685c0b9..08d5b87 100644
--- a/OpenSim/Framework/Communications/Cache/AssetServerBase.cs
+++ b/OpenSim/Framework/Communications/Cache/AssetServerBase.cs
@@ -36,8 +36,8 @@ namespace OpenSim.Framework.Communications.Cache
36 36
37 37
38 public AssetServerBase() 38 public AssetServerBase()
39 { 39 {
40 OpenSim.Framework.Console.MainLog.Instance.Verbose("ASSETSERVER","Starting Db4o asset storage system"); 40 System.Console.WriteLine("Starting Db4o asset storage system");
41 this._assetRequests = new BlockingQueue<ARequest>(); 41 this._assetRequests = new BlockingQueue<ARequest>();
42 42
43 this._localAssetServerThread = new Thread( RunRequests ); 43 this._localAssetServerThread = new Thread( RunRequests );
diff --git a/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs b/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs
index 580e5c4..69f83d2 100644
--- a/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs
+++ b/OpenSim/Framework/Communications/Cache/SQLAssetServer.cs
@@ -68,7 +68,7 @@ namespace OpenSim.Framework.Communications.Cache
68 m_assetProviderPlugin = plug; 68 m_assetProviderPlugin = plug;
69 m_assetProviderPlugin.Initialise(); 69 m_assetProviderPlugin.Initialise();
70 70
71 MainLog.Instance.Verbose("AssetStorage","Added " + m_assetProviderPlugin.Name + " " + m_assetProviderPlugin.Version); 71 MainLog.Instance.Verbose("AssetStorage: Added " + m_assetProviderPlugin.Name + " " + m_assetProviderPlugin.Version);
72 } 72 }
73 73
74 typeInterface = null; 74 typeInterface = null;
@@ -92,7 +92,7 @@ namespace OpenSim.Framework.Communications.Cache
92 { 92 {
93 ARequest req = this._assetRequests.Dequeue(); 93 ARequest req = this._assetRequests.Dequeue();
94 94
95 MainLog.Instance.Verbose("AssetStorage","Requesting asset: " + req.AssetID); 95 MainLog.Instance.Verbose("Requesting asset: " + req.AssetID);
96 96
97 AssetBase asset = null; 97 AssetBase asset = null;
98 lock (syncLock) 98 lock (syncLock)
diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Framework/Communications/InventoryServiceBase.cs
index 06a1ca8..65eb509 100644
--- a/OpenSim/Framework/Communications/InventoryServiceBase.cs
+++ b/OpenSim/Framework/Communications/InventoryServiceBase.cs
@@ -70,7 +70,7 @@ namespace OpenSim.Framework.Communications
70 (IInventoryData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); 70 (IInventoryData)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
71 plug.Initialise(); 71 plug.Initialise();
72 this.m_plugins.Add(plug.getName(), plug); 72 this.m_plugins.Add(plug.getName(), plug);
73 MainLog.Instance.Verbose("INVENTORY","Added IInventoryData Interface"); 73 MainLog.Instance.Verbose("Inventorystorage: Added IInventoryData Interface");
74 } 74 }
75 } 75 }
76 } 76 }
diff --git a/OpenSim/Framework/Communications/LoginService.cs b/OpenSim/Framework/Communications/LoginService.cs
index f4648df..674c746 100644
--- a/OpenSim/Framework/Communications/LoginService.cs
+++ b/OpenSim/Framework/Communications/LoginService.cs
@@ -66,7 +66,7 @@ namespace OpenSim.Framework.UserManagement
66 public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request) 66 public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request)
67 { 67 {
68 68
69 MainLog.Instance.Verbose("LOGIN","Attempting login now..."); 69 MainLog.Instance.Verbose("Attempting login now...");
70 XmlRpcResponse response = new XmlRpcResponse(); 70 XmlRpcResponse response = new XmlRpcResponse();
71 Hashtable requestData = (Hashtable)request.Params[0]; 71 Hashtable requestData = (Hashtable)request.Params[0];
72 72
diff --git a/OpenSim/Framework/Console/LogBase.cs b/OpenSim/Framework/Console/LogBase.cs
index 246afa1..5a7ce4d 100644
--- a/OpenSim/Framework/Console/LogBase.cs
+++ b/OpenSim/Framework/Console/LogBase.cs
@@ -170,11 +170,8 @@ namespace OpenSim.Framework.Console
170 /// <param name="args">WriteLine-style message arguments</param> 170 /// <param name="args">WriteLine-style message arguments</param>
171 public void Verbose(string format, params object[] args) 171 public void Verbose(string format, params object[] args)
172 { 172 {
173 if (!m_silent) 173 WriteNewLine(ConsoleColor.Gray, format, args);
174 { 174 return;
175 WriteNewLine(ConsoleColor.Gray, format, args);
176 return;
177 }
178 } 175 }
179 176
180 /// <summary> 177 /// <summary>
@@ -185,12 +182,9 @@ namespace OpenSim.Framework.Console
185 /// <param name="args">WriteLine-style message arguments</param> 182 /// <param name="args">WriteLine-style message arguments</param>
186 public void Verbose(string sender, string format, params object[] args) 183 public void Verbose(string sender, string format, params object[] args)
187 { 184 {
188 if (!m_silent) 185 WritePrefixLine(DeriveColor(sender), sender);
189 { 186 WriteNewLine(ConsoleColor.Gray, format, args);
190 WritePrefixLine(DeriveColor(sender), sender); 187 return;
191 WriteNewLine(ConsoleColor.Gray, format, args);
192 return;
193 }
194 } 188 }
195 189
196 /// <summary> 190 /// <summary>
@@ -240,20 +234,22 @@ namespace OpenSim.Framework.Console
240 Log.Write(now); 234 Log.Write(now);
241 Log.WriteLine(format, args); 235 Log.WriteLine(format, args);
242 Log.Flush(); 236 Log.Flush();
243 237 if (!m_silent)
244 System.Console.Write(now);
245 try
246 { 238 {
247 if (color != ConsoleColor.White) 239 System.Console.Write(now);
248 System.Console.ForegroundColor = color; 240 try
241 {
242 if (color != ConsoleColor.White)
243 System.Console.ForegroundColor = color;
249 244
250 System.Console.WriteLine(format, args); 245 System.Console.WriteLine(format, args);
251 System.Console.ResetColor(); 246 System.Console.ResetColor();
252 } 247 }
253 catch (ArgumentNullException) 248 catch (ArgumentNullException)
254 { 249 {
255 // Some older systems dont support coloured text. 250 // Some older systems dont support coloured text.
256 System.Console.WriteLine(format, args); 251 System.Console.WriteLine(format, args);
252 }
257 } 253 }
258 return; 254 return;
259 } 255 }
@@ -269,16 +265,19 @@ namespace OpenSim.Framework.Console
269 265
270 System.Console.Write("["); 266 System.Console.Write("[");
271 267
272 try 268 if (!m_silent)
273 { 269 {
274 System.Console.ForegroundColor = color; 270 try
275 System.Console.Write(sender); 271 {
276 System.Console.ResetColor(); 272 System.Console.ForegroundColor = color;
277 } 273 System.Console.Write(sender);
278 catch (ArgumentNullException) 274 System.Console.ResetColor();
279 { 275 }
280 // Some older systems dont support coloured text. 276 catch (ArgumentNullException)
281 System.Console.WriteLine(sender); 277 {
278 // Some older systems dont support coloured text.
279 System.Console.WriteLine(sender);
280 }
282 } 281 }
283 282
284 System.Console.Write("] \t"); 283 System.Console.Write("] \t");
diff --git a/OpenSim/Framework/General/Types/EstateSettings.cs b/OpenSim/Framework/General/Types/EstateSettings.cs
index 2675e52..abdcf6f 100644
--- a/OpenSim/Framework/General/Types/EstateSettings.cs
+++ b/OpenSim/Framework/General/Types/EstateSettings.cs
@@ -557,12 +557,8 @@ namespace OpenSim.Framework.Types
557 private ConfigurationMember configMember; 557 private ConfigurationMember configMember;
558 public EstateSettings() 558 public EstateSettings()
559 { 559 {
560 // Temporary hack to prevent multiple loadings. 560 configMember = new ConfigurationMember(Path.Combine(Util.configDir(),"estate_settings.xml"), "ESTATE SETTINGS", this.loadConfigurationOptions, this.handleIncomingConfiguration);
561 if (configMember == null) 561 configMember.performConfigurationRetrieve();
562 {
563 configMember = new ConfigurationMember(Path.Combine(Util.configDir(), "estate_settings.xml"), "ESTATE SETTINGS", this.loadConfigurationOptions, this.handleIncomingConfiguration);
564 configMember.performConfigurationRetrieve();
565 }
566 } 562 }
567 563
568 public void loadConfigurationOptions() 564 public void loadConfigurationOptions()
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs
index 179a651..6d432fd 100644
--- a/OpenSim/Framework/Servers/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/BaseHttpServer.cs
@@ -224,7 +224,7 @@ namespace OpenSim.Framework.Servers
224 { 224 {
225 try 225 try
226 { 226 {
227 MainLog.Instance.Verbose("HTTPD", "Spawned main thread OK"); 227 MainLog.Instance.Status("HTTPD", "Spawned main thread OK");
228 m_httpListener = new HttpListener(); 228 m_httpListener = new HttpListener();
229 229
230 m_httpListener.Prefixes.Add("http://+:" + m_port + "/"); 230 m_httpListener.Prefixes.Add("http://+:" + m_port + "/");
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
index 9de3831..d2f5648 100644
--- a/OpenSim/Region/Application/OpenSimMain.cs
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -262,10 +262,8 @@ namespace OpenSim
262 } 262 }
263 else 263 else
264 { 264 {
265 MainLog.Instance.Verbose("STARTUP","No startup command script specified. Moving on..."); 265 MainLog.Instance.Verbose("No startup command script specified. Moving on...");
266 } 266 }
267
268 MainLog.Instance.Status("STARTUP","Startup complete, serving " + m_udpServers.Count.ToString() + " region(s)");
269 } 267 }
270 268
271 private static void CreateDefaultRegionInfoXml(string fileName) 269 private static void CreateDefaultRegionInfoXml(string fileName)
@@ -363,11 +361,11 @@ namespace OpenSim
363 RunCommandScript(m_shutdownCommandsFile); 361 RunCommandScript(m_shutdownCommandsFile);
364 } 362 }
365 363
366 m_log.Verbose("SHUTDOWN", "Closing all threads"); 364 m_log.Verbose("Closing all threads");
367 m_log.Verbose("SHUTDOWN", "Killing listener thread"); 365 m_log.Verbose("Killing listener thread");
368 m_log.Verbose("SHUTDOWN", "Killing clients"); 366 m_log.Verbose("Killing clients");
369 // IMPLEMENT THIS 367 // IMPLEMENT THIS
370 m_log.Verbose("SHUTDOWN", "Closing console and terminating"); 368 m_log.Verbose("Closing console and terminating");
371 369
372 m_sceneManager.Close(); 370 m_sceneManager.Close();
373 371
@@ -382,7 +380,7 @@ namespace OpenSim
382 /// <param name="fileName"></param> 380 /// <param name="fileName"></param>
383 private void RunCommandScript(string fileName) 381 private void RunCommandScript(string fileName)
384 { 382 {
385 MainLog.Instance.Verbose("COMMANDFILE", "Running " + fileName); 383 MainLog.Instance.Verbose("Running command script (" + fileName + ")");
386 if (File.Exists(fileName)) 384 if (File.Exists(fileName))
387 { 385 {
388 StreamReader readFile = File.OpenText(fileName); 386 StreamReader readFile = File.OpenText(fileName);
@@ -391,14 +389,14 @@ namespace OpenSim
391 { 389 {
392 if (currentCommand != "") 390 if (currentCommand != "")
393 { 391 {
394 MainLog.Instance.Verbose("COMMANDFILE", "Running '" + currentCommand + "'"); 392 MainLog.Instance.Verbose("Running '" + currentCommand + "'");
395 MainLog.Instance.MainLogRunCommand(currentCommand); 393 MainLog.Instance.MainLogRunCommand(currentCommand);
396 } 394 }
397 } 395 }
398 } 396 }
399 else 397 else
400 { 398 {
401 MainLog.Instance.Error("COMMANDFILE","Command script missing. Can not run commands"); 399 MainLog.Instance.Error("Command script missing. Can not run commands");
402 } 400 }
403 } 401 }
404 402
diff --git a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs
index e375343..1a00f2c 100644
--- a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs
+++ b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs
@@ -47,8 +47,8 @@ namespace OpenSim.Region.Environment.Interfaces
47 47
48 List<SceneObjectGroup> LoadObjects(LLUUID regionUUID); 48 List<SceneObjectGroup> LoadObjects(LLUUID regionUUID);
49 49
50 void StoreTerrain(double[,] terrain, LLUUID regionID); 50 void StoreTerrain(double[,] terrain);
51 double[,] LoadTerrain(LLUUID regionID); 51 double[,] LoadTerrain();
52 52
53 void StoreParcel(Land Parcel); 53 void StoreParcel(Land Parcel);
54 void RemoveLandObject(uint ID); 54 void RemoveLandObject(uint ID);
diff --git a/OpenSim/Region/Environment/ModuleLoader.cs b/OpenSim/Region/Environment/ModuleLoader.cs
index 4fc45a0..4c66d2e 100644
--- a/OpenSim/Region/Environment/ModuleLoader.cs
+++ b/OpenSim/Region/Environment/ModuleLoader.cs
@@ -1,214 +1,214 @@
1/* 1/*
2* Copyright (c) Contributors, http://opensimulator.org/ 2* Copyright (c) Contributors, http://opensimulator.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 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 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 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 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. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28 28
29using System; 29using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.IO; 31using System.IO;
32using System.Reflection; 32using System.Reflection;
33using OpenSim.Framework.Console; 33using OpenSim.Framework.Console;
34using OpenSim.Region.Environment.Interfaces; 34using OpenSim.Region.Environment.Interfaces;
35using OpenSim.Region.Environment.Modules; 35using OpenSim.Region.Environment.Modules;
36using OpenSim.Region.Environment.Scenes; 36using OpenSim.Region.Environment.Scenes;
37using Nini.Config; 37using Nini.Config;
38 38
39namespace OpenSim.Region.Environment 39namespace OpenSim.Region.Environment
40{ 40{
41 public class ModuleLoader 41 public class ModuleLoader
42 { 42 {
43 public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>(); 43 public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>();
44 44
45 public List<IRegionModule> LoadedModules = new List<IRegionModule>(); 45 public List<IRegionModule> LoadedModules = new List<IRegionModule>();
46 public Dictionary<string, IRegionModule> LoadedSharedModules = new Dictionary<string, IRegionModule>(); 46 public Dictionary<string, IRegionModule> LoadedSharedModules = new Dictionary<string, IRegionModule>();
47 private readonly LogBase m_log; 47 private readonly LogBase m_log;
48 private IConfigSource m_config; 48 private IConfigSource m_config;
49 49
50 public ModuleLoader(LogBase log, IConfigSource config) 50 public ModuleLoader(LogBase log, IConfigSource config)
51 { 51 {
52 m_log = log; 52 m_log = log;
53 m_config = config; 53 m_config = config;
54 } 54 }
55 55
56 public void PickupModules(Scene scene, string moduleDir) 56 public void PickupModules(Scene scene, string moduleDir)
57 { 57 {
58 DirectoryInfo dir = new DirectoryInfo(moduleDir); 58 DirectoryInfo dir = new DirectoryInfo(moduleDir);
59 59
60 foreach (FileInfo fileInfo in dir.GetFiles("*.dll")) 60 foreach (FileInfo fileInfo in dir.GetFiles("*.dll"))
61 { 61 {
62 LoadRegionModules(fileInfo.FullName, scene); 62 LoadRegionModules(fileInfo.FullName, scene);
63 } 63 }
64 } 64 }
65 65
66 public void LoadDefaultSharedModules() 66 public void LoadDefaultSharedModules()
67 { 67 {
68 DynamicTextureModule dynamicModule = new DynamicTextureModule(); 68 DynamicTextureModule dynamicModule = new DynamicTextureModule();
69 LoadedSharedModules.Add(dynamicModule.Name, dynamicModule); 69 LoadedSharedModules.Add(dynamicModule.Name, dynamicModule);
70 ChatModule chat = new ChatModule(); 70 ChatModule chat = new ChatModule();
71 LoadedSharedModules.Add(chat.Name, chat); 71 LoadedSharedModules.Add(chat.Name, chat);
72 InstantMessageModule imMod = new InstantMessageModule(); 72 InstantMessageModule imMod = new InstantMessageModule();
73 LoadedSharedModules.Add(imMod.Name, imMod); 73 LoadedSharedModules.Add(imMod.Name, imMod);
74 LoadImageURLModule loadMod = new LoadImageURLModule(); 74 LoadImageURLModule loadMod = new LoadImageURLModule();
75 LoadedSharedModules.Add(loadMod.Name, loadMod); 75 LoadedSharedModules.Add(loadMod.Name, loadMod);
76 } 76 }
77 77
78 public void InitialiseSharedModules(Scene scene) 78 public void InitialiseSharedModules(Scene scene)
79 { 79 {
80 foreach (IRegionModule module in LoadedSharedModules.Values) 80 foreach (IRegionModule module in LoadedSharedModules.Values)
81 { 81 {
82 module.Initialise(scene, m_config); 82 module.Initialise(scene, m_config);
83 scene.AddModule(module.Name, module); //should be doing this? 83 scene.AddModule(module.Name, module); //should be doing this?
84 } 84 }
85 } 85 }
86 86
87 public void InitializeModule(IRegionModule module, Scene scene) 87 public void InitializeModule(IRegionModule module, Scene scene)
88 { 88 {
89 module.Initialise(scene, m_config); 89 module.Initialise(scene, m_config);
90 scene.AddModule(module.Name, module); 90 scene.AddModule(module.Name, module);
91 LoadedModules.Add(module); 91 LoadedModules.Add(module);
92 } 92 }
93 93
94 /// <summary> 94 /// <summary>
95 /// Loads/initialises a Module instance that can be used by mutliple Regions 95 /// Loads/initialises a Module instance that can be used by mutliple Regions
96 /// </summary> 96 /// </summary>
97 /// <param name="dllName"></param> 97 /// <param name="dllName"></param>
98 /// <param name="moduleName"></param> 98 /// <param name="moduleName"></param>
99 /// <param name="scene"></param> 99 /// <param name="scene"></param>
100 public void LoadSharedModule(string dllName, string moduleName) 100 public void LoadSharedModule(string dllName, string moduleName)
101 { 101 {
102 IRegionModule module = LoadModule(dllName, moduleName); 102 IRegionModule module = LoadModule(dllName, moduleName);
103 if (module != null) 103 if (module != null)
104 { 104 {
105 LoadedSharedModules.Add(module.Name, module); 105 LoadedSharedModules.Add(module.Name, module);
106 } 106 }
107 } 107 }
108 108
109 public void LoadRegionModules(string dllName, Scene scene) 109 public void LoadRegionModules(string dllName, Scene scene)
110 { 110 {
111 IRegionModule[] modules = LoadModules(dllName); 111 IRegionModule[] modules = LoadModules(dllName);
112 112
113 if (modules.Length > 0) 113 if (modules.Length > 0)
114 { 114 {
115 m_log.Verbose("MODULES", "Found Module Library [{0}]", dllName ); 115 m_log.Verbose("MODULES", "Found Module Library [{0}]", dllName );
116 foreach (IRegionModule module in modules) 116 foreach (IRegionModule module in modules)
117 { 117 {
118 if (!module.IsSharedModule) 118 if (!module.IsSharedModule)
119 { 119 {
120 m_log.Verbose("MODULES", " [{0}]: Initializing.", module.Name); 120 m_log.Verbose("MODULES", " [{0}]: Initializing.", module.Name);
121 InitializeModule(module, scene); 121 InitializeModule(module, scene);
122 } 122 }
123 } 123 }
124 } 124 }
125 } 125 }
126 126
127 public void LoadRegionModule(string dllName, string moduleName, Scene scene) 127 public void LoadRegionModule(string dllName, string moduleName, Scene scene)
128 { 128 {
129 IRegionModule module = LoadModule(dllName, moduleName); 129 IRegionModule module = LoadModule(dllName, moduleName);
130 if (module != null) 130 if (module != null)
131 { 131 {
132 InitializeModule(module, scene); 132 InitializeModule(module, scene);
133 } 133 }
134 } 134 }
135 135
136 /// <summary> 136 /// <summary>
137 /// Loads a external Module (if not already loaded) and creates a new instance of it. 137 /// Loads a external Module (if not already loaded) and creates a new instance of it.
138 /// </summary> 138 /// </summary>
139 /// <param name="dllName"></param> 139 /// <param name="dllName"></param>
140 /// <param name="moduleName"></param> 140 /// <param name="moduleName"></param>
141 /// <param name="scene"></param> 141 /// <param name="scene"></param>
142 public IRegionModule LoadModule(string dllName, string moduleName) 142 public IRegionModule LoadModule(string dllName, string moduleName)
143 { 143 {
144 IRegionModule[] modules = LoadModules(dllName); 144 IRegionModule[] modules = LoadModules(dllName);
145 145
146 foreach (IRegionModule module in modules) 146 foreach (IRegionModule module in modules)
147 { 147 {
148 if ((module != null) && (module.Name == moduleName)) 148 if ((module != null) && (module.Name == moduleName))
149 { 149 {
150 return module; 150 return module;
151 } 151 }
152 } 152 }
153 153
154 return null; 154 return null;
155 } 155 }
156 156
157 public IRegionModule[] LoadModules(string dllName) 157 public IRegionModule[] LoadModules(string dllName)
158 { 158 {
159 List<IRegionModule> modules = new List<IRegionModule>(); 159 List<IRegionModule> modules = new List<IRegionModule>();
160 160
161 Assembly pluginAssembly; 161 Assembly pluginAssembly;
162 if (!LoadedAssemblys.TryGetValue(dllName, out pluginAssembly )) 162 if (!LoadedAssemblys.TryGetValue(dllName, out pluginAssembly ))
163 { 163 {
164 try 164 try
165 { 165 {
166 pluginAssembly = Assembly.LoadFrom(dllName); 166 pluginAssembly = Assembly.LoadFrom(dllName);
167 LoadedAssemblys.Add(dllName, pluginAssembly); 167 LoadedAssemblys.Add(dllName, pluginAssembly);
168 } 168 }
169 catch( BadImageFormatException e ) 169 catch( BadImageFormatException e )
170 { 170 {
171 m_log.Verbose( "MODULES", "The file [{0}] is not a module assembly.", e.FileName ); 171 m_log.Warn( "MODULES", "The file [{0}] is not a module assembly.", e.FileName );
172 } 172 }
173 } 173 }
174 174
175 175
176 if (pluginAssembly != null) 176 if (pluginAssembly != null)
177 { 177 {
178 foreach (Type pluginType in pluginAssembly.GetTypes()) 178 foreach (Type pluginType in pluginAssembly.GetTypes())
179 { 179 {
180 if (pluginType.IsPublic) 180 if (pluginType.IsPublic)
181 { 181 {
182 if (!pluginType.IsAbstract) 182 if (!pluginType.IsAbstract)
183 { 183 {
184 if( pluginType.GetInterface("IRegionModule") != null ) 184 if( pluginType.GetInterface("IRegionModule") != null )
185 { 185 {
186 modules.Add((IRegionModule) Activator.CreateInstance(pluginType)); 186 modules.Add((IRegionModule) Activator.CreateInstance(pluginType));
187 } 187 }
188 } 188 }
189 } 189 }
190 } 190 }
191 } 191 }
192 192
193 return modules.ToArray(); 193 return modules.ToArray();
194 } 194 }
195 195
196 public void PostInitialise() 196 public void PostInitialise()
197 { 197 {
198 foreach (IRegionModule module in LoadedSharedModules.Values) 198 foreach (IRegionModule module in LoadedSharedModules.Values)
199 { 199 {
200 module.PostInitialise(); 200 module.PostInitialise();
201 } 201 }
202 202
203 foreach (IRegionModule module in LoadedModules) 203 foreach (IRegionModule module in LoadedModules)
204 { 204 {
205 module.PostInitialise(); 205 module.PostInitialise();
206 } 206 }
207 } 207 }
208 208
209 public void ClearCache() 209 public void ClearCache()
210 { 210 {
211 LoadedAssemblys.Clear(); 211 LoadedAssemblys.Clear();
212 } 212 }
213 } 213 }
214} 214}
diff --git a/OpenSim/Region/Environment/Modules/ChatModule.cs b/OpenSim/Region/Environment/Modules/ChatModule.cs
index 1f488b0..58b9d7b 100644
--- a/OpenSim/Region/Environment/Modules/ChatModule.cs
+++ b/OpenSim/Region/Environment/Modules/ChatModule.cs
@@ -45,55 +45,26 @@ namespace OpenSim.Region.Environment.Modules
45 private List<Scene> m_scenes = new List<Scene>(); 45 private List<Scene> m_scenes = new List<Scene>();
46 private LogBase m_log; 46 private LogBase m_log;
47 47
48 private string m_server = null;
49 private int m_port = 6668;
50 private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
51 private string m_nick = null;
52 private string m_channel = null;
53
54 private int m_whisperdistance = 10; 48 private int m_whisperdistance = 10;
55 private int m_saydistance = 30; 49 private int m_saydistance = 30;
56 private int m_shoutdistance = 100; 50 private int m_shoutdistance = 100;
57 51
58 private NetworkStream m_stream; 52 private IRCChatModule m_irc = null;
59 private TcpClient m_irc;
60 private StreamWriter m_ircWriter;
61 private StreamReader m_ircReader;
62
63 private Thread pingSender;
64 private Thread listener;
65
66 private bool m_enable_irc = false;
67 private bool connected = false;
68 53
69 public ChatModule() 54 public ChatModule()
70 { 55 {
71 m_nick = "OSimBot" + Util.RandomClass.Next(1, 99);
72 m_irc = null;
73 m_ircWriter = null;
74 m_ircReader = null;
75
76 m_log = OpenSim.Framework.Console.MainLog.Instance; 56 m_log = OpenSim.Framework.Console.MainLog.Instance;
77 } 57 }
78 58
79 public void Initialise(Scene scene, Nini.Config.IConfigSource config) 59 public void Initialise(Scene scene, Nini.Config.IConfigSource config)
80 { 60 {
61 // wrap this in a try block so that defaults will work if
62 // the config file doesn't specify otherwise.
81 try { 63 try {
82 m_server = config.Configs["IRC"].GetString("server"); 64 m_whisperdistance = config.Configs["Chat"].GetInt("whisper_distance", m_whisperdistance);
83 m_nick = config.Configs["IRC"].GetString("nick"); 65 m_saydistance = config.Configs["Chat"].GetInt("say_distance", m_saydistance);
84 m_channel = config.Configs["IRC"].GetString("channel"); 66 m_shoutdistance = config.Configs["Chat"].GetInt("shout_distance", m_shoutdistance);
85 m_port = config.Configs["IRC"].GetInt("port", m_port); 67 } catch (Exception e) {}
86 m_user = config.Configs["IRC"].GetString("username", m_user);
87 if (m_server != null && m_nick != null && m_channel != null) {
88 m_enable_irc = true;
89 }
90 } catch (Exception e) {
91 OpenSim.Framework.Console.MainLog.Instance.Verbose("No IRC config information, skipping IRC bridge configuration");
92 }
93
94 m_whisperdistance = config.Configs["Chat"].GetInt("whisper_distance");
95 m_saydistance = config.Configs["Chat"].GetInt("say_distance");
96 m_shoutdistance = config.Configs["Chat"].GetInt("shout_distance");
97 68
98 if (!m_scenes.Contains(scene)) 69 if (!m_scenes.Contains(scene))
99 { 70 {
@@ -101,43 +72,21 @@ namespace OpenSim.Region.Environment.Modules
101 scene.EventManager.OnNewClient += NewClient; 72 scene.EventManager.OnNewClient += NewClient;
102 scene.RegisterModuleInterface<ISimChat>(this); 73 scene.RegisterModuleInterface<ISimChat>(this);
103 } 74 }
75
76 // setup IRC Relay
77 m_irc = new IRCChatModule(config);
104 } 78 }
105 79
106 public void PostInitialise() 80 public void PostInitialise()
107 { 81 {
108 if( m_enable_irc ) { 82
109 try 83 if (m_irc.Enabled) {
110 { 84 m_irc.Connect(m_scenes);
111 m_irc = new TcpClient(m_server, m_port);
112 m_stream = m_irc.GetStream();
113 m_ircReader = new StreamReader(m_stream);
114 m_ircWriter = new StreamWriter(m_stream);
115
116 pingSender = new Thread(new ThreadStart(this.PingRun));
117 pingSender.Start();
118
119 listener = new Thread(new ThreadStart(this.ListenerRun));
120 listener.Start();
121
122 m_ircWriter.WriteLine(m_user);
123 m_ircWriter.Flush();
124 m_ircWriter.WriteLine("NICK " + m_nick);
125 m_ircWriter.Flush();
126 m_ircWriter.WriteLine("JOIN " + m_channel);
127 m_ircWriter.Flush();
128 connected = true;
129 }
130 catch (Exception e)
131 {
132 Console.WriteLine(e.ToString());
133 }
134 } 85 }
135 } 86 }
136 87
137 public void Close() 88 public void Close()
138 { 89 {
139 m_ircWriter.Close();
140 m_ircReader.Close();
141 m_irc.Close(); 90 m_irc.Close();
142 } 91 }
143 92
@@ -156,43 +105,6 @@ namespace OpenSim.Region.Environment.Modules
156 client.OnChatFromViewer += SimChat; 105 client.OnChatFromViewer += SimChat;
157 } 106 }
158 107
159 public void PingRun()
160 {
161 while (true)
162 {
163 m_ircWriter.WriteLine("PING :" + m_server);
164 m_ircWriter.Flush();
165 Thread.Sleep(15000);
166 }
167 }
168
169 public void ListenerRun()
170 {
171 string inputLine;
172 LLVector3 pos = new LLVector3(128, 128, 20);
173 while (true)
174 {
175 while ((inputLine = m_ircReader.ReadLine()) != null)
176 {
177 Console.WriteLine(inputLine);
178 if (inputLine.Contains(m_channel))
179 {
180 string mess = inputLine.Substring(inputLine.IndexOf(m_channel));
181 foreach (Scene m_scene in m_scenes)
182 {
183 m_scene.Broadcast(delegate(IClientAPI client)
184 {
185 client.SendChatMessage(
186 Helpers.StringToField(mess), 255, pos, "IRC:",
187 LLUUID.Zero);
188 });
189 }
190 }
191 }
192 Thread.Sleep(50);
193 }
194 }
195
196 public void SimChat(Object sender, ChatFromViewerArgs e) 108 public void SimChat(Object sender, ChatFromViewerArgs e)
197 { 109 {
198 ScenePresence avatar = null; 110 ScenePresence avatar = null;
@@ -246,80 +158,215 @@ namespace OpenSim.Region.Environment.Modules
246 158
247 m_log.Verbose("CHAT", fromName + " (" + e.Channel + " @ " + scene.RegionInfo.RegionName + ") " + typeName + ": " + e.Message); 159 m_log.Verbose("CHAT", fromName + " (" + e.Channel + " @ " + scene.RegionInfo.RegionName + ") " + typeName + ": " + e.Message);
248 160
249 if (connected) 161 if (m_irc.Connected)
250 { 162 {
251 try 163 m_irc.PrivMsg(fromName, scene.RegionInfo.RegionName, e.Message);
252 { 164 }
253 m_ircWriter.WriteLine("PRIVMSG " + m_channel + " :" + "<" + fromName + " in " + scene.RegionInfo.RegionName + ">: " + 165
254 e.Message); 166 if (e.Channel == 0)
255 m_ircWriter.Flush(); 167 {
168 foreach (Scene m_scene in m_scenes)
169 {
170 m_scene.ForEachScenePresence(delegate(ScenePresence presence)
171 {
172 int dis = -100000;
173
174 LLVector3 avatarRegionPos = presence.AbsolutePosition + new LLVector3(scene.RegionInfo.RegionLocX * 256, scene.RegionInfo.RegionLocY * 256, 0);
175 dis = Math.Abs((int)avatarRegionPos.GetDistanceTo(fromRegionPos));
176
177 switch (e.Type)
178 {
179 case ChatTypeEnum.Whisper:
180 if (dis < m_whisperdistance)
181 {
182 //should change so the message is sent through the avatar rather than direct to the ClientView
183 presence.ControllingClient.SendChatMessage(message,
184 type,
185 fromPos,
186 fromName,
187 fromAgentID);
188 }
189 break;
190 case ChatTypeEnum.Say:
191 if (dis < m_saydistance)
192 {
193 //Console.WriteLine("sending chat");
194 presence.ControllingClient.SendChatMessage(message,
195 type,
196 fromPos,
197 fromName,
198 fromAgentID);
199 }
200 break;
201 case ChatTypeEnum.Shout:
202 if (dis < m_shoutdistance)
203 {
204 presence.ControllingClient.SendChatMessage(message,
205 type,
206 fromPos,
207 fromName,
208 fromAgentID);
209 }
210 break;
211
212 case ChatTypeEnum.Broadcast:
213 presence.ControllingClient.SendChatMessage(message, type,
214 fromPos,
215 fromName,
216 fromAgentID);
217 break;
218 default:
219 break;
220 }
221 });
256 } 222 }
257 catch (IOException) 223 }
258 { 224 }
259 m_log.Error("IRC","Disconnected from IRC server."); 225 }
260 listener.Abort(); 226
261 pingSender.Abort(); 227 class IRCChatModule {
262 connected = false; 228 private string m_server = null;
229 private int m_port = 6668;
230 private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
231 private string m_nick = null;
232 private string m_channel = null;
233
234 private NetworkStream m_stream;
235 private TcpClient m_tcp;
236 private StreamWriter m_writer;
237 private StreamReader m_reader;
238
239 private Thread pingSender;
240 private Thread listener;
241
242 private bool m_enabled = false;
243 private bool m_connected = false;
244
245 private List<Scene> m_scenes = null;
246 private LogBase m_log;
247
248 public IRCChatModule(Nini.Config.IConfigSource config) {
249 m_nick = "OSimBot" + Util.RandomClass.Next(1, 99);
250 m_tcp = null;
251 m_writer = null;
252 m_reader = null;
253
254 try {
255 m_server = config.Configs["IRC"].GetString("server");
256 m_nick = config.Configs["IRC"].GetString("nick");
257 m_channel = config.Configs["IRC"].GetString("channel");
258 m_port = config.Configs["IRC"].GetInt("port", m_port);
259 m_user = config.Configs["IRC"].GetString("username", m_user);
260 if (m_server != null && m_nick != null && m_channel != null) {
261 m_enabled = true;
263 } 262 }
263 } catch (Exception e) {
264 Console.WriteLine("No IRC config information, skipping IRC bridge configuration");
264 } 265 }
266 m_log = OpenSim.Framework.Console.MainLog.Instance;
267 }
265 268
266 if (e.Channel == 0) 269 public bool Connect(List<Scene> scenes) {
270 try {
271 m_scenes = scenes;
272
273 m_tcp = new TcpClient(m_server, m_port);
274 m_log.Verbose("IRC", "Connecting...");
275 m_stream = m_tcp.GetStream();
276 m_log.Verbose("IRC", "Connected to " + m_server);
277 m_reader = new StreamReader(m_stream);
278 m_writer = new StreamWriter(m_stream);
279
280 pingSender = new Thread(new ThreadStart(this.PingRun));
281 pingSender.Start();
282
283 listener = new Thread(new ThreadStart(this.ListenerRun));
284 listener.Start();
285
286 m_writer.WriteLine(m_user);
287 m_writer.Flush();
288 m_writer.WriteLine("NICK " + m_nick);
289 m_writer.Flush();
290 m_writer.WriteLine("JOIN " + m_channel);
291 m_writer.Flush();
292 m_log.Verbose("IRC", "Connection fully established");
293 m_connected = true;
294 } catch (Exception e) {
295 Console.WriteLine(e.ToString());
296 }
297 return m_connected;
298 }
299
300 public bool Enabled
301 {
302 get { return m_enabled; }
303 }
304
305 public bool Connected
306 {
307 get { return m_connected; }
308 }
309
310 public void PrivMsg(string from, string region, string msg) {
311 try {
312 m_writer.WriteLine("PRIVMSG {0} :<{1} in {2}>: {3}", m_channel, from, region, msg);
313 m_writer.Flush();
314 } catch (IOException) {
315 m_log.Error("IRC","Disconnected from IRC server.");
316 listener.Abort();
317 pingSender.Abort();
318 m_connected = false;
319 }
320 }
321
322
323 public void PingRun()
324 {
325 while (true)
326 {
327 m_writer.WriteLine("PING :" + m_server);
328 m_writer.Flush();
329 Thread.Sleep(15000);
330 }
331 }
332
333 public void ListenerRun()
334 {
335 string inputLine;
336 LLVector3 pos = new LLVector3(128, 128, 20);
337 while (true)
267 { 338 {
268 foreach (Scene m_scene in m_scenes) 339 while ((inputLine = m_reader.ReadLine()) != null)
269 { 340 {
270 m_scene.ForEachScenePresence(delegate(ScenePresence presence) 341 Console.WriteLine(inputLine);
271 { 342 if (inputLine.Contains(m_channel))
272 int dis = -100000; 343 {
273 344 string mess = inputLine.Substring(inputLine.IndexOf(m_channel));
274 LLVector3 avatarRegionPos = presence.AbsolutePosition + new LLVector3(scene.RegionInfo.RegionLocX * 256, scene.RegionInfo.RegionLocY * 256, 0); 345 foreach (Scene m_scene in m_scenes)
275 dis = Math.Abs((int)avatarRegionPos.GetDistanceTo(fromRegionPos)); 346 {
276 347 m_scene.ForEachScenePresence(delegate(ScenePresence avatar)
277 switch (e.Type) 348 {
278 { 349 if (!avatar.IsChildAgent)
279 case ChatTypeEnum.Whisper: 350 {
280 if (dis < m_whisperdistance) 351 avatar.ControllingClient.SendChatMessage(
281 { 352 Helpers.StringToField(mess), 255, pos, "IRC:",
282 //should change so the message is sent through the avatar rather than direct to the ClientView 353 LLUUID.Zero);
283 presence.ControllingClient.SendChatMessage(message,
284 type,
285 fromPos,
286 fromName,
287 fromAgentID);
288 }
289 break;
290 default:
291 case ChatTypeEnum.Say:
292 if (dis < m_saydistance)
293 {
294 //Console.WriteLine("sending chat");
295 presence.ControllingClient.SendChatMessage(message,
296 type,
297 fromPos,
298 fromName,
299 fromAgentID);
300 }
301 break;
302 case ChatTypeEnum.Shout:
303 if (dis < m_shoutdistance)
304 {
305 presence.ControllingClient.SendChatMessage(message,
306 type,
307 fromPos,
308 fromName,
309 fromAgentID);
310 } 354 }
311 break; 355 });
312 356 }
313 case ChatTypeEnum.Broadcast: 357 }
314 presence.ControllingClient.SendChatMessage(message, type,
315 fromPos,
316 fromName,
317 fromAgentID);
318 break;
319 }
320 });
321 } 358 }
359 Thread.Sleep(50);
322 } 360 }
323 } 361 }
362
363
364 public void Close() {
365 listener.Abort();
366 pingSender.Abort();
367 m_writer.Close();
368 m_reader.Close();
369 m_tcp.Close();
370 }
324 } 371 }
325} 372}
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index fe2e470..553e55f 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -370,7 +370,7 @@ namespace OpenSim.Region.Environment.Scenes
370 phyScene.SetTerrain(Terrain.GetHeights1D()); 370 phyScene.SetTerrain(Terrain.GetHeights1D());
371 } 371 }
372 372
373 storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(),RegionInfo.RegionID); 373 storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
374 374
375 float[] terData = Terrain.GetHeights1D(); 375 float[] terData = Terrain.GetHeights1D();
376 376
@@ -466,7 +466,7 @@ namespace OpenSim.Region.Environment.Scenes
466 { 466 {
467 try 467 try
468 { 468 {
469 double[,] map = storageManager.DataStore.LoadTerrain(RegionInfo.RegionID); 469 double[,] map = storageManager.DataStore.LoadTerrain();
470 if (map == null) 470 if (map == null)
471 { 471 {
472 if (string.IsNullOrEmpty(m_regInfo.estateSettings.terrainFile)) 472 if (string.IsNullOrEmpty(m_regInfo.estateSettings.terrainFile))
@@ -474,7 +474,7 @@ namespace OpenSim.Region.Environment.Scenes
474 MainLog.Instance.Verbose("TERRAIN", "No default terrain. Generating a new terrain."); 474 MainLog.Instance.Verbose("TERRAIN", "No default terrain. Generating a new terrain.");
475 Terrain.HillsGenerator(); 475 Terrain.HillsGenerator();
476 476
477 storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(),RegionInfo.RegionID); 477 storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
478 } 478 }
479 else 479 else
480 { 480 {
@@ -488,7 +488,7 @@ namespace OpenSim.Region.Environment.Scenes
488 MainLog.Instance.Verbose("TERRAIN", "No terrain found in database or default. Generating a new terrain."); 488 MainLog.Instance.Verbose("TERRAIN", "No terrain found in database or default. Generating a new terrain.");
489 Terrain.HillsGenerator(); 489 Terrain.HillsGenerator();
490 } 490 }
491 storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(), RegionInfo.RegionID); 491 storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
492 } 492 }
493 } 493 }
494 else 494 else
diff --git a/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs b/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
index 74bd856..be27a0b 100644
--- a/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
+++ b/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
@@ -69,8 +69,8 @@ namespace OpenSim.Region.ExtensionsScriptModule
69 } 69 }
70 70
71 public void Initialise(Scene scene, IConfigSource config) 71 public void Initialise(Scene scene, IConfigSource config)
72 { 72 {
73 OpenSim.Framework.Console.MainLog.Instance.Verbose("SCRIPTMODULE", "Initialising Extensions Scripting Module"); 73 System.Console.WriteLine("Initialising Extensions Scripting Module");
74 m_scene = scene; 74 m_scene = scene;
75 75
76 m_scene.RegisterModuleInterface<IExtensionScriptModule>(this); 76 m_scene.RegisterModuleInterface<IExtensionScriptModule>(this);
diff --git a/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs b/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
index 81bc938..87b6d34 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsPluginManager.cs
@@ -93,7 +93,7 @@ namespace OpenSim.Region.Physics.Manager
93 IPhysicsPlugin plug = (IPhysicsPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); 93 IPhysicsPlugin plug = (IPhysicsPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
94 plug.Init(); 94 plug.Init();
95 this._plugins.Add(plug.GetName(),plug); 95 this._plugins.Add(plug.GetName(),plug);
96 OpenSim.Framework.Console.MainLog.Instance.Verbose("PHYSICS","Added physics engine: " + plug.GetName()); 96 Console.WriteLine("added physics engine: " + plug.GetName());
97 97
98 } 98 }
99 99
diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
index cc0ff7a..733e4c4 100644
--- a/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
+++ b/OpenSim/Region/Storage/OpenSim.DataStore.MonoSqlite/MonoSqliteDataStore.cs
@@ -43,12 +43,10 @@ namespace OpenSim.DataStore.MonoSqlite
43 { 43 {
44 private const string primSelect = "select * from prims"; 44 private const string primSelect = "select * from prims";
45 private const string shapeSelect = "select * from primshapes"; 45 private const string shapeSelect = "select * from primshapes";
46 private const string terrainSelect = "select * from terrain";
47 46
48 private DataSet ds; 47 private DataSet ds;
49 private SqliteDataAdapter primDa; 48 private SqliteDataAdapter primDa;
50 private SqliteDataAdapter shapeDa; 49 private SqliteDataAdapter shapeDa;
51 private SqliteDataAdapter terrainDa;
52 50
53 /*********************************************************************** 51 /***********************************************************************
54 * 52 *
@@ -72,8 +70,6 @@ namespace OpenSim.DataStore.MonoSqlite
72 shapeDa = new SqliteDataAdapter(shapeSelectCmd); 70 shapeDa = new SqliteDataAdapter(shapeSelectCmd);
73 // SqliteCommandBuilder shapeCb = new SqliteCommandBuilder(shapeDa); 71 // SqliteCommandBuilder shapeCb = new SqliteCommandBuilder(shapeDa);
74 72
75 SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, conn);
76 terrainDa = new SqliteDataAdapter(terrainSelectCmd);
77 73
78 // We fill the data set, now we've got copies in memory for the information 74 // We fill the data set, now we've got copies in memory for the information
79 // TODO: see if the linkage actually holds. 75 // TODO: see if the linkage actually holds.
@@ -87,10 +83,6 @@ namespace OpenSim.DataStore.MonoSqlite
87 83
88 ds.Tables.Add(createShapeTable()); 84 ds.Tables.Add(createShapeTable());
89 setupShapeCommands(shapeDa, conn); 85 setupShapeCommands(shapeDa, conn);
90
91 ds.Tables.Add(createTerrainTable());
92 setupTerrainCommands(terrainDa, conn);
93 terrainDa.Fill(ds.Tables["terrain"]);
94 86
95 // WORKAROUND: This is a work around for sqlite on 87 // WORKAROUND: This is a work around for sqlite on
96 // windows, which gets really unhappy with blob columns 88 // windows, which gets really unhappy with blob columns
@@ -218,57 +210,14 @@ namespace OpenSim.DataStore.MonoSqlite
218 } 210 }
219 211
220 212
221 public void StoreTerrain(double[,] ter, LLUUID regionID) 213 public void StoreTerrain(double[,] ter)
222 { 214 {
223 int revision = OpenSim.Framework.Utilities.Util.UnixTimeSinceEpoch();
224
225 MainLog.Instance.Verbose("DATASTORE", "Storing terrain revision r" + revision.ToString());
226
227 DataTable terrain = ds.Tables["terrain"];
228
229 DataRow newrow = terrain.NewRow();
230 fillTerrainRow(newrow, regionID, revision, ter);
231 terrain.Rows.Add(newrow);
232 215
233 Commit();
234 } 216 }
235 217
236 public double[,] LoadTerrain(LLUUID regionID) 218 public double[,] LoadTerrain()
237 { 219 {
238 double[,] terret = new double[256, 256]; 220 return null;
239 terret.Initialize();
240
241 DataTable terrain = ds.Tables["terrain"];
242
243 DataRow[] rows = terrain.Select("RegionUUID = '" + regionID.ToString() + "'","Revision DESC");
244
245 int rev = 0;
246
247 if (rows.Length > 0)
248 {
249 DataRow row = rows[0];
250
251 byte[] heightmap = (byte[])row["Heightfield"];
252 for (int x = 0; x < 256; x++)
253 {
254 for (int y = 0; y < 256; y++)
255 {
256 terret[x, y] = BitConverter.ToDouble(heightmap, ((x * 256) + y) * 8);
257 }
258 }
259
260 rev = (int)row["Revision"];
261 }
262 else
263 {
264 MainLog.Instance.Verbose("DATASTORE", "No terrain found for region");
265 return null;
266 }
267
268
269 MainLog.Instance.Verbose("DATASTORE", "Loaded terrain revision r" + rev.ToString());
270
271 return terret;
272 } 221 }
273 222
274 public void RemoveLandObject(uint id) 223 public void RemoveLandObject(uint id)
@@ -291,7 +240,6 @@ namespace OpenSim.DataStore.MonoSqlite
291 lock (ds) { 240 lock (ds) {
292 primDa.Update(ds, "prims"); 241 primDa.Update(ds, "prims");
293 shapeDa.Update(ds, "primshapes"); 242 shapeDa.Update(ds, "primshapes");
294 terrainDa.Update(ds, "terrain");
295 ds.AcceptChanges(); 243 ds.AcceptChanges();
296 } 244 }
297 } 245 }
@@ -315,22 +263,6 @@ namespace OpenSim.DataStore.MonoSqlite
315 dt.Columns.Add(col); 263 dt.Columns.Add(col);
316 } 264 }
317 265
318 private DataTable createTerrainTable()
319 {
320 DataTable terrain = new DataTable("terrain");
321
322 createCol(terrain, "RegionUUID", typeof(System.String));
323 createCol(terrain, "Revision", typeof(System.Int32));
324 createCol(terrain, "Heightfield", typeof(System.Byte[]));
325
326 /* // Attempting to work out requirements to get SQLite to actually *save* the data.
327 createCol(terrain, "PrIndex", typeof(System.String));
328 terrain.PrimaryKey = new DataColumn[] { terrain.Columns["PrIndex"] };
329 */
330
331 return terrain;
332 }
333
334 private DataTable createPrimTable() 266 private DataTable createPrimTable()
335 { 267 {
336 DataTable prims = new DataTable("prims"); 268 DataTable prims = new DataTable("prims");
@@ -499,22 +431,6 @@ namespace OpenSim.DataStore.MonoSqlite
499 return prim; 431 return prim;
500 } 432 }
501 433
502 private void fillTerrainRow(DataRow row, LLUUID regionUUID, int rev, double[,] val)
503 {
504 row["RegionUUID"] = regionUUID;
505 row["Revision"] = rev;
506
507 System.IO.MemoryStream str = new System.IO.MemoryStream(65536 * sizeof(double));
508 System.IO.BinaryWriter bw = new System.IO.BinaryWriter(str);
509
510 // TODO: COMPATIBILITY - Add byte-order conversions
511 for (int x = 0; x < 256; x++)
512 for (int y = 0; y < 256; y++)
513 bw.Write(val[x, y]);
514
515 row["Heightfield"] = str.ToArray();
516 }
517
518 private void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID) 434 private void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID)
519 { 435 {
520 row["UUID"] = prim.UUID; 436 row["UUID"] = prim.UUID;
@@ -776,7 +692,7 @@ namespace OpenSim.DataStore.MonoSqlite
776 subsql += ",\n"; 692 subsql += ",\n";
777 } 693 }
778 subsql += col.ColumnName + " " + sqliteType(col.DataType); 694 subsql += col.ColumnName + " " + sqliteType(col.DataType);
779 if (dt.PrimaryKey.Length > 0 && col == dt.PrimaryKey[0]) 695 if (col == dt.PrimaryKey[0])
780 { 696 {
781 subsql += " primary key"; 697 subsql += " primary key";
782 } 698 }
@@ -830,12 +746,6 @@ namespace OpenSim.DataStore.MonoSqlite
830 da.DeleteCommand = delete; 746 da.DeleteCommand = delete;
831 } 747 }
832 748
833 private void setupTerrainCommands(SqliteDataAdapter da, SqliteConnection conn)
834 {
835 da.InsertCommand = createInsertCommand("terrain", ds.Tables["terrain"]);
836 da.InsertCommand.Connection = conn;
837 }
838
839 private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn) 749 private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn)
840 { 750 {
841 da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]); 751 da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]);
@@ -854,15 +764,12 @@ namespace OpenSim.DataStore.MonoSqlite
854 { 764 {
855 string createPrims = defineTable(createPrimTable()); 765 string createPrims = defineTable(createPrimTable());
856 string createShapes = defineTable(createShapeTable()); 766 string createShapes = defineTable(createShapeTable());
857 string createTerrain = defineTable(createTerrainTable());
858 767
859 SqliteCommand pcmd = new SqliteCommand(createPrims, conn); 768 SqliteCommand pcmd = new SqliteCommand(createPrims, conn);
860 SqliteCommand scmd = new SqliteCommand(createShapes, conn); 769 SqliteCommand scmd = new SqliteCommand(createShapes, conn);
861 SqliteCommand tcmd = new SqliteCommand(createTerrain, conn);
862 conn.Open(); 770 conn.Open();
863 pcmd.ExecuteNonQuery(); 771 pcmd.ExecuteNonQuery();
864 scmd.ExecuteNonQuery(); 772 scmd.ExecuteNonQuery();
865 tcmd.ExecuteNonQuery();
866 conn.Close(); 773 conn.Close();
867 } 774 }
868 775
@@ -872,15 +779,12 @@ namespace OpenSim.DataStore.MonoSqlite
872 SqliteDataAdapter pDa = new SqliteDataAdapter(primSelectCmd); 779 SqliteDataAdapter pDa = new SqliteDataAdapter(primSelectCmd);
873 SqliteCommand shapeSelectCmd = new SqliteCommand(shapeSelect, conn); 780 SqliteCommand shapeSelectCmd = new SqliteCommand(shapeSelect, conn);
874 SqliteDataAdapter sDa = new SqliteDataAdapter(shapeSelectCmd); 781 SqliteDataAdapter sDa = new SqliteDataAdapter(shapeSelectCmd);
875 SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, conn);
876 SqliteDataAdapter tDa = new SqliteDataAdapter(terrainSelectCmd);
877 782
878 DataSet tmpDS = new DataSet(); 783 DataSet tmpDS = new DataSet();
879 try 784 try
880 { 785 {
881 pDa.Fill(tmpDS, "prims"); 786 pDa.Fill(tmpDS, "prims");
882 sDa.Fill(tmpDS, "primshapes"); 787 sDa.Fill(tmpDS, "primshapes");
883 tDa.Fill(tmpDS, "terrain");
884 } 788 }
885 catch (Mono.Data.SqliteClient.SqliteSyntaxException) 789 catch (Mono.Data.SqliteClient.SqliteSyntaxException)
886 { 790 {
@@ -890,7 +794,6 @@ namespace OpenSim.DataStore.MonoSqlite
890 794
891 pDa.Fill(tmpDS, "prims"); 795 pDa.Fill(tmpDS, "prims");
892 sDa.Fill(tmpDS, "primshapes"); 796 sDa.Fill(tmpDS, "primshapes");
893 tDa.Fill(tmpDS, "terrain");
894 797
895 foreach (DataColumn col in createPrimTable().Columns) 798 foreach (DataColumn col in createPrimTable().Columns)
896 { 799 {
@@ -908,14 +811,6 @@ namespace OpenSim.DataStore.MonoSqlite
908 return false; 811 return false;
909 } 812 }
910 } 813 }
911 foreach (DataColumn col in createTerrainTable().Columns)
912 {
913 if (!tmpDS.Tables["terrain"].Columns.Contains(col.ColumnName))
914 {
915 MainLog.Instance.Verbose("DATASTORE", "Missing require column:" + col.ColumnName);
916 return false;
917 }
918 }
919 return true; 814 return true;
920 } 815 }
921 816
@@ -939,14 +834,6 @@ namespace OpenSim.DataStore.MonoSqlite
939 { 834 {
940 return DbType.Double; 835 return DbType.Double;
941 } 836 }
942 else if (type == typeof(System.Byte))
943 {
944 return DbType.Byte;
945 }
946 else if (type == typeof(System.Double))
947 {
948 return DbType.Double;
949 }
950 else if (type == typeof(System.Byte[])) 837 else if (type == typeof(System.Byte[]))
951 { 838 {
952 return DbType.Binary; 839 return DbType.Binary;
diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs
index f726ea2..91b1914 100644
--- a/OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs
+++ b/OpenSim/Region/Storage/OpenSim.DataStore.NullStorage/NullDataStore.cs
@@ -61,12 +61,12 @@ namespace OpenSim.DataStore.NullStorage
61 return new List<SceneObjectGroup>(); 61 return new List<SceneObjectGroup>();
62 } 62 }
63 63
64 public void StoreTerrain(double[,] ter, LLUUID regionID) 64 public void StoreTerrain(double[,] ter)
65 { 65 {
66 66
67 } 67 }
68 68
69 public double[,] LoadTerrain(LLUUID regionID) 69 public double[,] LoadTerrain()
70 { 70 {
71 return null; 71 return null;
72 } 72 }