#region Arthea License /*********************************************************************** * Arthea MUD by R. Jennings (2007) http://arthea.googlecode.com/ * * By using this code you comply with the Artistic and GPLv2 Licenses. * ***********************************************************************/ #endregion using System; using System.IO; using System.Text; using System.Threading; using System.Windows.Forms; using Arthea; using Arthea.Commands.Admin; using Arthea.Environment; namespace ArtheaGUI { public partial class MainForm : Form { #region [rgn] Fields (3) private static readonly object GuiLock = new object(); private readonly bool reboot = false; private Thread serverThread; #endregion [rgn] #region [rgn] Constructors (1) /// <summary> /// Constructs the main form. /// </summary> /// <param name="reboot">true if rebooting</param> public MainForm(bool reboot) { InitializeComponent(); this.reboot = reboot; Console.SetOut(new TextBoxWriter(txtOutput)); } #endregion [rgn] #region [rgn] Methods (6) // [rgn] Private Methods (6) private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { StringBuilder buf = new StringBuilder(); buf.Append(Server.Instance.Version); buf.AppendFormat(" (GUI v{0}.{1})", Environment.Version.Major, Environment.Version.Minor); buf.AppendLine(); buf.AppendLine(Server.Instance.About); MessageBox.Show(buf.ToString(), "About", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void exitToolStripMenuItem1_Click(object sender, EventArgs e) { Close(); } private void lockToolStripMenuItem_Click(object sender, EventArgs e) { switch (lockToolStripMenuItem.Text) { case "&Lock": Globals.LockDown = true; lockToolStripMenuItem.Text = "Un&lock"; break; case "Un&lock": Globals.LockDown = false; lockToolStripMenuItem.Text = "&Lock"; break; } } private void portToolStripMenuItem_Click(object sender, EventArgs e) { PortsDialog dlg = new PortsDialog(); dlg.ShowDialog(this); if (dlg.DialogResult == DialogResult.OK) { lock (GuiLock) { Globals.PortNumber = dlg.Port; RebootRecovery.Port = dlg.RecoveryPort; } } dlg.Dispose(); } private void runtimeToolStripMenuItem_Click(object sender, EventArgs e) { switch (runtimeToolStripMenuItem.Text) { case "&Start": case "Re&start": serverThread = new Thread(StartServer); serverThread.Start(); runtimeToolStripMenuItem.Text = "&Stop"; lockToolStripMenuItem.Visible = true; break; case "&Stop": serverThread.Abort("...server stopped."); runtimeToolStripMenuItem.Text = "Re&start"; lockToolStripMenuItem.Visible = false; GC.Collect(); break; } } private void StartServer() { Server.Instance.Start(reboot); } #endregion [rgn] } /// <summary> /// Implements a text box writer /// </summary> public class TextBoxWriter : TextWriter { #region [rgn] Fields (1) private readonly RichTextBox textBox; #endregion [rgn] #region [rgn] Constructors (1) /// <summary> /// Constructs a text box writer /// </summary> /// <param name="textBox"></param> public TextBoxWriter(RichTextBox textBox) { this.textBox = textBox; } #endregion [rgn] #region [rgn] Properties (1) /// <summary> /// Gets the encoding for this textbox /// </summary> public override Encoding Encoding { get { return Encoding.ASCII; } } #endregion [rgn] #region [rgn] Methods (17) // [rgn] Public Methods (16) /// <summary> /// Write a string to the text box /// </summary> /// <param name="value"></param> public override void Write(object value) { AppendText(value); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void Write(bool value) { AppendText(value); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void Write(char value) { AppendText(value); } /// <summary> /// Write a value to the text box /// </summary> public override void Write(char[] buffer) { AppendText(new string(buffer)); } /// <summary> /// Write a value to the text box /// </summary> public override void Write(char[] buffer, int index, int count) { AppendText("error: unimplemented method"); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void Write(decimal value) { AppendText(value); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void Write(double value) { AppendText(value); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void Write(float value) { AppendText(value); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void Write(int value) { AppendText(value); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void Write(long value) { AppendText(value); } /// <summary> /// Write a value to the text box /// </summary> public override void Write(string format, object arg0) { AppendText(string.Format(format, arg0)); } /// <summary> /// Write a value to the text box /// </summary> public override void Write(string format, object arg0, object arg1) { AppendText(string.Format(format, arg0, arg1)); } /// <summary> /// Write a value to the text box /// </summary> public override void Write(string format, object arg0, object arg1, object arg2) { AppendText(string.Format(format, arg0, arg1, arg2)); } /// <summary> /// Write a value to the text box /// </summary> public override void Write(string format, params object[] arg) { AppendText(string.Format(format, arg)); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void WriteLine(object value) { AppendText(value); AppendText(Environment.NewLine); } /// <summary> /// Write a value to the text box /// </summary> /// <param name="value">what to append</param> public override void WriteLine(string value) { AppendText(value); AppendText(Environment.NewLine); } // [rgn] Private Methods (1) private void AppendText(object text) { if (textBox.InvokeRequired) { OutputCallBack c = AppendText; textBox.FindForm().Invoke(c, new object[] {text}); } else { textBox.AppendText(text.ToString()); } } #endregion [rgn] #region Nested type: OutputCallBack private delegate void OutputCallBack(object text); #endregion } }