/* * 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.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace OpenSim.GUI { public partial class Main : Form { public ProcessManager proc_OpenSim; public ProcessManager proc_UserServer; public ProcessManager proc_GridServer; public ProcessManager proc_AssetServer; public Main() { InitializeComponent(); } private void Main_Load(object sender, EventArgs e) { txtInputUserServer.KeyPress += new KeyPressEventHandler(txtInputUserServer_KeyPress); txtInputGridServer.KeyPress += new KeyPressEventHandler(txtInputGridServer_KeyPress); txtInputAssetServer.KeyPress += new KeyPressEventHandler(txtInputAssetServer_KeyPress); txtInputRegionServer.KeyPress += new KeyPressEventHandler(txtInputRegionServer_KeyPress); tabLogs.Selected += new TabControlEventHandler(tabLogs_Selected); UpdateTabVisibility(); } void tabLogs_Selected(object sender, TabControlEventArgs e) { if (e.TabPage == tabUserServer) txtInputUserServer.Focus(); if (e.TabPage == tabGridServer) txtInputGridServer.Focus(); if (e.TabPage == tabAssetServer) txtInputAssetServer.Focus(); if (e.TabPage == tabRegionServer) txtInputRegionServer.Focus(); } void txtInputUserServer_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 13) { // We got a command e.Handled = true; proc_UserServer.StandardInput.WriteLine(txtInputUserServer.Text + "\r\n"); txtInputUserServer.Text = ""; } } void txtInputGridServer_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 13) { // We got a command e.Handled = true; proc_GridServer.StandardInput.WriteLine(txtInputGridServer.Text + "\r\n"); txtInputGridServer.Text = ""; } } void txtInputAssetServer_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 13) { // We got a command e.Handled = true; proc_AssetServer.StandardInput.WriteLine(txtInputAssetServer.Text + "\r\n"); txtInputAssetServer.Text = ""; } } void txtInputRegionServer_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 13) { // We got a command e.Handled = true; proc_OpenSim.StandardInput.WriteLine(txtInputRegionServer.Text + "\r\n"); txtInputRegionServer.Text = ""; } } private void btnStart_Click(object sender, EventArgs e) { // // THIS PART NEEDS TO BE MOVED TO A SEPARATE THREAD OR A TIMER OF SOME SORT // should not block on wait // ALSO - IF SOME SERVICES ARE NOT CONFIGURED, POP UP CONFIGURATION BOX FOR THAT SERVICE! // btnStart.Enabled = false; btnStop.Enabled = false; if (rbGridServer.Checked) { // Start UserServer proc_UserServer = new ProcessManager("OpenSim.Grid.UserServer.exe", ""); txtMainLog.AppendText("Starting: User server" + "\r\n"); proc_UserServer.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_UserServer_DataReceived); proc_UserServer.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_UserServer_DataReceived); proc_UserServer.StartProcess(); System.Threading.Thread.Sleep(3000); // Start GridServer proc_GridServer = new ProcessManager("OpenSim.Grid.GridServer.exe", ""); txtMainLog.AppendText("Starting: Grid server" + "\r\n"); proc_GridServer.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_GridServer_DataReceived); proc_GridServer.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_GridServer_DataReceived); proc_GridServer.StartProcess(); System.Threading.Thread.Sleep(3000); // Start AssetServer proc_AssetServer = new ProcessManager("OpenSim.Grid.AssetServer.exe", ""); txtMainLog.AppendText("Starting: Asset server" + "\r\n"); proc_AssetServer.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_AssetServer_DataReceived); proc_AssetServer.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_AssetServer_DataReceived); proc_AssetServer.StartProcess(); System.Threading.Thread.Sleep(3000); } // Start OpenSim string p = ""; if (rbGridServer.Checked) p = "-gridmode=true"; proc_OpenSim = new ProcessManager("OpenSim.EXE", p); txtMainLog.AppendText("Starting: OpenSim (Region server)" + "\r\n"); proc_OpenSim.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OpenSim_DataReceived); proc_OpenSim.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OpenSim_DataReceived); proc_OpenSim.StartProcess(); btnStart.Enabled = false; btnStop.Enabled = true; } public delegate void AppendText(string Text); void proc_UserServer_DataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e) { this.Invoke(new AppendText(txtUserServer.AppendText), new object[] { e.Data + "\r\n" }); this.Invoke(new AppendText(txtMainLog.AppendText), new object[] { "UserServer: " + e.Data + "\r\n" }); } void proc_GridServer_DataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e) { this.Invoke(new AppendText(txtGridServer.AppendText), new object[] { e.Data + "\r\n" }); this.Invoke(new AppendText(txtMainLog.AppendText), new object[] { "GridServer: " + e.Data + "\r\n" }); } void proc_AssetServer_DataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e) { this.Invoke(new AppendText(txtAssetServer.AppendText), new object[] { e.Data + "\r\n" }); this.Invoke(new AppendText(txtMainLog.AppendText), new object[] { "AssetServer: " + e.Data + "\r\n" }); } void proc_OpenSim_DataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e) { this.Invoke(new AppendText(txtOpenSim.AppendText), new object[] { e.Data + "\r\n" }); this.Invoke(new AppendText(txtMainLog.AppendText), new object[] { "OpenSim: " + e.Data + "\r\n" }); } private void btnStop_Click(object sender, EventArgs e) { btnStart.Enabled = false; btnStop.Enabled = false; if (proc_UserServer != null) { txtMainLog.AppendText("Shutting down UserServer. CPU time used: " + proc_UserServer.TotalProcessorTime.ToString() + "\r\n"); proc_UserServer.StopProcess(); } if (proc_GridServer != null) { txtMainLog.AppendText("Shutting down GridServer. CPU time used: " + proc_GridServer.TotalProcessorTime.ToString() + "\r\n"); proc_GridServer.StopProcess(); } if (proc_AssetServer != null) { txtMainLog.AppendText("Shutting down AssetServer. CPU time used: " + proc_AssetServer.TotalProcessorTime.ToString() + "\r\n"); proc_AssetServer.StopProcess(); } if (proc_OpenSim != null) { txtMainLog.AppendText("Shutting down OpenSim. CPU time used: " + proc_OpenSim.TotalProcessorTime.ToString() + "\r\n"); proc_OpenSim.StopProcess(); } btnStart.Enabled = true; btnStop.Enabled = false; } private void UpdateTabVisibility() { if (rbStandAloneMode.Checked) { if (tabLogs.TabPages.Contains(tabUserServer)) tabLogs.TabPages.Remove(tabUserServer); if (tabLogs.TabPages.Contains(tabGridServer)) tabLogs.TabPages.Remove(tabGridServer); if (tabLogs.TabPages.Contains(tabAssetServer)) tabLogs.TabPages.Remove(tabAssetServer); } else { if (!tabLogs.TabPages.Contains(tabUserServer)) tabLogs.TabPages.Add(tabUserServer); if (!tabLogs.TabPages.Contains(tabGridServer)) tabLogs.TabPages.Add(tabGridServer); if (!tabLogs.TabPages.Contains(tabAssetServer)) tabLogs.TabPages.Add(tabAssetServer); } } private void rbStandAloneMode_CheckedChanged(object sender, EventArgs e) { UpdateTabVisibility(); } private void rbGridRegionMode_CheckedChanged(object sender, EventArgs e) { UpdateTabVisibility(); } private void rbGridServer_CheckedChanged(object sender, EventArgs e) { UpdateTabVisibility(); } } }