Зачем отдельный процесс#
В онлайн-моде Python обслуживает сессию, транспорт и реестры. Игра общается с ним через небольшой C++ Lua-модуль и Windows named pipe. Внешняя сеть не должна блокировать UI-поток игры.
Lua UI ↔ C++ bridge ↔ local named pipe ↔ service
↕
remote sessionДля обычного XML-мода такой мост не нужен. Используйте его, когда действительно требуется внешний сервис.
Ограничения канала#
Размер сообщений, буфера и число незавершённых передач должны быть конечными. Отказ очереди нельзя превращать в подтверждение доставки. Большой снимок передаётся частями с идентификатором и проверкой полноты.
Собранные байты, применённое состояние и проверенный игровой эффект — три разных результата.
Жизненный цикл#
При смене Lua-контекста старые callbacks не получают право использовать новое соединение. В мосте проекта есть поколение владельца; выгрузка освобождает pipe handle, чтобы следующий контекст мог подключиться заново.
Проверьте не только первый запуск, но и загрузку мира, повторное подключение и остановку сервиса во время запроса. Удержанный старый дескриптор может создавать ошибки, которых нет в первом успешном запуске.
Диагностируйте границы отдельно#
Проверка протокола в Python не подтверждает применение MD. Проверка Lua-адаптера не доказывает правильность DLL. Для каждого участка нужны собственный вход, наблюдаемый выход и понятная ошибка.