Пример того, как можно удобно отлаживать данные, приходящие от клиента

Gaikotsu

яжпрограммист
Легенда
Часть системы
Знаток Lineage2
Орден Почета
Суровый спец
Наставник
Мыслитель
Арбитр
Авторитет форума
Оратор
Уважаемый собеседник
Легенда Истоков
Победитель в номинации 2024
Победитель в номинации 2023
Победитель в номинации 2022
Победитель в номинации 2021
Участник Новогоднего Фонда 2021
Эксперт
Знаток
Просветитель
Опора сообщества
Хранитель Пера
Куратор Данных
Медаль Благодарности
Старожил II степени
Старожил I степени
Победитель в номинации 2020
Победитель в номинации 2019
Клиент разработчик
Преподаватель
За веру и верность форуму
Победитель в номинации 2018
Медаль за активность на Форуме
За заслуги перед форумом
Web разработчик
Разработчик
За знание датапака
За знание ядра
Сообщения
2 172
Розыгрыши
0
Решения
38
Репутация
6 401
Реакции
3 364
Баллы
2 363
Хроники
  1. Prelude
  2. Harbingers of War
  3. Age of Splendor
  4. Rise of Darkness
  5. Scions of Destiny
  6. Oath of Blood
  7. Interlude
  8. The 1st Throne: The Kamael
  9. The 1st Throne: Hellbound
  10. The 2nd Throne: Gracia
  11. The 2nd Throne: Freya
  12. Chaotic Throne: High Five
  13. Goddess of Destruction Awakening
  14. Goddess of Destruction Harmony
  15. Goddess of Destruction Tauti
  16. Goddess of Destruction Glory Days
  17. Goddess of Destruction Lindvior
  18. Valliance / Epeisodion / Raiders
  19. Ertheia / Dimensional Strangers
  20. Infinite Odyssey
  21. Helios
  22. Grand Cursade
  23. Salvation
  24. Fafurion
  25. Shadow of the Kamael
Исходники
Отсутствуют
Сборка
нет
Бывают случаи, когда надо к примеру посмотреть, какие данные пришли от клиента в каком-то определенном пакете. Что обычно тогда делают?
Да, обычно просто втыкают в пакет вывод к примеру в консоль нужных считанных данных через System.out.println или log.info.
Зачастую это бывает не очень удобно, когда к примеру в пакете много полей и/или еще и часть шлется в цикле - в итоге приходится писать много временного кода.

Я же для своего удобства сделал вот такие вот простейшие методы:

Как оное работает? Легко и просто.
Достаточно в начало readImpl в нужного пакета, добавить до считывания данных из буфера основным кодом метода вызов метода dumpBufferData, передав ему в качестве параметров буфер с данными приходящими в пакет и указав строкой формат данных в этом буфере и при приходе этого пакета серверу мы получим в консоли пришедшие данные в читабельном виде.

В качестве строки формата передается структура пакета с указанием какого типа данные считать по очереди из буфера. Поддерживаемые типы:
  • c - byte;
  • h - short;
  • d - integer;
  • q - long;
  • f - double;
  • b - byte array;
  • s - string.
Так же можно указать что часть данных отправляется в виде цикла, количество элементов которого передается как раз перед этим циклом.

Для примера возьмем пакет RequestBuyItem, в котром передаются в начале dd и потом в цикле dq. Чтобы показать пришедшие в него данные, достаточно в начало readImpl добавить такую строчку:
Java:
dumpBufferData(getButeBuffer(), "dd(dq)");

Сам код метода вроде достаточно примитивный и должен работать на любой сборке. Ну может чуть-чуть где и придется что поправить.
Так же метод может пригодиться в ситуации когда точная структура пакета неизвестна и считываемые поля подбираются методом тыка - в этом случае тоже удобно быстро меняя формат получаемых данных для метода добиваться в итоге вменяемых отображаемых данных.
 
Последнее редактирование:
какой то неправильный метод

нужно принтов, да побольше, что бы потом искать по всем классам где ты этого напихал, а потом ещё когда заказчику отдаёшь - что бы дебаги полезли всюду, ммм, вкусно
 
было бы интереснее без формата определять структуру пакета
 
Кто-то не слышал про брейкпоинты?
 
Кто-то не слышал про брейкпоинты?
Он же в посте пишет про читаемый дамп пакета. Поставишь точку останова и с помощью подобного метода посмотришь, что в пакете пришло. Одно другому не мешает
 
Назад
Сверху Снизу