Зачем отдельный процесс#

В онлайн-моде Python обслуживает сессию, транспорт и реестры. Игра общается с ним через небольшой C++ Lua-модуль и Windows named pipe. Внешняя сеть не должна блокировать UI-поток игры.

TEXT
Lua UI ↔ C++ bridge ↔ local named pipe ↔ service
                                            ↕
                                      remote session

Для обычного XML-мода такой мост не нужен. Используйте его, когда действительно требуется внешний сервис.

Ограничения канала#

Размер сообщений, буфера и число незавершённых передач должны быть конечными. Отказ очереди нельзя превращать в подтверждение доставки. Большой снимок передаётся частями с идентификатором и проверкой полноты.

Собранные байты, применённое состояние и проверенный игровой эффект — три разных результата.

Жизненный цикл#

При смене Lua-контекста старые callbacks не получают право использовать новое соединение. В мосте проекта есть поколение владельца; выгрузка освобождает pipe handle, чтобы следующий контекст мог подключиться заново.

Проверьте не только первый запуск, но и загрузку мира, повторное подключение и остановку сервиса во время запроса. Удержанный старый дескриптор может создавать ошибки, которых нет в первом успешном запуске.

Диагностируйте границы отдельно#

Проверка протокола в Python не подтверждает применение MD. Проверка Lua-адаптера не доказывает правильность DLL. Для каждого участка нужны собственный вход, наблюдаемый выход и понятная ошибка.