Inheritance: IServerStatus
        public String AddServer(Server s)
        {
            if (s.type == ServerType.None)
                return "StartServer Called however Server Type is None. Aborting";

            //see if we dont already have an existing server
            Server e = FindServer(s.type, s.args);
            if (e == null) //if we don't set e as the newly created server (otherwise we use the old one and discard the new one)
            {
                e = s;
                ServerList.Add(e);
            }

            //if our server is running
            if (e.IsRunning)
            {
                return "Server: "+e.type + " args: "+e.args+" is already running";
            }

            //setup the events
            e.Process.Cancelled += new EventHandler(pc_Cancelled);
            e.Process.Completed += new EventHandler(pc_Completed);
            e.Process.Failed += new System.Threading.ThreadExceptionEventHandler(pc_Failed);
            e.Process.StdErrReceived += new DataReceivedHandler(pc_StdErrReceived);
            e.Process.StdOutReceived += new DataReceivedHandler(pc_StdOutReceived);

            //set the timers/flags and run
            e.StartedTime = DateTime.Now.Ticks;
            e.IsRunning = true;
            e.IsCrashed = false;
            e.Process.Start();

            //send the started message
            return "Started Server. Type: " + e.type.ToString() + " Args: " + e.args;
        }
        public String RemoveServer(Server s)
        {
            Server e = FindServer(s.Process);
            if (e == null) return "Unable to find Server type: " + s.type + " args:" + s.args;

            e.Process.Cancelled -= new EventHandler(pc_Cancelled);
            e.Process.Completed -= new EventHandler(pc_Completed);
            e.Process.Failed -= new System.Threading.ThreadExceptionEventHandler(pc_Failed);
            e.Process.StdErrReceived -= new DataReceivedHandler(pc_StdErrReceived);
            e.Process.StdOutReceived -= new DataReceivedHandler(pc_StdOutReceived);
            e.Process.Cancel(); //TODO: investigate whether cancelandwait or addoutput("q") is more appropriate

            ServerList.Remove(e);

            return "Stopped Server type: " + s.type + " args:" + s.args;
        }