Что у onReceivePacket под капотом?

Tema05

Известный
Автор темы
1,518
481
В луа скриптах на мунлоадере есть встроенное событие onReceivePacket. Хз это moonloader, sampfuncs или вообще cleo опкод. Оно работает на 100% стабильно. Его можно нопнуть, т.е. пока не обработается событие в скрипте оно дальше не идёт, следовательно оно выполняется синхронно с какой-то функцией в игре, написанной на плюсах. При этом хук срабатывает в том же потоке, что и остальной луа скрипт. Параллельно коду внутри хука ничего другого не выполнится. Только до или после. У меня возник вопрос а как оно так сделано?

Мы на луа не можем реализовать нормально хуки из-за отсутствия потокобезопасности. Все эти отключения jit компиляции и т.п. костыли, не панацея как пишут сами авторы функций для хуков. В условиях больших скриптов в кучей иного функционала оно начинает конфликтовать с воздухом и крашить скрипт из-за ошибки потоков. Вывод - писать хуки на плюсах, там всё заебись стабильно и нет таких проблем. Оно то да, но а если я хочу обработчики этих хуков в луа? Кто-нибудь пробывал такое сделать? Я хочу такую же стабильную реализацию как событие onReceivePacket.

У меня есть предположение, что получение пакетов привязано к глобальному циклу игры как и lua скрипты. Т.е. пакет может прийти на обработку только в определённое обновление игры (кадр), а не когда он по факту дошёл по интернету. И так как поток lua по сути также привязан к обновлениям (кадрам) то они работают синхронно в 1 потоке и проблем с событием не возникает. Это верно?

Возможно ли реализовать хук на плюсах, с на 100% стабильным обработчиком в lua, который будет хукать, что-то вне основного потока игры? Например какую-то ни будь асинхронную функцию в asi плагине или просто что-то, что работает в другом потоке? Использовать мьютекты для вызова обработчика в луа? Может писать реализацию с использование lua C API? Можно ли как-то добиться синхронной работы хука с lua скриптом, чтобы обработчик не был отдельным потоком привязанным к функции на плюсах, при этом в lua обработчик мог влиять на параметры, возвращаемое значение?
 

whyega52

Eblang головного мозга
Модератор
2,872
2,853
Возможно ли реализовать хук на плюсах, с на 100% стабильным обработчиком в lua, который будет хукать, что-то вне основного потока игры?
Как вариант, использовать очередь задач, которая бы в хуке добавляла параметры и сам каллбек в виде объекта в очередь (потокобезопасную) и уже обрабатывалась в основном потоке, в том, в котором и луа