Образец протокола AiControl
Этот запускаемый пример демонстрирует независимый от проекта контракт транспорта и жизненного цикла AiControl. Это намеренно не игра, и FOnline в него не встроен: сервер заменяет клиентский цикл проекта, чтобы поведение протокола можно было проверять без заимствования игровых схем Last Frontier или TLA.
Пример доказывает:
- фрейминг запросов и ответов в виде UTF-8 JSON с разделением переводами строк;
- авторизацию каждой связи отдельным общим токеном;
- конверты
ping,status,observe,eventsиact; - ограниченные очереди команд и событий;
- sequence id принятых команд и последующие события
command_completed; - принадлежащие проекту наблюдения и имена действий.
Запустите полный smoke из корня Engine:
python Examples\AiControlSample\run_protocol_smoke.py
Для ручной проверки моста поместите токен в переменную окружения и запустите
пример. При использовании --port 0 строка готовности сообщает выбранный порт:
$env:FONLINE_AI_TOKEN = 'local-development-token'
python Examples\AiControlSample\ai_control_sample.py --port 43011
python BuildTools\ai_control_client.py --port 43011 status
python BuildTools\ai_control_client.py --port 43011 act --type move --x 7 --y 9
python BuildTools\ai_control_client.py --port 43011 events
python BuildTools\ai_control_client.py --port 43011 observe
По умолчанию CLI читает токен из FONLINE_AI_TOKEN и никогда не принимает его
как аргумент командной строки. Обе программы отклоняют адреса вне loopback,
если оператор явно не разрешил их; пример дополнительно требует непустой токен.
Транспорт не использует TLS, поэтому loopback остаётся рекомендуемой границей.
Перед адаптацией примера прочитайте AiControlProtocol.md. Реальный встраивающий проект обязан заменить обработчик наблюдений и действий примера, сохранить обычную серверную авторитетность, исключить listener из shipping-клиентов на этапе компиляции и отдельно проверить получившуюся нативную/скриптовую интеграцию.