Рейтинг темы:
  • 1 Голос(ов) - 1 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
"буферные" поля в пакетных класах
#1
зачем в
CharInfo.java
сделано копирование всей инфы в поля класа CharInfo? (зачем эти "буферные поля"?)
C# разработчики ваще лютая армия. Сейчас допишу коммент и пойду писать на C# для iOS
Ответ
#2
потому что сформированный пакет попадает в очередь на отправку.

и между моментом формирования пакет и реальной отправкой проходит какое то время.

за это время может многое поменяться в "игре" других классах откуда эти данные берутся.
Ответ
#3
Мне тоже смысл непонятен, хотя смотрю со стороны (никогда не занимался правкой кода L2J, только изучал).
Пакет сформировали (создали буфер, записали в него поля в нужном порядке), отправить можно когда угодно. Зачем что-то куда-то копировать?
hLaPEx, Evermore, hAuthD, L2on, ...
Ответ
#4
Hint Написал:А почему нельзя сразу пакет сформировать и отложить?

он как раз сразу формируется и "откладывается" в очередь на отправку Big Grin
Ответ
#5
MHard Написал:он как раз сразу формируется и "откладывается" в очередь на отправку Big Grin

А зачем поля копировать? Для удобства, чтобы код чище получался? Сначала сбор конкретных полей из данных (различные условия, преобразования и т. д.), а потом их запись.

Код:
_mAtkSpd = player.getMAtkSpd();
_pAtkSpd = player.getPAtkSpd();
hLaPEx, Evermore, hAuthD, L2on, ...
Ответ
#6
Hint Написал:А зачем поля копировать? Для удобства, чтобы код чище получался? Сначала сбор конкретных полей из данных (различные условия, преобразования и т. д.), а потом их запись.

Код:
_mAtkSpd = player.getMAtkSpd();
_pAtkSpd = player.getPAtkSpd();
нет. я уже ответил во 2-м посте на этот вопрос.

данные в момент формирования и отправки пакета в других классах могут поменяться.

почитайте про многопоточные приложения и о том как работает Nio в java думаю многое проясниться.
Ответ
#7
MHard Написал:нет. я уже ответил во 2-м посте на этот вопрос.

данные в момент формирования и отправки пакета в других классах могут поменяться.

почитайте про многопоточные приложения и о том как работает Nio в java думаю многое проясниться.

В процессе выполнения метода "public CharInfo(Creature cha)" данные не меняются. Кто мешает здесь же полностью составить пакет и отложить его до момента отправки? А не копировать поля, а потом уже формировать из них пакет во writeImpl.
hLaPEx, Evermore, hAuthD, L2on, ...
Ответ
#8
так в методе public CharInfo(Creature cha) (этот метод называется конструктором класса)
как раз и происходит формирование данных пакета.
нам же надо гдето хранить эти данные?
вот мы и сохраняем их в переменные экземпляра класса.

а потом дергается метод writeImpl который ложит данные из этого пакета в сетевой буфер.

а уже потом в отдельном потоке, "сетевой менеджер" назовем его так, при появлении данных в "сетевом буфере" отправляет данные клиенту.
Ответ
#9
Аналогия:
Синхронизация аудио и видео дорожки.

Смотреть видео с отстающим звуком как-то не ахти
Ответ
#10
Hint Написал:В процессе выполнения метода "public CharInfo(Creature cha)" данные не меняются. Кто мешает здесь же полностью составить пакет и отложить его до момента отправки? А не копировать поля, а потом уже формировать из них пакет во writeImpl.

по той причине, что когда пишется конструктор - он не сует даные в Буфер.


А вот когда вызывается writeImpl, статы у чара могут изменится.

Это очень сильно важно для XYZ при движении, которые задержка в 100 мс, уже вылазит
consulo.io - Consulo - multi-language IDE
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)