/// <summary>
        /// Callback from the module manager when a console command is issued
        /// </summary>
        /// <param name="command"></param>
        public void Command(string[] command)
        {
            if (command.Length > 0 && command[0].Trim() != "")
            {
                if (commandInterface == null || commandInterface.EchoCommands)
                {
                    LogCommand(command);
                }

                switch (command[0].ToLower())
                {
                case "stop":
                    BeginStop();
                    break;

                case "ver":
                    MasterServer.LogMessage("[INFO] Application  : {0}", MasterServer.Title);
                    MasterServer.LogMessage("[INFO] Version      : {0}", MasterServer.Version);
                    MasterServer.LogMessage("[INFO] NetVersion   : {0}", MasterServer.NetVersion);
                    MasterServer.LogMessage("[INFO] Copyright    : {0}", MasterServer.Copyright);
                    MasterServer.LogMessage("[INFO] Legal Notice : Unreal and the Unreal logo are registered trademarks of Epic");
                    MasterServer.LogMessage("                      Games, Inc. ALL RIGHTS RESERVED.");
                    break;

                case "clear":
                case "cls":
                    log.Clear();

                    if (commandInterface != null)
                    {
                        commandInterface.Notify("LOG", "\u001B[2J");
                    }
                    break;

                case "ls":
                    MasterServer.LogMessage("List what?");
                    break;

                case "dir":
                    MasterServer.LogMessage("This isn't DOS...");
                    break;

                case "motd":
                    if (command.Length > 1)
                    {
                        string locale = command[1].ToLower();

                        if (command.Length > 2)
                        {
                            if (!MasterServer.SetMOTD(locale, String.Join(" ", command, 2, command.Length - 2)))
                            {
                                MasterServer.LogMessage("[MOTD] Error, locale \"{0}\" is not defined. MOTD was not updated.", locale);
                            }
                        }

                        MasterServer.LogMessage("[MOTD] {0} = \"{1}\"", locale, MasterServer.GetMOTD(locale, false));
                    }
                    else
                    {
                        MasterServer.LogMessage("motd <locale> <message>");
                    }

                    break;

                case "stat":
                    if (command.Length > 1)
                    {
                        switch (command[1].ToLower())
                        {
                        case "clear":
                            MasterServer.Log("Total Queries = {0}", TotalQueries);
                            MasterServer.Log("Total Web Queries = {0}", TotalWebQueries);

                            Stats.Default.TotalQueries    = 0;
                            Stats.Default.TotalWebQueries = 0;
                            Stats.Default.Save();

                            MasterServer.Log("Stats cleared");
                            break;
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("stat clear    Clear statistics");
                    }
                    break;

                case "log":
                    if (command.Length > 1)
                    {
                        switch (command[1].ToLower())
                        {
                        case "clear":
                            log.Clear();
                            break;

                        case "commit":
                            if (logWriter != null)
                            {
                                logWriter.Commit();
                            }
                            break;
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("log clear     Clear log buffer");
                        MasterServer.LogMessage("log commit    Commit unsaved log");
                    }
                    break;

                case "mslist":
                    if (command.Length > 1)
                    {
                        switch (command[1].ToLower())
                        {
                        case "on":
                            MasterServer.Settings.MSListEnabled = true;
                            MasterServer.Settings.Save();
                            MasterServer.LogMessage("MSLIST function turned ON");
                            break;

                        case "off":
                            MasterServer.Settings.MSListEnabled = false;
                            MasterServer.Settings.Save();
                            MasterServer.LogMessage("MSLIST function turned OFF");
                            break;

                        case "add":
                            if (command.Length > 3)
                            {
                                ushort portNumber = 0;

                                if (ushort.TryParse(command[3], out portNumber))
                                {
                                }
                                else
                                {
                                    MasterServer.LogMessage("Invalid port number specified");
                                }
                            }
                            else
                            {
                                MasterServer.LogMessage("mslist add <host> <port>");
                            }
                            break;

                        case "port":
                            if (command.Length > 2)
                            {
                                ushort portNumber = 0;

                                if (ushort.TryParse(command[2], out portNumber))
                                {
                                    if (MasterServer.Settings.MSListInterfaces == null)
                                    {
                                        MasterServer.Settings.MSListInterfaces = new List <ushort>();
                                    }

                                    if (MasterServer.Settings.MSListInterfaces.Contains(portNumber))
                                    {
                                        if (MasterServer.Settings.ListenPorts.Contains(portNumber))
                                        {
                                            MasterServer.Settings.MSListInterfaces.Remove(portNumber);
                                            MasterServer.Settings.Save();
                                        }
                                        else
                                        {
                                            MasterServer.LogMessage("Error adding MSLIST port, the specified port is not bound");
                                        }
                                    }
                                    else
                                    {
                                        MasterServer.Settings.MSListInterfaces.Add(portNumber);
                                        MasterServer.Settings.Save();
                                    }

                                    break;
                                }
                                else
                                {
                                    MasterServer.LogMessage("Invalid port number specified");
                                }
                            }
                            else
                            {
                                MasterServer.LogMessage("mslist port <port>");

                                List <string> boundPorts = new List <string>();

                                if (MasterServer.Settings.MSListInterfaces != null)
                                {
                                    foreach (ushort port in MasterServer.Settings.MSListInterfaces)
                                    {
                                        boundPorts.Add(port.ToString());
                                    }
                                }

                                MasterServer.LogMessage("Current MSLIST port bindings: {0}", String.Join(",", boundPorts.ToArray()));
                            }
                            break;
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("--------------------------------");
                        MasterServer.LogMessage("MSLIST function is currently {0}", MasterServer.Settings.MSListEnabled ? "ON" : "OFF");
                        MasterServer.LogMessage("--------------------------------");
                        MasterServer.LogMessage("mslist on     Turn MSLIST on");
                        MasterServer.LogMessage("mslist off    Turn MSLIST off");
                        MasterServer.LogMessage("mslist port   Set MSLIST ports");
                        MasterServer.LogMessage("mslist add    Add MSLIST entries");
                        MasterServer.LogMessage("mslist remove Remove MSLIST entries");
                    }
                    break;

                case "port":

                    if (command.Length > 1 && (command[1].ToLower() == "bind" || command[1].ToLower() == "unbind"))
                    {
                        if (command.Length > 2)
                        {
                            ushort portNumber = 0;

                            if (ushort.TryParse(command[2], out portNumber))
                            {
                                switch (command[1].ToLower())
                                {
                                case "bind":
                                    if (!MasterServer.Settings.ListenPorts.Contains(portNumber))
                                    {
                                        MasterServer.Settings.ListenPorts.Add(portNumber);
                                        MasterServer.Settings.Save();
                                    }

                                    Bind(portNumber);
                                    break;

                                case "unbind":
                                    if (MasterServer.Settings.ListenPorts.Contains(portNumber))
                                    {
                                        MasterServer.Settings.ListenPorts.Remove(portNumber);
                                        MasterServer.Settings.Save();
                                    }

                                    if (MasterServer.Settings.MSListInterfaces != null && MasterServer.Settings.MSListInterfaces.Contains(portNumber))
                                    {
                                        MasterServer.Settings.MSListInterfaces.Remove(portNumber);
                                        MasterServer.Settings.Save();
                                    }

                                    UnBind(portNumber);
                                    break;
                                }
                            }
                            else
                            {
                                MasterServer.LogMessage("[NET] Invalid port number specified");
                            }
                        }
                        else
                        {
                            MasterServer.LogMessage("port {0} <port>", command[1]);
                            MasterServer.LogMessage("Current listen ports: {0}", MasterServer.ListenPorts);
                        }
                    }
                    else
                    {
                        MasterServer.LogMessage("port bind     Bind a new listen port");
                        MasterServer.LogMessage("port unbind   Unbind a listen port");
                        MasterServer.LogMessage("Current listen ports: {0}", MasterServer.ListenPorts);
                    }
                    break;

                case "help":
                case "?":
                    MasterServer.LogMessage("help          Displays this message");
                    MasterServer.LogMessage("stop          Gracefully stops the master server");
                    MasterServer.LogMessage("motd          Set the Message of the Day (MOTD)");
                    MasterServer.LogMessage("stat          Statistics commands");
                    MasterServer.LogMessage("log           Server log commands");

                    break;
                }
            }
        }