public static void main(String[] args) {
CLI cli = new CLI();
cli.start();
Controller controller = Controller.getInstance();
controller.setUI(cli);
while (true) {
try {
CLICommand command = cli.getNextCommand();
if (command.getCommand() == CLICommand.Command.EXIT) { // Stop and kill this program
System.err.println("Exit command received, shutting down...");
controller.shutdown();
System.exit(0);
} else if (command.getCommand() == CLICommand.Command.USEROOM) {
controller.useRoom(command.getArg(1), command.getArg(0));
} else if (command.getCommand() == CLICommand.Command.LEAVEROOM) {
controller.leaveRoom(command.getArg(0));
} else if (command.getCommand() == CLICommand.Command.PRESENCE) {
Status s;
if (command.getArg(1).equalsIgnoreCase("Online"))
s = Status.Online;
else if (command.getArg(1).equalsIgnoreCase("Offline"))
s = Status.Offline;
else {
System.err.println("Unknown status");
continue;
}
controller.setRoomStatus(command.getArg(0), s);
} else if (command.getCommand() == CLICommand.Command.MESSAGE) {
controller.messageRoom(command.getArg(0), new Message(controller.getUserName(command.getArg(0)), command.getArg(1)));
} else if (command.getCommand() == CLICommand.Command.PVTMESSAGE) {
controller.messageRoom(command.getArg(1), new Message(controller.getUserName(command.getArg(1)), command.getArg(2), command.getArg(0)));
} else if (command.getCommand() == CLICommand.Command.ADDKEY) {
FileInputStream publicKeyFile = new FileInputStream(command.getArg(1));
byte publicKey[] = new byte[(int) publicKeyFile.available()];
publicKeyFile.read(publicKey);
FileInputStream privateKeyFile = new FileInputStream(command.getArg(2));
byte privateKey[] = new byte[(int) privateKeyFile.available()];
privateKeyFile.read(privateKey);
controller.addKeyPair(command.getArg(0), new Certificate("X.509", publicKey), new Certificate("X.509", privateKey));
} else if (command.getCommand() == CLICommand.Command.REMOVEKEY) {
FileInputStream publicKeyFile = new FileInputStream(command.getArg(1));
byte publicKey[] = new byte[(int) publicKeyFile.available()];
publicKeyFile.read(publicKey);
controller.removeKeyPair(command.getArg(0), new Certificate("X.509", publicKey));
} else if (command.getCommand() == CLICommand.Command.SECUREMESSAGE) {
FileInputStream publicKeyFile = new FileInputStream(command.getArg(0));
byte publicKey[] = new byte[(int) publicKeyFile.available()];
publicKeyFile.read(publicKey);
Certificate cert = new Certificate("X.509", publicKey);
controller.messageRoom(command.getArg(2), new Message(controller.getUserName(command.getArg(2)), command.getArg(3), command.getArg(1), cert));
}
} catch (RoomDoesNotExistException e) {
cli.alert(e.getMessage());
} catch (FileNotFoundException e) {
e.printStackTrace();