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

Gaikotsu

яжпрограммист
Легенда
Победитель в номинации 2023
Победитель в номинации 2022
Победитель в номинации 2021
Участник Новогоднего Фонда 2021
Эксперт
Знаток
Просветитель
Магистр реакций
Знаток письма
Куратор Данных
Медаль Благодарности
Старожил II степени
Старожил I степени
Победитель в номинации 2020
Победитель в номинации 2019
Клиент разработчик
Преподаватель
За веру и верность форуму
Победитель в номинации 2018
Медаль за активность на Форуме
За заслуги перед форумом
Web разработчик
Разработчик
За знание датапака
За знание ядра
Сообщения
1 572
Розыгрыши
0
Решения
24
Репутация
6 057
Реакции
2 667
Баллы
2 188
Хроники
  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)");

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

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