From 6acaabefc32525aed7ded45fc15e6152895d5382 Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Mon, 22 Oct 2007 15:37:54 +0000
Subject: revert r2162 as it completely clobbered all the work on the
ChatModule by MW and myself. Couldn't find Adam online after that rev went
in.
---
OpenSim/Region/Application/OpenSimMain.cs | 18 +-
.../Environment/Interfaces/IRegionDataStore.cs | 4 +-
OpenSim/Region/Environment/ModuleLoader.cs | 428 ++++++++++-----------
OpenSim/Region/Environment/Modules/ChatModule.cs | 381 ++++++++++--------
OpenSim/Region/Environment/Scenes/Scene.cs | 8 +-
.../Region/ExtensionsScriptModule/ScriptManager.cs | 4 +-
.../Region/Physics/Manager/PhysicsPluginManager.cs | 2 +-
.../MonoSqliteDataStore.cs | 121 +-----
.../OpenSim.DataStore.NullStorage/NullDataStore.cs | 4 +-
9 files changed, 451 insertions(+), 519 deletions(-)
(limited to 'OpenSim/Region')
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
}
else
{
- MainLog.Instance.Verbose("STARTUP","No startup command script specified. Moving on...");
+ MainLog.Instance.Verbose("No startup command script specified. Moving on...");
}
-
- MainLog.Instance.Status("STARTUP","Startup complete, serving " + m_udpServers.Count.ToString() + " region(s)");
}
private static void CreateDefaultRegionInfoXml(string fileName)
@@ -363,11 +361,11 @@ namespace OpenSim
RunCommandScript(m_shutdownCommandsFile);
}
- m_log.Verbose("SHUTDOWN", "Closing all threads");
- m_log.Verbose("SHUTDOWN", "Killing listener thread");
- m_log.Verbose("SHUTDOWN", "Killing clients");
+ m_log.Verbose("Closing all threads");
+ m_log.Verbose("Killing listener thread");
+ m_log.Verbose("Killing clients");
// IMPLEMENT THIS
- m_log.Verbose("SHUTDOWN", "Closing console and terminating");
+ m_log.Verbose("Closing console and terminating");
m_sceneManager.Close();
@@ -382,7 +380,7 @@ namespace OpenSim
///
private void RunCommandScript(string fileName)
{
- MainLog.Instance.Verbose("COMMANDFILE", "Running " + fileName);
+ MainLog.Instance.Verbose("Running command script (" + fileName + ")");
if (File.Exists(fileName))
{
StreamReader readFile = File.OpenText(fileName);
@@ -391,14 +389,14 @@ namespace OpenSim
{
if (currentCommand != "")
{
- MainLog.Instance.Verbose("COMMANDFILE", "Running '" + currentCommand + "'");
+ MainLog.Instance.Verbose("Running '" + currentCommand + "'");
MainLog.Instance.MainLogRunCommand(currentCommand);
}
}
}
else
{
- MainLog.Instance.Error("COMMANDFILE","Command script missing. Can not run commands");
+ MainLog.Instance.Error("Command script missing. Can not run commands");
}
}
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
List LoadObjects(LLUUID regionUUID);
- void StoreTerrain(double[,] terrain, LLUUID regionID);
- double[,] LoadTerrain(LLUUID regionID);
+ void StoreTerrain(double[,] terrain);
+ double[,] LoadTerrain();
void StoreParcel(Land Parcel);
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 @@
-/*
-* Copyright (c) Contributors, http://opensimulator.org/
-* See CONTRIBUTORS.TXT for a full list of copyright holders.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of the OpenSim Project nor the
-* names of its contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using OpenSim.Framework.Console;
-using OpenSim.Region.Environment.Interfaces;
-using OpenSim.Region.Environment.Modules;
-using OpenSim.Region.Environment.Scenes;
-using Nini.Config;
-
-namespace OpenSim.Region.Environment
-{
- public class ModuleLoader
- {
- public Dictionary LoadedAssemblys = new Dictionary();
-
- public List LoadedModules = new List();
- public Dictionary LoadedSharedModules = new Dictionary();
- private readonly LogBase m_log;
- private IConfigSource m_config;
-
- public ModuleLoader(LogBase log, IConfigSource config)
- {
- m_log = log;
- m_config = config;
- }
-
- public void PickupModules(Scene scene, string moduleDir)
- {
- DirectoryInfo dir = new DirectoryInfo(moduleDir);
-
- foreach (FileInfo fileInfo in dir.GetFiles("*.dll"))
- {
- LoadRegionModules(fileInfo.FullName, scene);
- }
- }
-
- public void LoadDefaultSharedModules()
- {
- DynamicTextureModule dynamicModule = new DynamicTextureModule();
- LoadedSharedModules.Add(dynamicModule.Name, dynamicModule);
- ChatModule chat = new ChatModule();
- LoadedSharedModules.Add(chat.Name, chat);
- InstantMessageModule imMod = new InstantMessageModule();
- LoadedSharedModules.Add(imMod.Name, imMod);
- LoadImageURLModule loadMod = new LoadImageURLModule();
- LoadedSharedModules.Add(loadMod.Name, loadMod);
- }
-
- public void InitialiseSharedModules(Scene scene)
- {
- foreach (IRegionModule module in LoadedSharedModules.Values)
- {
- module.Initialise(scene, m_config);
- scene.AddModule(module.Name, module); //should be doing this?
- }
- }
-
- public void InitializeModule(IRegionModule module, Scene scene)
- {
- module.Initialise(scene, m_config);
- scene.AddModule(module.Name, module);
- LoadedModules.Add(module);
- }
-
- ///
- /// Loads/initialises a Module instance that can be used by mutliple Regions
- ///
- ///
- ///
- ///
- public void LoadSharedModule(string dllName, string moduleName)
- {
- IRegionModule module = LoadModule(dllName, moduleName);
- if (module != null)
- {
- LoadedSharedModules.Add(module.Name, module);
- }
- }
-
- public void LoadRegionModules(string dllName, Scene scene)
- {
- IRegionModule[] modules = LoadModules(dllName);
-
- if (modules.Length > 0)
- {
- m_log.Verbose("MODULES", "Found Module Library [{0}]", dllName );
- foreach (IRegionModule module in modules)
- {
- if (!module.IsSharedModule)
- {
- m_log.Verbose("MODULES", " [{0}]: Initializing.", module.Name);
- InitializeModule(module, scene);
- }
- }
- }
- }
-
- public void LoadRegionModule(string dllName, string moduleName, Scene scene)
- {
- IRegionModule module = LoadModule(dllName, moduleName);
- if (module != null)
- {
- InitializeModule(module, scene);
- }
- }
-
- ///
- /// Loads a external Module (if not already loaded) and creates a new instance of it.
- ///
- ///
- ///
- ///
- public IRegionModule LoadModule(string dllName, string moduleName)
- {
- IRegionModule[] modules = LoadModules(dllName);
-
- foreach (IRegionModule module in modules)
- {
- if ((module != null) && (module.Name == moduleName))
- {
- return module;
- }
- }
-
- return null;
- }
-
- public IRegionModule[] LoadModules(string dllName)
- {
- List modules = new List();
-
- Assembly pluginAssembly;
- if (!LoadedAssemblys.TryGetValue(dllName, out pluginAssembly ))
- {
- try
- {
- pluginAssembly = Assembly.LoadFrom(dllName);
- LoadedAssemblys.Add(dllName, pluginAssembly);
- }
- catch( BadImageFormatException e )
- {
- m_log.Verbose( "MODULES", "The file [{0}] is not a module assembly.", e.FileName );
- }
- }
-
-
- if (pluginAssembly != null)
- {
- foreach (Type pluginType in pluginAssembly.GetTypes())
- {
- if (pluginType.IsPublic)
- {
- if (!pluginType.IsAbstract)
- {
- if( pluginType.GetInterface("IRegionModule") != null )
- {
- modules.Add((IRegionModule) Activator.CreateInstance(pluginType));
- }
- }
- }
- }
- }
-
- return modules.ToArray();
- }
-
- public void PostInitialise()
- {
- foreach (IRegionModule module in LoadedSharedModules.Values)
- {
- module.PostInitialise();
- }
-
- foreach (IRegionModule module in LoadedModules)
- {
- module.PostInitialise();
- }
- }
-
- public void ClearCache()
- {
- LoadedAssemblys.Clear();
- }
- }
-}
+/*
+* Copyright (c) Contributors, http://opensimulator.org/
+* See CONTRIBUTORS.TXT for a full list of copyright holders.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+* * Neither the name of the OpenSim Project nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using OpenSim.Framework.Console;
+using OpenSim.Region.Environment.Interfaces;
+using OpenSim.Region.Environment.Modules;
+using OpenSim.Region.Environment.Scenes;
+using Nini.Config;
+
+namespace OpenSim.Region.Environment
+{
+ public class ModuleLoader
+ {
+ public Dictionary LoadedAssemblys = new Dictionary();
+
+ public List LoadedModules = new List();
+ public Dictionary LoadedSharedModules = new Dictionary();
+ private readonly LogBase m_log;
+ private IConfigSource m_config;
+
+ public ModuleLoader(LogBase log, IConfigSource config)
+ {
+ m_log = log;
+ m_config = config;
+ }
+
+ public void PickupModules(Scene scene, string moduleDir)
+ {
+ DirectoryInfo dir = new DirectoryInfo(moduleDir);
+
+ foreach (FileInfo fileInfo in dir.GetFiles("*.dll"))
+ {
+ LoadRegionModules(fileInfo.FullName, scene);
+ }
+ }
+
+ public void LoadDefaultSharedModules()
+ {
+ DynamicTextureModule dynamicModule = new DynamicTextureModule();
+ LoadedSharedModules.Add(dynamicModule.Name, dynamicModule);
+ ChatModule chat = new ChatModule();
+ LoadedSharedModules.Add(chat.Name, chat);
+ InstantMessageModule imMod = new InstantMessageModule();
+ LoadedSharedModules.Add(imMod.Name, imMod);
+ LoadImageURLModule loadMod = new LoadImageURLModule();
+ LoadedSharedModules.Add(loadMod.Name, loadMod);
+ }
+
+ public void InitialiseSharedModules(Scene scene)
+ {
+ foreach (IRegionModule module in LoadedSharedModules.Values)
+ {
+ module.Initialise(scene, m_config);
+ scene.AddModule(module.Name, module); //should be doing this?
+ }
+ }
+
+ public void InitializeModule(IRegionModule module, Scene scene)
+ {
+ module.Initialise(scene, m_config);
+ scene.AddModule(module.Name, module);
+ LoadedModules.Add(module);
+ }
+
+ ///
+ /// Loads/initialises a Module instance that can be used by mutliple Regions
+ ///
+ ///
+ ///
+ ///
+ public void LoadSharedModule(string dllName, string moduleName)
+ {
+ IRegionModule module = LoadModule(dllName, moduleName);
+ if (module != null)
+ {
+ LoadedSharedModules.Add(module.Name, module);
+ }
+ }
+
+ public void LoadRegionModules(string dllName, Scene scene)
+ {
+ IRegionModule[] modules = LoadModules(dllName);
+
+ if (modules.Length > 0)
+ {
+ m_log.Verbose("MODULES", "Found Module Library [{0}]", dllName );
+ foreach (IRegionModule module in modules)
+ {
+ if (!module.IsSharedModule)
+ {
+ m_log.Verbose("MODULES", " [{0}]: Initializing.", module.Name);
+ InitializeModule(module, scene);
+ }
+ }
+ }
+ }
+
+ public void LoadRegionModule(string dllName, string moduleName, Scene scene)
+ {
+ IRegionModule module = LoadModule(dllName, moduleName);
+ if (module != null)
+ {
+ InitializeModule(module, scene);
+ }
+ }
+
+ ///
+ /// Loads a external Module (if not already loaded) and creates a new instance of it.
+ ///
+ ///
+ ///
+ ///
+ public IRegionModule LoadModule(string dllName, string moduleName)
+ {
+ IRegionModule[] modules = LoadModules(dllName);
+
+ foreach (IRegionModule module in modules)
+ {
+ if ((module != null) && (module.Name == moduleName))
+ {
+ return module;
+ }
+ }
+
+ return null;
+ }
+
+ public IRegionModule[] LoadModules(string dllName)
+ {
+ List modules = new List();
+
+ Assembly pluginAssembly;
+ if (!LoadedAssemblys.TryGetValue(dllName, out pluginAssembly ))
+ {
+ try
+ {
+ pluginAssembly = Assembly.LoadFrom(dllName);
+ LoadedAssemblys.Add(dllName, pluginAssembly);
+ }
+ catch( BadImageFormatException e )
+ {
+ m_log.Warn( "MODULES", "The file [{0}] is not a module assembly.", e.FileName );
+ }
+ }
+
+
+ if (pluginAssembly != null)
+ {
+ foreach (Type pluginType in pluginAssembly.GetTypes())
+ {
+ if (pluginType.IsPublic)
+ {
+ if (!pluginType.IsAbstract)
+ {
+ if( pluginType.GetInterface("IRegionModule") != null )
+ {
+ modules.Add((IRegionModule) Activator.CreateInstance(pluginType));
+ }
+ }
+ }
+ }
+ }
+
+ return modules.ToArray();
+ }
+
+ public void PostInitialise()
+ {
+ foreach (IRegionModule module in LoadedSharedModules.Values)
+ {
+ module.PostInitialise();
+ }
+
+ foreach (IRegionModule module in LoadedModules)
+ {
+ module.PostInitialise();
+ }
+ }
+
+ public void ClearCache()
+ {
+ LoadedAssemblys.Clear();
+ }
+ }
+}
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
private List m_scenes = new List();
private LogBase m_log;
- private string m_server = null;
- private int m_port = 6668;
- private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
- private string m_nick = null;
- private string m_channel = null;
-
private int m_whisperdistance = 10;
private int m_saydistance = 30;
private int m_shoutdistance = 100;
- private NetworkStream m_stream;
- private TcpClient m_irc;
- private StreamWriter m_ircWriter;
- private StreamReader m_ircReader;
-
- private Thread pingSender;
- private Thread listener;
-
- private bool m_enable_irc = false;
- private bool connected = false;
+ private IRCChatModule m_irc = null;
public ChatModule()
{
- m_nick = "OSimBot" + Util.RandomClass.Next(1, 99);
- m_irc = null;
- m_ircWriter = null;
- m_ircReader = null;
-
m_log = OpenSim.Framework.Console.MainLog.Instance;
}
public void Initialise(Scene scene, Nini.Config.IConfigSource config)
{
+ // wrap this in a try block so that defaults will work if
+ // the config file doesn't specify otherwise.
try {
- m_server = config.Configs["IRC"].GetString("server");
- m_nick = config.Configs["IRC"].GetString("nick");
- m_channel = config.Configs["IRC"].GetString("channel");
- m_port = config.Configs["IRC"].GetInt("port", m_port);
- m_user = config.Configs["IRC"].GetString("username", m_user);
- if (m_server != null && m_nick != null && m_channel != null) {
- m_enable_irc = true;
- }
- } catch (Exception e) {
- OpenSim.Framework.Console.MainLog.Instance.Verbose("No IRC config information, skipping IRC bridge configuration");
- }
-
- m_whisperdistance = config.Configs["Chat"].GetInt("whisper_distance");
- m_saydistance = config.Configs["Chat"].GetInt("say_distance");
- m_shoutdistance = config.Configs["Chat"].GetInt("shout_distance");
+ m_whisperdistance = config.Configs["Chat"].GetInt("whisper_distance", m_whisperdistance);
+ m_saydistance = config.Configs["Chat"].GetInt("say_distance", m_saydistance);
+ m_shoutdistance = config.Configs["Chat"].GetInt("shout_distance", m_shoutdistance);
+ } catch (Exception e) {}
if (!m_scenes.Contains(scene))
{
@@ -101,43 +72,21 @@ namespace OpenSim.Region.Environment.Modules
scene.EventManager.OnNewClient += NewClient;
scene.RegisterModuleInterface(this);
}
+
+ // setup IRC Relay
+ m_irc = new IRCChatModule(config);
}
public void PostInitialise()
{
- if( m_enable_irc ) {
- try
- {
- m_irc = new TcpClient(m_server, m_port);
- m_stream = m_irc.GetStream();
- m_ircReader = new StreamReader(m_stream);
- m_ircWriter = new StreamWriter(m_stream);
-
- pingSender = new Thread(new ThreadStart(this.PingRun));
- pingSender.Start();
-
- listener = new Thread(new ThreadStart(this.ListenerRun));
- listener.Start();
-
- m_ircWriter.WriteLine(m_user);
- m_ircWriter.Flush();
- m_ircWriter.WriteLine("NICK " + m_nick);
- m_ircWriter.Flush();
- m_ircWriter.WriteLine("JOIN " + m_channel);
- m_ircWriter.Flush();
- connected = true;
- }
- catch (Exception e)
- {
- Console.WriteLine(e.ToString());
- }
+
+ if (m_irc.Enabled) {
+ m_irc.Connect(m_scenes);
}
}
- public void Close()
+ public void Close()
{
- m_ircWriter.Close();
- m_ircReader.Close();
m_irc.Close();
}
@@ -156,43 +105,6 @@ namespace OpenSim.Region.Environment.Modules
client.OnChatFromViewer += SimChat;
}
- public void PingRun()
- {
- while (true)
- {
- m_ircWriter.WriteLine("PING :" + m_server);
- m_ircWriter.Flush();
- Thread.Sleep(15000);
- }
- }
-
- public void ListenerRun()
- {
- string inputLine;
- LLVector3 pos = new LLVector3(128, 128, 20);
- while (true)
- {
- while ((inputLine = m_ircReader.ReadLine()) != null)
- {
- Console.WriteLine(inputLine);
- if (inputLine.Contains(m_channel))
- {
- string mess = inputLine.Substring(inputLine.IndexOf(m_channel));
- foreach (Scene m_scene in m_scenes)
- {
- m_scene.Broadcast(delegate(IClientAPI client)
- {
- client.SendChatMessage(
- Helpers.StringToField(mess), 255, pos, "IRC:",
- LLUUID.Zero);
- });
- }
- }
- }
- Thread.Sleep(50);
- }
- }
-
public void SimChat(Object sender, ChatFromViewerArgs e)
{
ScenePresence avatar = null;
@@ -246,80 +158,215 @@ namespace OpenSim.Region.Environment.Modules
m_log.Verbose("CHAT", fromName + " (" + e.Channel + " @ " + scene.RegionInfo.RegionName + ") " + typeName + ": " + e.Message);
- if (connected)
- {
- try
- {
- m_ircWriter.WriteLine("PRIVMSG " + m_channel + " :" + "<" + fromName + " in " + scene.RegionInfo.RegionName + ">: " +
- e.Message);
- m_ircWriter.Flush();
+ if (m_irc.Connected)
+ {
+ m_irc.PrivMsg(fromName, scene.RegionInfo.RegionName, e.Message);
+ }
+
+ if (e.Channel == 0)
+ {
+ foreach (Scene m_scene in m_scenes)
+ {
+ m_scene.ForEachScenePresence(delegate(ScenePresence presence)
+ {
+ int dis = -100000;
+
+ LLVector3 avatarRegionPos = presence.AbsolutePosition + new LLVector3(scene.RegionInfo.RegionLocX * 256, scene.RegionInfo.RegionLocY * 256, 0);
+ dis = Math.Abs((int)avatarRegionPos.GetDistanceTo(fromRegionPos));
+
+ switch (e.Type)
+ {
+ case ChatTypeEnum.Whisper:
+ if (dis < m_whisperdistance)
+ {
+ //should change so the message is sent through the avatar rather than direct to the ClientView
+ presence.ControllingClient.SendChatMessage(message,
+ type,
+ fromPos,
+ fromName,
+ fromAgentID);
+ }
+ break;
+ case ChatTypeEnum.Say:
+ if (dis < m_saydistance)
+ {
+ //Console.WriteLine("sending chat");
+ presence.ControllingClient.SendChatMessage(message,
+ type,
+ fromPos,
+ fromName,
+ fromAgentID);
+ }
+ break;
+ case ChatTypeEnum.Shout:
+ if (dis < m_shoutdistance)
+ {
+ presence.ControllingClient.SendChatMessage(message,
+ type,
+ fromPos,
+ fromName,
+ fromAgentID);
+ }
+ break;
+
+ case ChatTypeEnum.Broadcast:
+ presence.ControllingClient.SendChatMessage(message, type,
+ fromPos,
+ fromName,
+ fromAgentID);
+ break;
+ default:
+ break;
+ }
+ });
}
- catch (IOException)
- {
- m_log.Error("IRC","Disconnected from IRC server.");
- listener.Abort();
- pingSender.Abort();
- connected = false;
+ }
+ }
+ }
+
+ class IRCChatModule {
+ private string m_server = null;
+ private int m_port = 6668;
+ private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
+ private string m_nick = null;
+ private string m_channel = null;
+
+ private NetworkStream m_stream;
+ private TcpClient m_tcp;
+ private StreamWriter m_writer;
+ private StreamReader m_reader;
+
+ private Thread pingSender;
+ private Thread listener;
+
+ private bool m_enabled = false;
+ private bool m_connected = false;
+
+ private List m_scenes = null;
+ private LogBase m_log;
+
+ public IRCChatModule(Nini.Config.IConfigSource config) {
+ m_nick = "OSimBot" + Util.RandomClass.Next(1, 99);
+ m_tcp = null;
+ m_writer = null;
+ m_reader = null;
+
+ try {
+ m_server = config.Configs["IRC"].GetString("server");
+ m_nick = config.Configs["IRC"].GetString("nick");
+ m_channel = config.Configs["IRC"].GetString("channel");
+ m_port = config.Configs["IRC"].GetInt("port", m_port);
+ m_user = config.Configs["IRC"].GetString("username", m_user);
+ if (m_server != null && m_nick != null && m_channel != null) {
+ m_enabled = true;
}
+ } catch (Exception e) {
+ Console.WriteLine("No IRC config information, skipping IRC bridge configuration");
}
+ m_log = OpenSim.Framework.Console.MainLog.Instance;
+ }
- if (e.Channel == 0)
+ public bool Connect(List scenes) {
+ try {
+ m_scenes = scenes;
+
+ m_tcp = new TcpClient(m_server, m_port);
+ m_log.Verbose("IRC", "Connecting...");
+ m_stream = m_tcp.GetStream();
+ m_log.Verbose("IRC", "Connected to " + m_server);
+ m_reader = new StreamReader(m_stream);
+ m_writer = new StreamWriter(m_stream);
+
+ pingSender = new Thread(new ThreadStart(this.PingRun));
+ pingSender.Start();
+
+ listener = new Thread(new ThreadStart(this.ListenerRun));
+ listener.Start();
+
+ m_writer.WriteLine(m_user);
+ m_writer.Flush();
+ m_writer.WriteLine("NICK " + m_nick);
+ m_writer.Flush();
+ m_writer.WriteLine("JOIN " + m_channel);
+ m_writer.Flush();
+ m_log.Verbose("IRC", "Connection fully established");
+ m_connected = true;
+ } catch (Exception e) {
+ Console.WriteLine(e.ToString());
+ }
+ return m_connected;
+ }
+
+ public bool Enabled
+ {
+ get { return m_enabled; }
+ }
+
+ public bool Connected
+ {
+ get { return m_connected; }
+ }
+
+ public void PrivMsg(string from, string region, string msg) {
+ try {
+ m_writer.WriteLine("PRIVMSG {0} :<{1} in {2}>: {3}", m_channel, from, region, msg);
+ m_writer.Flush();
+ } catch (IOException) {
+ m_log.Error("IRC","Disconnected from IRC server.");
+ listener.Abort();
+ pingSender.Abort();
+ m_connected = false;
+ }
+ }
+
+
+ public void PingRun()
+ {
+ while (true)
+ {
+ m_writer.WriteLine("PING :" + m_server);
+ m_writer.Flush();
+ Thread.Sleep(15000);
+ }
+ }
+
+ public void ListenerRun()
+ {
+ string inputLine;
+ LLVector3 pos = new LLVector3(128, 128, 20);
+ while (true)
{
- foreach (Scene m_scene in m_scenes)
+ while ((inputLine = m_reader.ReadLine()) != null)
{
- m_scene.ForEachScenePresence(delegate(ScenePresence presence)
- {
- int dis = -100000;
-
- LLVector3 avatarRegionPos = presence.AbsolutePosition + new LLVector3(scene.RegionInfo.RegionLocX * 256, scene.RegionInfo.RegionLocY * 256, 0);
- dis = Math.Abs((int)avatarRegionPos.GetDistanceTo(fromRegionPos));
-
- switch (e.Type)
- {
- case ChatTypeEnum.Whisper:
- if (dis < m_whisperdistance)
- {
- //should change so the message is sent through the avatar rather than direct to the ClientView
- presence.ControllingClient.SendChatMessage(message,
- type,
- fromPos,
- fromName,
- fromAgentID);
- }
- break;
- default:
- case ChatTypeEnum.Say:
- if (dis < m_saydistance)
- {
- //Console.WriteLine("sending chat");
- presence.ControllingClient.SendChatMessage(message,
- type,
- fromPos,
- fromName,
- fromAgentID);
- }
- break;
- case ChatTypeEnum.Shout:
- if (dis < m_shoutdistance)
- {
- presence.ControllingClient.SendChatMessage(message,
- type,
- fromPos,
- fromName,
- fromAgentID);
+ Console.WriteLine(inputLine);
+ if (inputLine.Contains(m_channel))
+ {
+ string mess = inputLine.Substring(inputLine.IndexOf(m_channel));
+ foreach (Scene m_scene in m_scenes)
+ {
+ m_scene.ForEachScenePresence(delegate(ScenePresence avatar)
+ {
+ if (!avatar.IsChildAgent)
+ {
+ avatar.ControllingClient.SendChatMessage(
+ Helpers.StringToField(mess), 255, pos, "IRC:",
+ LLUUID.Zero);
}
- break;
-
- case ChatTypeEnum.Broadcast:
- presence.ControllingClient.SendChatMessage(message, type,
- fromPos,
- fromName,
- fromAgentID);
- break;
- }
- });
+ });
+ }
+ }
}
+ Thread.Sleep(50);
}
}
+
+
+ public void Close() {
+ listener.Abort();
+ pingSender.Abort();
+ m_writer.Close();
+ m_reader.Close();
+ m_tcp.Close();
+ }
}
}
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
phyScene.SetTerrain(Terrain.GetHeights1D());
}
- storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(),RegionInfo.RegionID);
+ storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
float[] terData = Terrain.GetHeights1D();
@@ -466,7 +466,7 @@ namespace OpenSim.Region.Environment.Scenes
{
try
{
- double[,] map = storageManager.DataStore.LoadTerrain(RegionInfo.RegionID);
+ double[,] map = storageManager.DataStore.LoadTerrain();
if (map == null)
{
if (string.IsNullOrEmpty(m_regInfo.estateSettings.terrainFile))
@@ -474,7 +474,7 @@ namespace OpenSim.Region.Environment.Scenes
MainLog.Instance.Verbose("TERRAIN", "No default terrain. Generating a new terrain.");
Terrain.HillsGenerator();
- storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(),RegionInfo.RegionID);
+ storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
}
else
{
@@ -488,7 +488,7 @@ namespace OpenSim.Region.Environment.Scenes
MainLog.Instance.Verbose("TERRAIN", "No terrain found in database or default. Generating a new terrain.");
Terrain.HillsGenerator();
}
- storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD(), RegionInfo.RegionID);
+ storageManager.DataStore.StoreTerrain(Terrain.GetHeights2DD());
}
}
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
}
public void Initialise(Scene scene, IConfigSource config)
- {
- OpenSim.Framework.Console.MainLog.Instance.Verbose("SCRIPTMODULE", "Initialising Extensions Scripting Module");
+ {
+ System.Console.WriteLine("Initialising Extensions Scripting Module");
m_scene = scene;
m_scene.RegisterModuleInterface(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
IPhysicsPlugin plug = (IPhysicsPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
plug.Init();
this._plugins.Add(plug.GetName(),plug);
- OpenSim.Framework.Console.MainLog.Instance.Verbose("PHYSICS","Added physics engine: " + plug.GetName());
+ Console.WriteLine("added physics engine: " + plug.GetName());
}
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
{
private const string primSelect = "select * from prims";
private const string shapeSelect = "select * from primshapes";
- private const string terrainSelect = "select * from terrain";
private DataSet ds;
private SqliteDataAdapter primDa;
private SqliteDataAdapter shapeDa;
- private SqliteDataAdapter terrainDa;
/***********************************************************************
*
@@ -72,8 +70,6 @@ namespace OpenSim.DataStore.MonoSqlite
shapeDa = new SqliteDataAdapter(shapeSelectCmd);
// SqliteCommandBuilder shapeCb = new SqliteCommandBuilder(shapeDa);
- SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, conn);
- terrainDa = new SqliteDataAdapter(terrainSelectCmd);
// We fill the data set, now we've got copies in memory for the information
// TODO: see if the linkage actually holds.
@@ -87,10 +83,6 @@ namespace OpenSim.DataStore.MonoSqlite
ds.Tables.Add(createShapeTable());
setupShapeCommands(shapeDa, conn);
-
- ds.Tables.Add(createTerrainTable());
- setupTerrainCommands(terrainDa, conn);
- terrainDa.Fill(ds.Tables["terrain"]);
// WORKAROUND: This is a work around for sqlite on
// windows, which gets really unhappy with blob columns
@@ -218,57 +210,14 @@ namespace OpenSim.DataStore.MonoSqlite
}
- public void StoreTerrain(double[,] ter, LLUUID regionID)
+ public void StoreTerrain(double[,] ter)
{
- int revision = OpenSim.Framework.Utilities.Util.UnixTimeSinceEpoch();
-
- MainLog.Instance.Verbose("DATASTORE", "Storing terrain revision r" + revision.ToString());
-
- DataTable terrain = ds.Tables["terrain"];
-
- DataRow newrow = terrain.NewRow();
- fillTerrainRow(newrow, regionID, revision, ter);
- terrain.Rows.Add(newrow);
- Commit();
}
- public double[,] LoadTerrain(LLUUID regionID)
+ public double[,] LoadTerrain()
{
- double[,] terret = new double[256, 256];
- terret.Initialize();
-
- DataTable terrain = ds.Tables["terrain"];
-
- DataRow[] rows = terrain.Select("RegionUUID = '" + regionID.ToString() + "'","Revision DESC");
-
- int rev = 0;
-
- if (rows.Length > 0)
- {
- DataRow row = rows[0];
-
- byte[] heightmap = (byte[])row["Heightfield"];
- for (int x = 0; x < 256; x++)
- {
- for (int y = 0; y < 256; y++)
- {
- terret[x, y] = BitConverter.ToDouble(heightmap, ((x * 256) + y) * 8);
- }
- }
-
- rev = (int)row["Revision"];
- }
- else
- {
- MainLog.Instance.Verbose("DATASTORE", "No terrain found for region");
- return null;
- }
-
-
- MainLog.Instance.Verbose("DATASTORE", "Loaded terrain revision r" + rev.ToString());
-
- return terret;
+ return null;
}
public void RemoveLandObject(uint id)
@@ -291,7 +240,6 @@ namespace OpenSim.DataStore.MonoSqlite
lock (ds) {
primDa.Update(ds, "prims");
shapeDa.Update(ds, "primshapes");
- terrainDa.Update(ds, "terrain");
ds.AcceptChanges();
}
}
@@ -315,22 +263,6 @@ namespace OpenSim.DataStore.MonoSqlite
dt.Columns.Add(col);
}
- private DataTable createTerrainTable()
- {
- DataTable terrain = new DataTable("terrain");
-
- createCol(terrain, "RegionUUID", typeof(System.String));
- createCol(terrain, "Revision", typeof(System.Int32));
- createCol(terrain, "Heightfield", typeof(System.Byte[]));
-
- /* // Attempting to work out requirements to get SQLite to actually *save* the data.
- createCol(terrain, "PrIndex", typeof(System.String));
- terrain.PrimaryKey = new DataColumn[] { terrain.Columns["PrIndex"] };
- */
-
- return terrain;
- }
-
private DataTable createPrimTable()
{
DataTable prims = new DataTable("prims");
@@ -499,22 +431,6 @@ namespace OpenSim.DataStore.MonoSqlite
return prim;
}
- private void fillTerrainRow(DataRow row, LLUUID regionUUID, int rev, double[,] val)
- {
- row["RegionUUID"] = regionUUID;
- row["Revision"] = rev;
-
- System.IO.MemoryStream str = new System.IO.MemoryStream(65536 * sizeof(double));
- System.IO.BinaryWriter bw = new System.IO.BinaryWriter(str);
-
- // TODO: COMPATIBILITY - Add byte-order conversions
- for (int x = 0; x < 256; x++)
- for (int y = 0; y < 256; y++)
- bw.Write(val[x, y]);
-
- row["Heightfield"] = str.ToArray();
- }
-
private void fillPrimRow(DataRow row, SceneObjectPart prim, LLUUID sceneGroupID, LLUUID regionUUID)
{
row["UUID"] = prim.UUID;
@@ -776,7 +692,7 @@ namespace OpenSim.DataStore.MonoSqlite
subsql += ",\n";
}
subsql += col.ColumnName + " " + sqliteType(col.DataType);
- if (dt.PrimaryKey.Length > 0 && col == dt.PrimaryKey[0])
+ if (col == dt.PrimaryKey[0])
{
subsql += " primary key";
}
@@ -830,12 +746,6 @@ namespace OpenSim.DataStore.MonoSqlite
da.DeleteCommand = delete;
}
- private void setupTerrainCommands(SqliteDataAdapter da, SqliteConnection conn)
- {
- da.InsertCommand = createInsertCommand("terrain", ds.Tables["terrain"]);
- da.InsertCommand.Connection = conn;
- }
-
private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn)
{
da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]);
@@ -854,15 +764,12 @@ namespace OpenSim.DataStore.MonoSqlite
{
string createPrims = defineTable(createPrimTable());
string createShapes = defineTable(createShapeTable());
- string createTerrain = defineTable(createTerrainTable());
SqliteCommand pcmd = new SqliteCommand(createPrims, conn);
SqliteCommand scmd = new SqliteCommand(createShapes, conn);
- SqliteCommand tcmd = new SqliteCommand(createTerrain, conn);
conn.Open();
pcmd.ExecuteNonQuery();
scmd.ExecuteNonQuery();
- tcmd.ExecuteNonQuery();
conn.Close();
}
@@ -872,15 +779,12 @@ namespace OpenSim.DataStore.MonoSqlite
SqliteDataAdapter pDa = new SqliteDataAdapter(primSelectCmd);
SqliteCommand shapeSelectCmd = new SqliteCommand(shapeSelect, conn);
SqliteDataAdapter sDa = new SqliteDataAdapter(shapeSelectCmd);
- SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, conn);
- SqliteDataAdapter tDa = new SqliteDataAdapter(terrainSelectCmd);
DataSet tmpDS = new DataSet();
try
{
pDa.Fill(tmpDS, "prims");
sDa.Fill(tmpDS, "primshapes");
- tDa.Fill(tmpDS, "terrain");
}
catch (Mono.Data.SqliteClient.SqliteSyntaxException)
{
@@ -890,7 +794,6 @@ namespace OpenSim.DataStore.MonoSqlite
pDa.Fill(tmpDS, "prims");
sDa.Fill(tmpDS, "primshapes");
- tDa.Fill(tmpDS, "terrain");
foreach (DataColumn col in createPrimTable().Columns)
{
@@ -908,14 +811,6 @@ namespace OpenSim.DataStore.MonoSqlite
return false;
}
}
- foreach (DataColumn col in createTerrainTable().Columns)
- {
- if (!tmpDS.Tables["terrain"].Columns.Contains(col.ColumnName))
- {
- MainLog.Instance.Verbose("DATASTORE", "Missing require column:" + col.ColumnName);
- return false;
- }
- }
return true;
}
@@ -939,14 +834,6 @@ namespace OpenSim.DataStore.MonoSqlite
{
return DbType.Double;
}
- else if (type == typeof(System.Byte))
- {
- return DbType.Byte;
- }
- else if (type == typeof(System.Double))
- {
- return DbType.Double;
- }
else if (type == typeof(System.Byte[]))
{
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
return new List();
}
- public void StoreTerrain(double[,] ter, LLUUID regionID)
+ public void StoreTerrain(double[,] ter)
{
}
- public double[,] LoadTerrain(LLUUID regionID)
+ public double[,] LoadTerrain()
{
return null;
}
--
cgit v1.1