У вас есть правильная идея, но вам нужно больше думать о ней как о конечном автомате.
Клиент подключается, затем ему нужно перейти в состояние входа в систему, где вы ожидаете, что оноотправить аутентификационную информацию.Если неверно или истекло время ожидания, отсоедините.
Если правильно, перейдите в состояние обработки команд.Если вы получили команду выхода, либо перейдите в состояние очистки, либо просто отключитесь.
Вот общий план:
String line;
while ((line = in.readLine()) != null) {
switch (state) {
case login:
processLogin(line);
break;
case command:
processCommand(line);
break;
}
}
Ваша processLogin
функция может выглядеть следующим образом:
void processLogin(String line) {
if (user == null) {
user = line;
}
else if (password == null) {
password = line;
}
else {
if (validUser(user, password)) {
state = command;
}
else {
socket.close();
}
}
}
И ваша processCommand
функция:
void processCommand(String line) {
if (line.equals(...)) {
// Process each command like this
}
else if (line.equals("quit")) {
socket.close();
}
else {
System.err.println("Unrecognized command: " + line);
}
}
Переменная экземпляра state
, вероятно, будет перечислением.Вы можете видеть, что использование этой модели даст вам довольно простую расширяемость.Например, команда может перевести вас в другое состояние для обработки определенных подкоманд.