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; }