From 51488ee7f415950583ba389582692900a2c32831 Mon Sep 17 00:00:00 2001 From: mingchen Date: Sat, 3 Nov 2007 15:09:21 +0000 Subject: *Moved region loading into its own interface IRegionLoader *Added ability to load regioninfo remotely from a webserver from a single file. See share/RegionLoading/HOWTO_REMOTE_REGION_LOADING.txt for more info and an example file. --- .../RegionLoader/Web/RegionLoaderWebServer.cs | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs (limited to 'OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs') diff --git a/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs new file mode 100644 index 0000000..6a52a43 --- /dev/null +++ b/OpenSim/Framework/RegionLoader/Web/RegionLoaderWebServer.cs @@ -0,0 +1,98 @@ +/* +* 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.Net; +using System.IO; +using System.Xml; +using System.Collections.Generic; +using System.Text; +using Nini.Config; +using OpenSim.Framework; + +namespace OpenSim.Framework.RegionLoader.Web +{ + public class RegionLoaderWebServer : IRegionLoader + { + private IniConfigSource m_configSouce; + public void SetIniConfigSource(IniConfigSource configSource) + { + m_configSouce = configSource; + } + public RegionInfo[] LoadRegions() + { + if (m_configSouce == null) + { + Console.MainLog.Instance.Error("Unable to load configuration source! (WebServer Region Loader)"); + return null; + } + else + { + IniConfig startupConfig = (IniConfig)m_configSouce.Configs["Startup"]; + string url = startupConfig.GetString("regionload_webserver_url","").Trim(); + if (url == "") + { + Console.MainLog.Instance.Error("Unable to load webserver URL - URL was empty (WebServer Region Loader"); + return null; + } + else + { + + HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); + webRequest.Timeout = 30000; //30 Second Timeout + Console.MainLog.Instance.Debug("Sending Download Request..."); + HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); + Console.MainLog.Instance.Debug("Downloading Region Information From Remote Server..."); + StreamReader reader = new StreamReader(webResponse.GetResponseStream()); + string xmlSource = ""; + string tempStr = reader.ReadLine(); + while (tempStr != null) + { + xmlSource = xmlSource + tempStr; + tempStr = reader.ReadLine(); + } + Console.MainLog.Instance.Debug("Done downloading region information from server. Total Bytes: " + xmlSource.Length); + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(xmlSource); + if (xmlDoc.FirstChild.Name == "Regions") + { + RegionInfo[] regionInfos = new RegionInfo[xmlDoc.FirstChild.ChildNodes.Count]; + int i; + for (i = 0; i < xmlDoc.FirstChild.ChildNodes.Count; i++) + { + Console.MainLog.Instance.Debug(xmlDoc.FirstChild.ChildNodes[i].OuterXml); + regionInfos[i] = new RegionInfo("REGION CONFIG #" + (i + 1), xmlDoc.FirstChild.ChildNodes[i]); + } + + return regionInfos; + } + return null; + } + } + } + } +} -- cgit v1.1