new object $login_interface: $has_commands;

var $root inited = 1;
var $has_commands shortcuts = #[];
var $has_commands commands = #[["co", 'connect_cmd], ["connect", 'connect_cmd], ["guest", 'connect_guest_cmd], ["co-guest", 'connect_guest_cmd], ["connect-guest", 'connect_guest_cmd]];

public method .new_connection() {
  sender().write("\"connect-guest [your name] [your email]\" to connect.");
};

public method .parse_line() {
  arg line;
  var cmd, ret;

  if ((cmd = .match_command(line))) {
    catch any {
      ret = .(cmd[1])(sender(), line, cmd[2], @(cmd[3].explode()));
    } with {
      switch (error()) {
	case ~numargs:
	  return "Wrong number of arguments.";
	default:
	  .log($parse_lib.traceback(traceback()));
      }
    }
    return ret;
  } else {
    return "No such command.";
  }
};

protected method .connect_cmd() {
  arg conn, cmdstr, cmd, username, password;
  var new;

  // This is called when a user connects
  new = $user.spawn();
  new.init(conn, username);
  return ['interface, new];
};

protected method .connect_guest_cmd() {
  arg conn, cmdstr, cmd, username, email;

  new = $user.spawn();
  new.set_name(conn, username);
  return ['interface, new];
};