From 591e1704283330b0120e99819ff68404d1c92d76 Mon Sep 17 00:00:00 2001 From: MW Date: Fri, 8 Jun 2007 16:55:44 +0000 Subject: Re-imported OpenGridServices from trunk --- OpenGridServices/ServiceManager/ServiceManager.cs | 259 ++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 OpenGridServices/ServiceManager/ServiceManager.cs (limited to 'OpenGridServices/ServiceManager/ServiceManager.cs') diff --git a/OpenGridServices/ServiceManager/ServiceManager.cs b/OpenGridServices/ServiceManager/ServiceManager.cs new file mode 100644 index 0000000..8cb9c80 --- /dev/null +++ b/OpenGridServices/ServiceManager/ServiceManager.cs @@ -0,0 +1,259 @@ +/* +* Copyright (c) Contributors, http://www.openmetaverse.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.Diagnostics; +using System.Threading; +using System.ServiceProcess; +using System.Xml; +using System.IO; +using libsecondlife; +using OpenSim.GenericConfig; + +public class OpenGridMasterService : System.ServiceProcess.ServiceBase { + + private Thread ServiceWorkerThread; + private static string GridURL; // URL of grid server + private static string GridSimKey; // key sent from Grid>Sim + private static string SimGridKey; // key sent Sim>Grid + private static string AssetURL; // URL of asset server + private static string UserSendKey; // key sent from user>sim + private static string UserRecvKey; // key sent from sim>user + + public OpenGridMasterService() + { + CanPauseAndContinue = false; + ServiceName = "OpenGridServices-master"; + } + + private void InitializeComponent() + { + this.CanPauseAndContinue = false; + this.CanShutdown = true; + this.ServiceName = "OpenGridServices-master"; + } + + protected override void OnStart(string[] args) + { + ServiceWorkerThread = new Thread(new ThreadStart(MainServiceThread)); + ServiceWorkerThread.Start(); + } + + protected override void OnStop() + { + ServiceWorkerThread.Abort(); + } + + private void MainServiceThread() + { + try { + StreamReader reader=new StreamReader("opengrid-master-cfg.xml"); + + string configxml = reader.ReadToEnd(); + XmlDocument doc = new XmlDocument(); + doc.LoadXml(configxml); + XmlNode rootnode = doc.FirstChild; + if (rootnode.Name != "regions") + { + EventLog.WriteEntry("ERROR! bad XML in opengrid-master-cfg.xml - expected regions tag"); + Console.WriteLine("Sorry, could not startup the service - please check your opengrid-master-cfg.xml file: missing regions tag"); + (new ServiceController("OpenGridServices-master")).Stop(); + } + + for(int i=0; i<=rootnode.ChildNodes.Count; i++) + { + if(rootnode.ChildNodes.Item(i).Name != "region") { + EventLog.WriteEntry("nonfatal error - unexpected tag inside regions block of opengrid-master-cfg.xml"); + (new ServiceController("OpenGridServices-master")).Stop(); + } + } + } catch(Exception e) { + Console.WriteLine(e.ToString()); + (new ServiceController("OpenGridServices-master")).Stop(); + } + + } + + private static string SetupGrid() + { + Console.WriteLine("Running external program (OpenGridServices.GridServer.exe) to configure the grid server"); + try { + Process p = new Process(); + + p.StartInfo.Arguments = "-setuponly"; + p.StartInfo.FileName = "OpenGridServices.GridServer.exe"; + p.Start(); + + p.StartInfo.Arguments = "-dumpxmlconf"; + p.Start(); + + XmlConfig GridConf = new XmlConfig("opengrid-cfg.xml"); + GridConf.LoadData(); + GridURL="http://" + GridConf.GetAttribute("ListenAddr") + ":" + GridConf.GetAttribute("ListenPort") + "/"; + + StreamReader reader=new StreamReader("opengrid-cfg.xml"); + string configxml = reader.ReadToEnd(); + + return configxml; + } catch(Exception e) { + Console.WriteLine("An error occurred while running the grid server, please rectify it and try again"); + Console.WriteLine(e.ToString()); + Environment.Exit(1); + } + return ""; + } + + private static string SetupUser() + { + return ""; + } + + private static string SetupAsset() + { + return ""; + } + + private static string SetupRegion() + { + string regionname; + ulong regionlocx; + ulong regionlocy; + string default_terrain; + uint terrain_multiplier; + uint baseport; + + string listenaddr; + string simconfigxml; + LLUUID SimUUID; + + Console.WriteLine("Setting up region servers"); + Console.Write("Please specify a path to store your region data (e.g /etc/opensim/regions: "); + string regionpath=Console.ReadLine(); + + Console.Write("How many regions would you like to configure now? "); + int numofregions=Convert.ToInt16(Console.ReadLine()); + + Console.Write("What port should the region servers start listening at (first region is normally 9000, then 9001 the second etc, both TCP+UDP): "); + baseport=Convert.ToUInt16(Console.ReadLine()); + + + listenaddr=Console.ReadLine(); + + Console.WriteLine("Now ready to configure regions, please answer the questions about each region in turn"); + for(int i=0; i<=numofregions; i++) { + Console.WriteLine("Configuring region number " + i.ToString()); + + Console.Write("Region name: "); + regionname=Console.ReadLine(); + + Console.Write("Region location X: "); + regionlocx=(ulong)Convert.ToUInt32(Console.ReadLine()); + + Console.Write("Region location Y: "); + regionlocy=(ulong)Convert.ToUInt32(Console.ReadLine()); + + Console.Write("Default terrain file: "); + default_terrain=Console.ReadLine(); + terrain_multiplier=Convert.ToUInt16(Console.ReadLine()); + + SimUUID=LLUUID.Random(); + + simconfigxml=""; + + } + + return ""; + } + + public static void InitSetup() + { + string choice=""; + + string GridInfo; + string UserInfo; + string AssetInfo; + string RegionInfo; + + bool grid=false; + bool user=false; + bool asset=false; + bool region=false; + while(choice!="OK") + { + Console.Clear(); + Console.WriteLine("Please select the components you would like to run on this server:\n"); + + Console.WriteLine("1 - [" + (grid ? "X" : " ") + "] Grid server - this service handles co-ordinates of regions/sims on the grid"); + Console.WriteLine("2 - [" + (user ? "X" : " ") + "] User server - this service handles user login, profiles, inventory and IM"); + Console.WriteLine("3 - [" + (asset ? "X" : " ") + "] Asset server - this service handles storage of assets such as textures, objects, sounds, scripts"); + Console.WriteLine("4 - [" + (region ? "X" : " ") + "] Region server - this is the main opensim server and can run without the above services, it handles physics simulation, terrain, building and other such features"); + + + Console.Write("Type a number to toggle a choice or type OK to accept your current choices: "); + choice = Console.ReadLine(); + switch(choice) + { + case "1": + grid = (!grid); + break; + + case "2": + user = (!user); + break; + + case "3": + asset = (!asset); + break; + + case "4": + region = (!region); + break; + } + } + + if(grid) GridInfo = SetupGrid(); + if(user) UserInfo = SetupUser(); + if(asset) AssetInfo = SetupAsset(); + if(region) RegionInfo = SetupRegion(); + } + + public static void Main() + { + if(!File.Exists("opengrid-master-cfg.xml")) + { + Console.WriteLine("Could not find a config file, running initial setup"); + InitSetup(); + } + Console.WriteLine("Starting up OGS master service"); + try { + ServiceBase.Run(new OpenGridMasterService()); + } catch(Exception e) { + Console.WriteLine("An error occured while initialising OGS master service."); + Console.WriteLine(e.ToString()); + } + } +} -- cgit v1.1