diff --git a/src/Config/SimConfig/Db4SimConfig.cs b/src/Config/SimConfig/Db4SimConfig.cs index e46e8d593a..2d3221e586 100644 --- a/src/Config/SimConfig/Db4SimConfig.cs +++ b/src/Config/SimConfig/Db4SimConfig.cs @@ -36,16 +36,14 @@ namespace Db40SimConfig { public SimConfig GetConfigObject() { - Console.WriteLine("Loading Config dll"); + ServerConsole.MainConsole.Instance.WriteLine("Loading Db40Config dll"); return ( new DbSimConfig()); } } public class DbSimConfig :SimConfig { - - private IObjectContainer db; - + private IObjectContainer db; public void LoadDefaults() { this.RegionName = "OpenSim test\0"; @@ -65,7 +63,7 @@ namespace Db40SimConfig db = Db4oFactory.OpenFile("opensim.yap"); IObjectSet result = db.Get(typeof(DbSimConfig)); if(result.Count==1) { - Console.WriteLine("Config.cs:InitConfig() - Found a SimConfig object in the local database, loading"); + ServerConsole.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Found a SimConfig object in the local database, loading"); foreach (DbSimConfig cfg in result) { this.RegionName = cfg.RegionName; this.RegionLocX = cfg.RegionLocX; @@ -79,27 +77,27 @@ namespace Db40SimConfig this.GridSendKey = cfg.GridSendKey; } } else { - Console.WriteLine("Config.cs:InitConfig() - Could not find object in database, loading precompiled defaults"); + ServerConsole.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Could not find object in database, loading precompiled defaults"); LoadDefaults(); - Console.WriteLine("Writing out default settings to local database"); + ServerConsole.MainConsole.Instance.WriteLine("Writing out default settings to local database"); db.Set(this); } } catch(Exception e) { db.Close(); - Console.WriteLine("Config.cs:InitConfig() - Exception occured"); - Console.WriteLine(e.ToString()); + ServerConsole.MainConsole.Instance.WriteLine("Config.cs:InitConfig() - Exception occured"); + ServerConsole.MainConsole.Instance.WriteLine(e.ToString()); } } public override World LoadWorld() { IObjectSet world_result = db.Get(typeof(OpenSim.world.World)); if(world_result.Count==1) { - Console.WriteLine("Config.cs:LoadWorld() - Found an OpenSim.world.World object in local database, loading"); + ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Found an OpenSim.world.World object in local database, loading"); return (World)world_result.Next(); } else { - Console.WriteLine("Config.cs:LoadWorld() - Could not find the world or too many worlds! Constructing blank one"); + ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Could not find the world or too many worlds! Constructing blank one"); World blank = new World(); - Console.WriteLine("Config.cs:LoadWorld() - Saving initial world state to disk"); + ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadWorld() - Saving initial world state to disk"); db.Set(blank); db.Commit(); return blank; @@ -107,7 +105,7 @@ namespace Db40SimConfig } public override void LoadFromGrid() { - Console.WriteLine("Config.cs:LoadFromGrid() - dummy function, DOING ABSOLUTELY NOTHING AT ALL!!!"); + ServerConsole.MainConsole.Instance.WriteLine("Config.cs:LoadFromGrid() - dummy function, DOING ABSOLUTELY NOTHING AT ALL!!!"); // TODO: Make this crap work /* WebRequest GridLogin = WebRequest.Create(this.GridURL + "regions/" + this.RegionHandle.ToString() + "/login"); WebResponse GridResponse = GridLogin.GetResponse(); diff --git a/src/Config/SimConfig/SimConfig.csproj b/src/Config/SimConfig/SimConfig.csproj index 57f5979404..1f147d79a3 100644 --- a/src/Config/SimConfig/SimConfig.csproj +++ b/src/Config/SimConfig/SimConfig.csproj @@ -31,7 +31,7 @@ False - ..\..\bin\Db4objects.Db4o.dll + ..\..\..\..\..\Program Files\Db4objects\db4o-6.1\bin\net-2.0\Db4objects.Db4o.dll False @@ -39,5 +39,11 @@ + + + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245} + ServerConsole + + \ No newline at end of file diff --git a/src/LocalServers/LocalGridServers/LocalGrid.cs b/src/LocalServers/LocalGridServers/LocalGrid.cs index 2aab4560e4..76304a4bef 100644 --- a/src/LocalServers/LocalGridServers/LocalGrid.cs +++ b/src/LocalServers/LocalGridServers/LocalGrid.cs @@ -70,7 +70,7 @@ namespace LocalGridServers public LocalAssetServer() { this._assetRequests = new BlockingQueue(); - Console.WriteLine("Local Asset Server class created"); + ServerConsole.MainConsole.Instance.WriteLine("Local Asset Server class created"); } public void SetReceiver(IAssetReceiver receiver) @@ -117,7 +117,7 @@ namespace LocalGridServers public LocalGridServer() { Sessions = new List(); - Console.WriteLine("Local Grid Server class created"); + ServerConsole.MainConsole.Instance.WriteLine("Local Grid Server class created"); } public bool RequestConnection() diff --git a/src/LocalServers/LocalGridServers/LocalGridServers.csproj b/src/LocalServers/LocalGridServers/LocalGridServers.csproj index b7a49493f8..6ab0d8a323 100644 --- a/src/LocalServers/LocalGridServers/LocalGridServers.csproj +++ b/src/LocalServers/LocalGridServers/LocalGridServers.csproj @@ -26,10 +26,6 @@ - - ..\..\..\GridInterfaces\GridInterfaces\bin\Debug\GridInterfaces.dll - False - ..\..\..\Libsecond-dailys\libsl-03-03\trunk\libsecondlife-cs\obj\Debug\libsecondlife.dll False @@ -39,5 +35,15 @@ + + + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245} + ServerConsole + + + {5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9} + GridInterfaces + + \ No newline at end of file diff --git a/src/Main.cs b/src/Main.cs index 4b931f5e7d..5bee592abe 100644 --- a/src/Main.cs +++ b/src/Main.cs @@ -42,6 +42,7 @@ using libsecondlife.Packets; using OpenSim.world; using OpenSim.GridServers; using OpenSim.Assets; +using ServerConsole; using PhysicsSystem; namespace OpenSim @@ -76,6 +77,8 @@ namespace OpenSim { //Console.WriteLine("OpenSim " + VersionInfo.Version + "\n"); Console.WriteLine("Starting...\n"); + ServerConsole.MainConsole.Instance = new MServerConsole(ServerConsole.ConsoleBase.ConsoleType.Local,"",0); + sim = new OpenSim_Main(); bool sandbox = false; @@ -98,17 +101,15 @@ namespace OpenSim OpenSim_Main.gridServers.AssetDll = "LocalGridServers.dll"; OpenSim_Main.gridServers.GridDll = "LocalGridServers.dll"; OpenSim_Main.gridServers.LoadPlugins(); - Console.WriteLine("Starting in Sandbox mode"); + ServerConsole.MainConsole.Instance.WriteLine("Starting in Sandbox mode"); } else { OpenSim_Main.gridServers.AssetDll = "RemoteGridServers.dll"; OpenSim_Main.gridServers.GridDll = "RemoteGridServers.dll"; OpenSim_Main.gridServers.LoadPlugins(); - Console.WriteLine("Starting in Grid mode"); + ServerConsole.MainConsole.Instance.WriteLine("Starting in Grid mode"); } - OpenSim_Main.gridServers.AssetServer.SetServerInfo(OpenSim_Main.cfg.AssetURL, OpenSim_Main.cfg.AssetSendKey); - OpenSim_Main.gridServers.GridServer.SetServerInfo(OpenSim_Main.cfg.GridURL, OpenSim_Main.cfg.GridSendKey); if(loginserver && sandbox) { @@ -118,10 +119,10 @@ namespace OpenSim assetCache = new AssetCache(OpenSim_Main.gridServers.AssetServer); sim.Startup(); - //while(true) { - Console.ReadLine(); - Thread.Sleep(1000); - //} + + while(true) { + ServerConsole.MainConsole.Instance.MainConsolePrompt(); + } } private OpenSim_Main() { @@ -133,21 +134,23 @@ namespace OpenSim timer1.Elapsed +=new ElapsedEventHandler( this.Timer1Tick ); // We check our local database first, then the grid for config options - Console.WriteLine("Main.cs:Startup() - Loading configuration"); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Loading configuration"); cfg = this.LoadConfigDll(); cfg.InitConfig(); - Console.WriteLine("Main.cs:Startup() - Contacting gridserver"); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Contacting gridserver"); cfg.LoadFromGrid(); - Console.WriteLine("Main.cs:Startup() - We are " + cfg.RegionName + " at " + cfg.RegionLocX.ToString() + "," + cfg.RegionLocY.ToString()); - Console.WriteLine("Initialising world"); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - We are " + cfg.RegionName + " at " + cfg.RegionLocX.ToString() + "," + cfg.RegionLocY.ToString()); + ServerConsole.MainConsole.Instance.WriteLine("Initialising world"); local_world = cfg.LoadWorld(); this.physManager = new PhysicsSystem.PhysicsManager(); this.physManager.LoadPlugins(); - Console.WriteLine("Main.cs:Startup() - Starting up messaging system"); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting up messaging system"); local_world.PhysScene = this.physManager.GetPhysicsScene("PhysX"); //should be reading from the config file what physics engine to use - + OpenSim_Main.gridServers.AssetServer.SetServerInfo(OpenSim_Main.cfg.AssetURL, OpenSim_Main.cfg.AssetSendKey); + OpenSim_Main.gridServers.GridServer.SetServerInfo(OpenSim_Main.cfg.GridURL, OpenSim_Main.cfg.GridSendKey); + MainServerListener(); } @@ -202,24 +205,34 @@ namespace OpenSim } private void MainServerListener() { - Console.WriteLine("Main.cs:MainServerListener() - New thread started"); - Console.WriteLine("Main.cs:MainServerListener() - Opening UDP socket on " + cfg.IPListenAddr + ":" + cfg.IPListenPort); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - New thread started"); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - Opening UDP socket on " + cfg.IPListenAddr + ":" + cfg.IPListenPort); ServerIncoming = new IPEndPoint(IPAddress.Any, cfg.IPListenPort); Server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); Server.Bind(ServerIncoming); - Console.WriteLine("Main.cs:MainServerListener() - UDP socket bound, getting ready to listen"); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - UDP socket bound, getting ready to listen"); ipeSender = new IPEndPoint(IPAddress.Any, 0); epSender = (EndPoint) ipeSender; ReceivedData = new AsyncCallback(this.OnReceivedData); Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null); - Console.WriteLine("Main.cs:MainServerListener() - Listening..."); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:MainServerListener() - Listening..."); } + public static void Shutdown() { + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Closing all threads"); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Killing listener thread"); + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Killing clients"); + // IMPLEMENT THIS + ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Shutdown() - Closing console and terminating"); + ServerConsole.MainConsole.Instance.Close(); + Environment.Exit(0); + } + void Timer1Tick( object sender, System.EventArgs e ) { local_world.Update(); @@ -239,7 +252,7 @@ namespace OpenSim public void LoadPlugins() { - this.AssetServer =(IAssetServer) this.LoadAssetDll();//assets not implemented yet + this.AssetServer =(IAssetServer) this.LoadAssetDll(); this.GridServer =(IGridServer) this.LoadGridDll(); } diff --git a/src/OpenSimClient.cs b/src/OpenSimClient.cs index 57189b0d5a..58c4effb4f 100644 --- a/src/OpenSimClient.cs +++ b/src/OpenSimClient.cs @@ -130,8 +130,8 @@ namespace OpenSim { if (now - packet.TickCount > RESEND_TIMEOUT) { - Console.WriteLine("Resending " + packet.Type.ToString() + " packet, " + - (now - packet.TickCount) + "ms have passed", Helpers.LogLevel.Info); + ServerConsole.MainConsole.Instance.WriteLine("Resending " + packet.Type.ToString() + " packet, " + + (now - packet.TickCount) + "ms have passed"); packet.Header.Resent = true; OutPacket(packet); @@ -149,11 +149,11 @@ namespace OpenSim if (PendingAcks.Count > 250) { // FIXME: Handle the odd case where we have too many pending ACKs queued up - Console.WriteLine("Too many ACKs queued up!", Helpers.LogLevel.Error); + ServerConsole.MainConsole.Instance.WriteLine("Too many ACKs queued up!"); return; } - Console.WriteLine("Sending PacketAck"); + ServerConsole.MainConsole.Instance.WriteLine("Sending PacketAck"); int i = 0; @@ -242,7 +242,7 @@ namespace OpenSim } } - Console.WriteLine("OUT: \n" + Pack.ToString()); + ServerConsole.MainConsole.Instance.WriteLine("OUT: \n" + Pack.ToString()); byte[] ZeroOutBuffer = new byte[4096]; byte[] sendbuffer; @@ -256,7 +256,7 @@ namespace OpenSim OpenSim_Main.Server.SendTo(sendbuffer, sendbuffer.Length, SocketFlags.None,userEP); } } catch (Exception) { - Console.WriteLine("OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + userEP.ToString() + " - killing thread"); + ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + userEP.ToString() + " - killing thread"); ClientThread.Abort(); } @@ -312,7 +312,7 @@ namespace OpenSim } public OpenSimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack) { - Console.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request"); + ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request"); cirpack = initialcirpack; userEP = remoteEP; PacketQueue = new BlockingQueue(); @@ -326,7 +326,7 @@ namespace OpenSim } private void ClientLoop() { - Console.WriteLine("OpenSimClient.cs:ClientLoop() - Entered loop"); + ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:ClientLoop() - Entered loop"); while(true) { QueItem nextPacket = PacketQueue.Dequeue(); if(nextPacket.Incoming) @@ -343,7 +343,7 @@ namespace OpenSim } private void InitNewClient() { - Console.WriteLine("OpenSimClient.cs:InitNewClient() - Adding viewer agent to world"); + ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:InitNewClient() - Adding viewer agent to world"); OpenSim_Main.local_world.AddViewerAgent(this); world.Entity tempent=OpenSim_Main.local_world.Entities[this.AgentID]; this.ClientAvatar=(world.Avatar)tempent; @@ -355,12 +355,12 @@ namespace OpenSim if(!sessionInfo.Authorised) { //session/circuit not authorised - Console.WriteLine("OpenSimClient.cs:AuthUser() - New user request denied to " + userEP.ToString()); + ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:AuthUser() - New user request denied to " + userEP.ToString()); ClientThread.Abort(); } else { - Console.WriteLine("OpenSimClient.cs:AuthUser() - Got authenticated connection from " + userEP.ToString()); + ServerConsole.MainConsole.Instance.WriteLine("OpenSimClient.cs:AuthUser() - Got authenticated connection from " + userEP.ToString()); //session is authorised this.AgentID=cirpack.CircuitCode.ID; this.SessionID=cirpack.CircuitCode.SessionID; diff --git a/src/OpenSimConsole.cs b/src/OpenSimConsole.cs new file mode 100644 index 0000000000..00ba31b9d8 --- /dev/null +++ b/src/OpenSimConsole.cs @@ -0,0 +1,194 @@ +/* +* Copyright (c) OpenSim project, http://sim.opensecondlife.org/ +* +* 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 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 ``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 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; +using System.Collections.Generic; +using System.Threading; +using System.IO; +using System.Net; +using libsecondlife; +using libsecondlife.Packets; +using ServerConsole; + +namespace OpenSim +{ + /// + /// Description of ServerConsole. + /// + public class MServerConsole : ConsoleBase + { + + private ConsoleType ConsType; + StreamWriter Log; + + + // STUPID HACK ALERT!!!! STUPID HACK ALERT!!!!! + // constype - the type of console to use (see enum ConsoleType) + // sparam - depending on the console type: + // TCP - the IP to bind to (127.0.0.1 if blank) + // Local - param ignored + // SimChat - the AgentID of this sim's admin + // and for the iparam: + // TCP - the port to bind to + // Local - param ignored + // SimChat - the chat channel to accept commands from + public MServerConsole(ConsoleType constype, string sparam, int iparam) { + ConsType = constype; + switch(constype) { + case ConsoleType.Local: + Console.WriteLine("ServerConsole.cs - creating new local console"); + Console.WriteLine("Logs will be saved to current directory in opensim-console.log"); + Log=File.AppendText("opensim-console.log"); + Log.WriteLine("========================================================================"); + //Log.WriteLine("OpenSim " + VersionInfo.Version + " Started at " + DateTime.Now.ToString()); + break; + case ConsoleType.TCP: + break; + case ConsoleType.SimChat: + break; + + default: + Console.WriteLine("ServerConsole.cs - what are you smoking? that isn't a valid console type!"); + break; + } + } + + public override void Close() { + Log.WriteLine("OpenSim shutdown at " + DateTime.Now.ToString()); + Log.Close(); + } + + // You know what ReadLine() and WriteLine() do, right? And Read() and Write()? Right, you do actually know C#, right? Are you actually a programmer? Do you know english? Do you find my sense of humour in comments irritating? Good, glad you're still here + public override void WriteLine(string Line) { + Log.WriteLine(Line); + Console.WriteLine(Line); + return; + } + + public override string ReadLine() { + string TempStr=Console.ReadLine(); + Log.WriteLine(TempStr); + return TempStr; + } + + public override int Read() { + int TempInt= Console.Read(); + Log.Write((char)TempInt); + return TempInt; + } + + public override void Write(string Line) { + Console.Write(Line); + Log.Write(Line); + return; + } + + // Displays a command prompt and waits for the user to enter a string, then returns that string + public override string CmdPrompt(string prompt) { + this.Write(prompt); + return this.ReadLine(); + } + + // Displays a command prompt and returns a default value if the user simply presses enter + public override string CmdPrompt(string prompt, string defaultresponse) { + string temp=CmdPrompt(prompt); + if(temp=="") { + return defaultresponse; + } else { + return temp; + } + } + + // Displays a command prompt and returns a default value, user may only enter 1 of 2 options + public override string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) { + bool itisdone=false; + string temp=CmdPrompt(prompt,defaultresponse); + while(itisdone==false) { + if((temp==OptionA) || (temp==OptionB)) { + itisdone=true; + } else { + this.WriteLine("Valid options are " + OptionA + " or " + OptionB); + temp=CmdPrompt(prompt,defaultresponse); + } + } + return temp; + } + + // Runs a command with a number of parameters + public override Object RunCmd(string Cmd, string[] cmdparams) { + switch(Cmd) { + case "help": + this.WriteLine("show users - show info about connected users"); + this.WriteLine("shutdown - disconnect all clients and shutdown"); + break; + + case "show": + ShowCommands(cmdparams[0]); + break; + + case "shutdown": + OpenSim_Main.Shutdown(); + break; + } + return null; + } + + // Shows data about something + public override void ShowCommands(string ShowWhat) { + switch(ShowWhat) { + case "uptime": + //this.WriteLine("OpenSim has been running since " + OpenSim_Main.startuptime.ToString()); + // this.WriteLine("That is " + (DateTime.Now-OpenSim_Main.startuptime).ToString()); + break; + case "users": + OpenSim.world.Avatar TempAv; + this.WriteLine(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}","Firstname", "Lastname","Agent ID", "Session ID", "Circuit", "IP")); + foreach (libsecondlife.LLUUID UUID in OpenSim_Main.local_world.Entities.Keys) { + TempAv=(OpenSim.world.Avatar)OpenSim_Main.local_world.Entities[UUID]; + //this.WriteLine(String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}",TempAv.firstname, TempAv.lastname,UUID, TempAv.ControllingClient.SessionID, TempAv.ControllingClient.CircuitCode, TempAv.ControllingClient.userEP.ToString())); + } + break; + } + } + + // Displays a prompt to the user and then runs the command they entered + public override void MainConsolePrompt() { + string[] tempstrarray; + string tempstr = this.CmdPrompt("OpenSim-" + OpenSim_Main.cfg.RegionHandle.ToString() + " # "); + tempstrarray = tempstr.Split(' '); + string cmd=tempstrarray[0]; + Array.Reverse(tempstrarray); + Array.Resize(ref tempstrarray,tempstrarray.Length-1); + Array.Reverse(tempstrarray); + string[] cmdparams=(string[])tempstrarray; + RunCmd(cmd,cmdparams); + } + } +} + + diff --git a/src/RemoteServers/RemoteGridServers/RemoteGrid.cs b/src/RemoteServers/RemoteGridServers/RemoteGrid.cs index 2279ba8b5f..46f82a4581 100644 --- a/src/RemoteServers/RemoteGridServers/RemoteGrid.cs +++ b/src/RemoteServers/RemoteGridServers/RemoteGrid.cs @@ -72,7 +72,7 @@ namespace RemoteGridServers public RemoteGridServer() { - Console.WriteLine("Remote Grid Server class created"); + ServerConsole.MainConsole.Instance.WriteLine("Remote Grid Server class created"); } public bool RequestConnection() @@ -147,7 +147,7 @@ namespace RemoteGridServers this._remoteAssetServerThread = new Thread(new ThreadStart(RunRequests)); this._remoteAssetServerThread.IsBackground = true; this._remoteAssetServerThread.Start(); - Console.WriteLine("Remote Asset Server class created"); + ServerConsole.MainConsole.Instance.WriteLine("Remote Asset Server class created"); } public void SetReceiver(IAssetReceiver receiver) @@ -186,7 +186,7 @@ namespace RemoteGridServers //we need to add support for the asset server not knowing about a requested asset ARequest req = this._assetRequests.Dequeue(); LLUUID assetID = req.AssetID; - Console.WriteLine(" RemoteAssetServer- Got a AssetServer request, processing it"); + ServerConsole.MainConsole.Instance.WriteLine(" RemoteAssetServer- Got a AssetServer request, processing it"); WebRequest AssetLoad = WebRequest.Create(this.AssetServerUrl + "getasset/" + AssetSendKey + "/" + assetID + "/data"); WebResponse AssetResponse = AssetLoad.GetResponse(); byte[] idata = new byte[(int)AssetResponse.ContentLength]; diff --git a/src/RemoteServers/RemoteGridServers/RemoteGridServers.csproj b/src/RemoteServers/RemoteGridServers/RemoteGridServers.csproj index cc314a8c35..be35e5d2f4 100644 --- a/src/RemoteServers/RemoteGridServers/RemoteGridServers.csproj +++ b/src/RemoteServers/RemoteGridServers/RemoteGridServers.csproj @@ -30,14 +30,20 @@ ..\..\..\Libsecond-dailys\libsl-03-03\trunk\libsecondlife-cs\obj\Debug\libsecondlife.dll False - - ..\..\..\GridInterfaces\GridInterfaces\bin\Debug\GridInterfaces.dll - False - + + + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245} + ServerConsole + + + {5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9} + GridInterfaces + + \ No newline at end of file diff --git a/src/Second-server.csproj b/src/Second-server.csproj index a08160b5b7..07ab5f4489 100644 --- a/src/Second-server.csproj +++ b/src/Second-server.csproj @@ -39,10 +39,6 @@ - - ..\physics\PhysicsManager\bin\Release\PhysicsManager.dll - False - ..\Version0_2_myserver\OpenSim\bin\Debug\log4net.dll False @@ -55,16 +51,11 @@ ..\Version0_2_myserver\OpenSim\bin\Debug\libsecondlife.dll False - - ..\GridInterfaces\GridInterfaces\bin\Debug\GridInterfaces.dll - False - - @@ -78,10 +69,23 @@ + + + {5DA3174D-42F9-416D-9F0B-AF41FA2BE2F9} + GridInterfaces + + + {3C86A846-7977-4EE7-A8DC-DD487FA5DC2B} + PhysicsManager + + + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245} + ServerConsole + \ No newline at end of file diff --git a/src/Second-server.sln b/src/Second-server.sln index bb099e2bc4..96755ee15c 100644 --- a/src/Second-server.sln +++ b/src/Second-server.sln @@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhysicsManager", "physics\P EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhysXplugin", "physics\plugins\PhysXplugin.csproj", "{ADB751AA-8426-4668-B1FA-43762126CEB3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerConsole", "ServerConsole\ServerConsole\ServerConsole.csproj", "{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|.NET 1.1 = Debug|.NET 1.1 @@ -79,6 +81,14 @@ Global {ADB751AA-8426-4668-B1FA-43762126CEB3}.Release|.NET 1.1.ActiveCfg = Release|.NET 1.1 {ADB751AA-8426-4668-B1FA-43762126CEB3}.Release|Any CPU.Build.0 = Release|Any CPU {ADB751AA-8426-4668-B1FA-43762126CEB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Debug|.NET 1.1.Build.0 = Debug|.NET 1.1 + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Debug|.NET 1.1.ActiveCfg = Debug|.NET 1.1 + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Release|.NET 1.1.Build.0 = Release|.NET 1.1 + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Release|.NET 1.1.ActiveCfg = Release|.NET 1.1 + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Release|Any CPU.Build.0 = Release|Any CPU + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/ServerConsole/ServerConsole/AssemblyInfo.cs b/src/ServerConsole/ServerConsole/AssemblyInfo.cs new file mode 100644 index 0000000000..00a9b7d748 --- /dev/null +++ b/src/ServerConsole/ServerConsole/AssemblyInfo.cs @@ -0,0 +1,31 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("ServerConsole")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ServerConsole")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// This sets the default COM visibility of types in the assembly to invisible. +// If you need to expose a type to COM, use [ComVisible(true)] on that type. +[assembly: ComVisible(false)] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all values by your own or you can build default build and revision +// numbers with the '*' character (the default): + +[assembly: AssemblyVersion("1.0.*")] diff --git a/src/ServerConsole/ServerConsole/ServerConsole.cs b/src/ServerConsole/ServerConsole/ServerConsole.cs new file mode 100644 index 0000000000..93c8114a85 --- /dev/null +++ b/src/ServerConsole/ServerConsole/ServerConsole.cs @@ -0,0 +1,91 @@ +/* +* Copyright (c) OpenSim project, http://sim.opensecondlife.org/ +* +* 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 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 ``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 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; + +namespace ServerConsole +{ + public class MainConsole { + + private static ConsoleBase instance; + + public static ConsoleBase Instance + { + get + { + return instance; + } + set + { + instance = value; + } + } + + public MainConsole() + { + + } + } + + public abstract class ConsoleBase + { + + public enum ConsoleType { + Local, // Use stdio + TCP, // Use TCP/telnet + SimChat // Use in-world chat (for gods) + } + + public abstract void Close(); + + // You know what ReadLine() and WriteLine() do, right? And Read() and Write()? Right, you do actually know C#, right? Are you actually a programmer? Do you know english? Do you find my sense of humour in comments irritating? Good, glad you're still here + public abstract void WriteLine(string Line) ; + + public abstract string ReadLine(); + + public abstract int Read() ; + + public abstract void Write(string Line) ; + + // Displays a command prompt and waits for the user to enter a string, then returns that string + public abstract string CmdPrompt(string prompt) ; + + // Displays a command prompt and returns a default value if the user simply presses enter + public abstract string CmdPrompt(string prompt, string defaultresponse); + + // Displays a command prompt and returns a default value, user may only enter 1 of 2 options + public abstract string CmdPrompt(string prompt, string defaultresponse, string OptionA, string OptionB) ; + + // Runs a command with a number of parameters + public abstract Object RunCmd(string Cmd, string[] cmdparams) ; + + // Shows data about something + public abstract void ShowCommands(string ShowWhat) ; + + // Displays a prompt to the user and then runs the command they entered + public abstract void MainConsolePrompt() ; + } +} diff --git a/src/ServerConsole/ServerConsole/ServerConsole.csproj b/src/ServerConsole/ServerConsole/ServerConsole.csproj new file mode 100644 index 0000000000..3d85860169 --- /dev/null +++ b/src/ServerConsole/ServerConsole/ServerConsole.csproj @@ -0,0 +1,35 @@ + + + Library + ServerConsole + ServerConsole + Debug + AnyCPU + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245} + + + bin\Debug\ + False + DEBUG;TRACE + True + Full + True + + + bin\Release\ + True + TRACE + False + None + False + + + + + + + + + + + \ No newline at end of file diff --git a/src/ServerConsole/ServerConsole/ServerConsole.sln b/src/ServerConsole/ServerConsole/ServerConsole.sln new file mode 100644 index 0000000000..07445dbf92 --- /dev/null +++ b/src/ServerConsole/ServerConsole/ServerConsole.sln @@ -0,0 +1,7 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# SharpDevelop 2.1.0.2017 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerConsole", "ServerConsole.csproj", "{C9A6026D-8E0C-4FE4-8691-FB2A566AA245}" +EndProject +Global +EndGlobal diff --git a/src/physics/PhysicsManager.cs b/src/physics/PhysicsManager.cs index 90f6bf38bf..208e35fad4 100644 --- a/src/physics/PhysicsManager.cs +++ b/src/physics/PhysicsManager.cs @@ -48,12 +48,12 @@ namespace PhysicsSystem { if(_plugins.ContainsKey(engineName)) { - Console.WriteLine("creating "+engineName); + ServerConsole.MainConsole.Instance.WriteLine("creating "+engineName); return _plugins[engineName].GetScene(); } else { - Console.WriteLine("couldn't find physicsEngine: "+ engineName); + ServerConsole.MainConsole.Instance.WriteLine("couldn't find physicsEngine: "+ engineName); return null; } } diff --git a/src/physics/PhysicsManager.csproj b/src/physics/PhysicsManager.csproj index 9977297fb1..dc705e2619 100644 --- a/src/physics/PhysicsManager.csproj +++ b/src/physics/PhysicsManager.csproj @@ -31,5 +31,11 @@ + + + {C9A6026D-8E0C-4FE4-8691-FB2A566AA245} + ServerConsole + + \ No newline at end of file diff --git a/src/physics/plugins/PhysXplugin.csproj b/src/physics/plugins/PhysXplugin.csproj index 76272c8f76..1b84046a92 100644 --- a/src/physics/plugins/PhysXplugin.csproj +++ b/src/physics/plugins/PhysXplugin.csproj @@ -26,14 +26,16 @@ - - ..\..\PhysicsManager\bin\Release\PhysicsManager.dll - False - + + + {3C86A846-7977-4EE7-A8DC-DD487FA5DC2B} + PhysicsManager + + \ No newline at end of file diff --git a/src/world/Avatar.cs b/src/world/Avatar.cs index 3b56b381b1..7b3ad03375 100644 --- a/src/world/Avatar.cs +++ b/src/world/Avatar.cs @@ -21,7 +21,7 @@ namespace OpenSim.world private List forcesList = new List(); public Avatar(OpenSimClient TheClient) { - Console.WriteLine("Avatar.cs - Loading details from grid (DUMMY)"); + ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)"); ControllingClient=TheClient; SetupTemplate("avatar-template.dat"); position = new LLVector3(100.0f,100.0f,30.0f); @@ -100,7 +100,7 @@ namespace OpenSim.world } public void CompleteMovement(World RegionInfo) { - Console.WriteLine("Avatar.cs:CompleteMovement() - Constructing AgentMovementComplete packet"); + ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs:CompleteMovement() - Constructing AgentMovementComplete packet"); AgentMovementCompletePacket mov = new AgentMovementCompletePacket(); mov.AgentData.SessionID = this.ControllingClient.SessionID; mov.AgentData.AgentID = this.ControllingClient.AgentID; @@ -110,7 +110,7 @@ namespace OpenSim.world mov.Data.Position = new LLVector3(100f, 100f, 23f); mov.Data.LookAt = new LLVector3(0.99f, 0.042f, 0); - Console.WriteLine("Sending AgentMovementComplete packet"); + ServerConsole.MainConsole.Instance.WriteLine("Sending AgentMovementComplete packet"); ControllingClient.OutPacket(mov); } @@ -199,11 +199,11 @@ namespace OpenSim.world //should be moved somewhere else public void SendRegionHandshake(World RegionInfo) { - Console.WriteLine("Avatar.cs:SendRegionHandshake() - Creating empty RegionHandshake packet"); + ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionHandshake() - Creating empty RegionHandshake packet"); System.Text.Encoding _enc = System.Text.Encoding.ASCII; RegionHandshakePacket handshake = new RegionHandshakePacket(); - Console.WriteLine("Avatar.cs:SendRegionhandshake() - Filling in RegionHandshake details"); + ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionhandshake() - Filling in RegionHandshake details"); handshake.RegionInfo.BillableFactor = 0; handshake.RegionInfo.IsEstateManager = false; handshake.RegionInfo.TerrainHeightRange00 = 60; @@ -229,7 +229,7 @@ namespace OpenSim.world handshake.RegionInfo.TerrainDetail3 = new LLUUID("00000000-0000-0000-0000-000000000000"); handshake.RegionInfo.CacheID = new LLUUID("545ec0a5-5751-1026-8a0b-216e38a7ab37"); - Console.WriteLine("Avatar.cs:SendRegionHandshake() - Sending RegionHandshake packet"); + ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs:SendRegionHandshake() - Sending RegionHandshake packet"); this.ControllingClient.OutPacket(handshake); } diff --git a/src/world/World.cs b/src/world/World.cs index ebb7872b17..49e40debca 100644 --- a/src/world/World.cs +++ b/src/world/World.cs @@ -9,85 +9,85 @@ namespace OpenSim.world { public class World { - public Dictionary Entities; - public float[] LandMap; - public ScriptEngine Scripts; - public TerrainDecode terrainengine = new TerrainDecode(); - public uint _localNumber=0; - private PhysicsScene phyScene; - private float timeStep= 0.1f; - - private Random Rand = new Random(); + public Dictionary Entities; + public float[] LandMap; + public ScriptEngine Scripts; + public TerrainDecode terrainengine = new TerrainDecode(); + public uint _localNumber=0; + private PhysicsScene phyScene; + private float timeStep= 0.1f; + + private Random Rand = new Random(); - public World() - { - Console.WriteLine("World.cs - creating new entitities instance"); - Entities = new Dictionary(); + public World() + { + ServerConsole.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance"); + Entities = new Dictionary(); - Console.WriteLine("World.cs - creating LandMap"); - terrainengine = new TerrainDecode(); - LandMap = new float[65536]; - for(int i =0; i < 65536; i++) { - LandMap[i] = 21.4989f; - } - - Console.WriteLine("World.cs - Creating script engine instance"); - // Initialise this only after the world has loaded - Scripts = new ScriptEngine(this); - } - - public PhysicsScene PhysScene - { - set - { - this.phyScene = value; - } - } - - public void Update() - { - if(this.phyScene.IsThreaded) - { - this.phyScene.GetResults(); - - } - - foreach (libsecondlife.LLUUID UUID in Entities.Keys) - { - Entities[UUID].addFroces(); - } - - this.phyScene.Simulate(timeStep); - - foreach (libsecondlife.LLUUID UUID in Entities.Keys) - { - Entities[UUID].update(); - } - } + ServerConsole.MainConsole.Instance.WriteLine("World.cs - creating LandMap"); + terrainengine = new TerrainDecode(); + LandMap = new float[65536]; + for(int i =0; i < 65536; i++) { + LandMap[i] = 21.4989f; + } + + ServerConsole.MainConsole.Instance.WriteLine("World.cs - Creating script engine instance"); + // Initialise this only after the world has loaded + Scripts = new ScriptEngine(this); + } + + public PhysicsScene PhysScene + { + set + { + this.phyScene = value; + } + } + + public void Update() + { + if(this.phyScene.IsThreaded) + { + this.phyScene.GetResults(); + + } + + foreach (libsecondlife.LLUUID UUID in Entities.Keys) + { + Entities[UUID].addFroces(); + } + + this.phyScene.Simulate(timeStep); + + foreach (libsecondlife.LLUUID UUID in Entities.Keys) + { + Entities[UUID].update(); + } + } - public void SendLayerData(OpenSimClient RemoteClient) { - for(int x=0; x<16; x=x+4) for(int y=0; y<16; y++){ - Packet layerpack=this.terrainengine.CreateLayerPacket(LandMap, x,y,x+4,y+1); - RemoteClient.OutPacket(layerpack); - } - } + public void SendLayerData(OpenSimClient RemoteClient) { + for(int x=0; x<16; x=x+4) for(int y=0; y<16; y++){ + Packet layerpack=this.terrainengine.CreateLayerPacket(LandMap, x,y,x+4,y+1); + RemoteClient.OutPacket(layerpack); + } + } - public void AddViewerAgent(OpenSimClient AgentClient) { - Console.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent"); - Avatar NewAvatar = new Avatar(AgentClient); - Console.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world"); - this.Entities.Add(AgentClient.AgentID, NewAvatar); - Console.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake "); - NewAvatar.SendRegionHandshake(this); - - NewAvatar.PhysActor = this.phyScene.AddAvatar(new PhysicsVector(NewAvatar.position.X, NewAvatar.position.Y, NewAvatar.position.Z)); - //this.Update(); // will work for now, but needs to be optimised so we don't update everything in the sim for each new user - } + public void AddViewerAgent(OpenSimClient AgentClient) { + ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent"); + Avatar NewAvatar = new Avatar(AgentClient); + ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world"); + this.Entities.Add(AgentClient.AgentID, NewAvatar); + ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake "); + NewAvatar.SendRegionHandshake(this); + + NewAvatar.PhysActor = this.phyScene.AddAvatar(new PhysicsVector(NewAvatar.position.X, NewAvatar.position.Y, NewAvatar.position.Z)); + //this.Update(); // will work for now, but needs to be optimised so we don't update everything in the sim for each new user + } - public bool Backup() { - /* TODO: Save the current world entities state. */ + public bool Backup() { + /* TODO: Save the current world entities state. */ - return false; - } + return false; + } } }