home /
connvers /
src /
main /
java /
avividi /
connvers /
UserInputHandler.java
UserInputHandler.java
package avividi.connvers;
import avividi.connvers.protocol.Message;
import avividi.connvers.protocol.MessageTopic;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.time.Instant;
import static avividi.connvers.Connvers.MAX_MESSAGE_LENGTH;
import static avividi.connvers.Connvers.printSystemLine;
public class UserInputHandler implements Runnable {
private final String user;
private final boolean exitOnError;
private final Broadcaster broadcaster;
private final CommandInterpreter commandInterpreter;
public UserInputHandler(String user, boolean exitOnError, Broadcaster broadcaster, CommandInterpreter commandInterpreter) {
this.user = user;
this.exitOnError = exitOnError;
this.broadcaster = broadcaster;
this.commandInterpreter = commandInterpreter;
}
@Override
public void run() {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print(">");
String content;
while ((content = reader.readLine()) != null) {
if (content.isEmpty()) {
continue;
}
if (commandInterpreter.isCommand(content)) {
commandInterpreter.executeCommand(content);
continue;
}
System.out.print("\033[1A\033[K"); // clear input line
if (content.length() > MAX_MESSAGE_LENGTH) {
printSystemLine(String.format("(Message too long, clipped down to %s chars)", MAX_MESSAGE_LENGTH));
content = content.substring(0, MAX_MESSAGE_LENGTH);
}
broadcaster.broadcast(new Message(user, Instant.now(), MessageTopic.say, content));
System.out.print(">");
}
}
catch (Exception e) {
e.printStackTrace();
if (exitOnError) {
System.out.println("Shutdown");
System.exit(1);
}
}
}
}