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. --- .../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 +- 4 files changed, 434 insertions(+), 387 deletions(-) (limited to 'OpenSim/Region/Environment') 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 -- cgit v1.1