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

Gaikotsu

яжпрограммист
Легенда
Победитель в номинации 2023
Победитель в номинации 2022
Победитель в номинации 2021
Участник Новогоднего Фонда 2021
Эксперт
Знаток
Просветитель
Магистр реакций
Знаток письма
Куратор Данных
Медаль Благодарности
Старожил II степени
Старожил I степени
Победитель в номинации 2020
Победитель в номинации 2019
Клиент разработчик
Преподаватель
За веру и верность форуму
Победитель в номинации 2018
Медаль за активность на Форуме
За заслуги перед форумом
Web разработчик
Разработчик
За знание датапака
За знание ядра
Сообщения
1 477
Розыгрыши
0
Решения
24
Репутация
5 922
Реакции
2 473
Баллы
2 188
Хроники
  1. Prelude
  2. Chronicle 1: Harbingers of War
  3. Chronicle 2: Age of Splendor
  4. Chronicle 3: Rise of Darkness
  5. Chronicle 4: Scions of Destiny
  6. Chronicle 5: 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. The Chaotic Throne 3: Goddess of Destruction
  14. Goddess of Destruction Awakening
  15. Goddess of Destruction Harmony
  16. Goddess of Destruction Tauti
  17. Goddess of Destruction Glory Days
  18. Goddess of Destruction Lindvior
  19. Goddess of Destruction Epeisodion / Valiance
  20. Dimensional Strangers
  21. Infinite Odyssey
  22. Helios
  23. Grand Cursade
  24. Salvation
  25. Fafurion
  26. Prologue: Prelude of War
Исходники
Отсутствуют
Сборка
нет
Бывают случаи, когда надо к примеру посмотреть, какие данные пришли от клиента в каком-то определенном пакете. Что обычно тогда делают?
Да, обычно просто втыкают в пакет вывод к примеру в консоль нужных считанных данных через 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)");

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

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