protected abstract Response HandleCommand(Command cmd);
 protected virtual void OnCommandComplete(Command cmd)
 {
 }
        protected virtual Command ParseCommandLine(string line)
        {
            Command c = new Command();
            c.Raw = line;

            string[] command = line.Split(' ');

            string cmd = command[0].ToUpperInvariant();

            c.Arguments = new List<string>(command.Skip(1));
            c.RawArguments = string.Join(" ", command.Skip(1));

            c.Code = cmd;

            return c;
        }