Чат (8)

  • 28
  • Недоступна
Класс Handler должен реализовывать протокол общения с клиентом. Выделим из протокола отдельные этапы и реализуем их с помощью отдельных методов: Этап первый – это этап рукопожатия (знакомства сервера с клиентом). Реализуем его с помощью приватного метода String serverHandshake(Connection connection)
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (139)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Сабир34 уровень
понедельник, 05:03
8 попыток из-за того, что я почему-то ждал тип MessageType.NAME_ACCEPTED, и даже не заметил это. Зато переписал всё на 5 раз🤣🤣🤣
Тот кто в танке28 уровень, Ярославль
3 июля, 21:32
Может поможет кому - пока не завел получаемое по запросу сообщение в отдельную переменную и каждый раз вызывал метод receive - валидатор слал меня в пешее эротическое.
Алексей32 уровень, Санкт-Петербург
30 июня, 15:20
26 попыток!!! а все тупо из-за проверки имени на налл А валик говорил, про пятый пункт а с ним все ок было PEACE IS DEATH вроде не курю, а захотелось
Sergey Smirnov31 уровень, Alicante
12 июня, 10:11
Почему-то с рекурсией не проходило по последнему пункту, через do-while прошло.
Фёкла31 уровень, Москва
27 июля, 08:04
У меня тоже не проходило с рекурсией, пока не поправила, чтобы было так:
if ( все условия соблюдены ) {
	//логика
	return name;
}
else return serverHandshake(connection);
Артём Уколов29 уровень, Москва
10 июня, 16:13
Message userMessage = connection.receive(); // получаем сообщение от пользователя // делаем 3 проверки: ( userMessage.getType().equals(MessageType.USER_NAME) && !userMessage.getData().equals("") && !connectionMap.containsKey(userMessage.getData()) )
Anton31 уровень, Санкт-Петербург
7 июня, 11:23
долго не мог понять как/кому/какое сообщение отправить. заглянул в комменты. после маленькой подсказки "new Message" всё пошло!
Денис36 уровень, Москва
2 июня, 19:21
.putIfAbcent(message.getData(), connection);
не пропускает. 🤦‍♂️
Маргарита38 уровень, Москва
2 мая, 20:09
спасибо за подсказку с порядком. Долго билась, не понимая где ошибка. Оказывается опять с заданием намудрили.
NIK31 уровень, Москва
20 апреля, 18:48
Рекурсией очень изящно выходит. Главное такой порядок проверки (Каждое условие вложено в предыдущее): 1) Проверка на тип 2) Проверка на "пустоту" содержимого сообщения 3) Проверка на существование такого имени в мапе Дальше всё по условию, только не забывайте, после того, как положиле в мапу, отправить new Message(MessageType.NAME_ACCEPTED) По дефолту возвращаем эту же функцию с этим же подключением
Евгений40 уровень, Нижний Новгород
21 апреля, 20:06
Не знаю, почему у меня такая нелюбовь к рекурсии... Работать с ней умею, но не хочется, как-то противоестественно для меня)) Но вообще, я на самом деле поспорил бы тут с рекурсией. Я использовал вместо неё блок while, и у меня всего лишь на пару строчек кода больше, чем если бы я делал это рекурсией, которая может к тому же запутать (по-крайней мере меня она запутает быстрее, чем while). Но вообще инструмент неплохой.
Ruslan Grigoriev34 уровень, Ростов-на-Дону
6 апреля, 16:35
пустое имя прошло вот так
if (!message.getData().equals(""))
Евгений40 уровень, Нижний Новгород
21 апреля, 20:07
А вы отдельно прописывали? Я вот такого монстра соорудил, он прошёл:
(message.getType() == MessageType.USER_NAME && !message.getData().isEmpty() && !connectionMap.containsKey(message.getData()))
Я только так понял, что порядок тут обязательно соблюдать как в условии.
Kex38 уровень, Тольятти
25 мая, 16:33
Евгений красава, с твоей помощью свой код подрезал) Зачем то начал по отдельности проверять, но это ладно вместо проверки на пустоту проверял на null ((
Anton31 уровень, Санкт-Петербург
7 июня, 11:21
я тоже сделал водопад if'ов, но потом собрал их в один.