home / connvers / src / main / java / avividi / connvers / server / ServerSideCommander.java

ServerSideCommander.java



package avividi.connvers.server;

import avividi.connvers.CommandInterpreter;

import java.util.List;

import static avividi.connvers.Connvers.printSystemLine;


public class ServerSideCommander implements CommandInterpreter {

  final ConnectionPool connectionPool;

  public ServerSideCommander(ConnectionPool connectionPool) {
    this.connectionPool = connectionPool;
  }

  @Override
  public void executeCommand(String message) {
    String[] split = message.trim().split(" ");
    if (split.length == 0) return;
    if (!split[0].startsWith("/")) return;

    String command = split[0].substring(1);

    if (command.equals("names")) {
      List<ConnectionPool.UserAndIp> users = connectionPool.listUsers();
      printSystemLine(String.format("Total users = %s", users.size()));
      users.forEach(u -> printSystemLine(String.format("<%s> (%s)", u.user(), u.ip())));
    }
    else if (command.equals("banned")) {
      List<ConnectionPool.UserAndIp> users = connectionPool.listBanned();
      printSystemLine(String.format("Total banned users = %s", users.size()));
      users.forEach(u -> printSystemLine(String.format("<%s> (%s)", u.user(), u.ip())));
    }
    else if (command.equals("kick") && split.length == 2) {
      connectionPool.kickUser(split[1].trim());
    }
    else if (command.equals("ban") && split.length == 2) {
      connectionPool.banUser(split[1].trim());
    }
    else if (command.equals("unban") && split.length == 2) {
      connectionPool.unbanUser(split[1].trim());
    }
    else {
      printSystemLine("unrecognized command");
    }
  }
}