Чат (8)

  • 14
  • Недоступна
Класс Handler должен реализовывать протокол общения с клиентом. Выделим из протокола отдельные этапы и реализуем их с помощью отдельных методов: Этап первый – это этап рукопожатия (знакомства сервера с клиентом). Реализуем его с помощью приватного метода String serverHandshake(Connection connection)
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (94)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Antony.Glim29 уровень, Санкт-Петербург
3 апреля, 10:05
Валидатор принял проверки в разных ветках в такой последовательности: имя, тип, наличие в массиве. Не забудьте, что имя не может быть пустым)))) + 5 попыток на пустое имя
Александр Снопков29 уровень, Красноярск
26 марта, 04:14
Не смотрите на 3-й пункт валидатора, пока не выполните все остальные
Вадим31 уровень, Новосибирск
24 марта, 19:31
if (message.getType() == MessageType.USER_NAME &&
!message.getData().isEmpty() &&
!connectionMap.containsKey(userName))
Валик принял только в этой последовательности, в цикле while (true), с созданием объекта Message и обращением к типу и данным через него. Очень плохой Валик!
Юрий Рощенко34 уровень, Polska
11 марта, 21:02
do {... } while () зачем тут рекурсия...
Artur41 уровень
17 февраля, 11:40
Сделал с помощью рекурсии, хотя в комментах уже видел, что рекурсия не всегда уместна. Если кому интересен алгоритм: 1. Отправить клиенту запрос имени(в метод send connection'a передать новый объект класса message с типом MessageType.NAME_REQUEST) 2. С помощью метода recieve соединения получаем сообщение от пользователя(объект класса Message). 3. Далее наш рекурсивный случай: если тип в пришедшем сообщении не USER_NAME или наше имя пустое: getData().isEmpty()(с проверкой на null не проходит, так и не понял почему) или наша мапа соединений содержит уже такой ключ, то return и новый вызов serverHandshake(connection). 4. После блока if кладём в мапу наше имя и соединение 5. Отправляем клиенту сообщение что name_accpted(по аналогии с 1 пунктом) 6. Возвращаем имя клиента.
Джонни35 уровень
9 января, 02:52
Делаю задачу, разбираюсь, просидел часа 2 пока понял что куда передаётся и что откуда берётся, перепроверил, облагородил, подчистил, всё, думаю, 100% с 1-й попытки сдать должен. Это самое чувство, когда ты уверен, что всё сделал правильно и с замиранием сердца ждёшь результат. Барабанная дробь.... ТА-ДАААА! Ничего не понимаю... КАК ТАК!? По ВСЕМ пунктам!??? И тут понимаю, что создал метод я в классе Server.... Вздохнул, успокоился, передвинул в класс Handler Та-дааа! То же самое! "ДА ЧТО ТАКОЕ!?", подумал я. И тут до меня доходит, что я вставил код снова в класс Server, но только ниже класса Handler. Посмотрел на часы.....и написал комментарий :) Всё-таки, сдал, когда в класс попал xD Высыпайтесь, Дамы и Господа!
Эльвира30 уровень, Санкт-Петербург
28 декабря 2018, 10:16
Порядок важен: if(mes.getType() == MessageType.USER_NAME && !str.isEmpty() && !connectionMap.containsKey(str)) Не проходило по этой причине!
Николай Малинчик41 уровень, Санкт-Петербург
7 февраля, 15:14
вот это спасибо!
25 декабря 2018, 14:12
10 попыток. Валли меня замучал.
Владик Жучков36 уровень, Харьков
9 декабря 2018, 11:43
Эта часть сложная, изменили бы условие или добавили бы подсказки, немного непонятно... пришлось смотреть коды у других...
Алексей37 уровень, Москва
20 ноября 2018, 13:08
Вот эта часть очень понравилась. Прям удовольствие после решения получил)))