Перейти к содержимому

Фото

Давайте сделаем дистрибутив XFW.


  • Чтобы отвечать, сперва войдите на форум
18 ответов в теме

#1 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 07 Февраль 2017 - 20:03

Пытаясь запустить тестовый мод https://bitbucket.or...xfw.hello_world, обнаружил, что в природе не существует отдельного дистрибутива XFW, то есть, чтобы его можно было копировать в папку клиента res_mods. Репо XFW  прекрасно компилится, но файлы на выходе не расфасовываются по нужным директориям согласно структуре каталогов XVM Framework.

 

Оно и не беда, потому как в сборке XVM, для которого XFW является суб-репо, билд-скрипты настроены копировать что надо куда надо. Однако для писания XFW - based модов, отвязанных от XVM, неудобно. Потому что как деплоить такие моды? Ставить весь XVM можно, конечно, но как-то неопрятно.

 

То есть нужно копаться в билд-скриптах.

 

Непроизвольно хочется навести порядок в развёртывании XFW. Хотелость бы, чтобы по результатам билда XFW -- без всякого XVM-а --  файлы бы уже раскладывались по правильным подпапкам директории res_mods. Чтобы можно было сразу копировать в клиент и сверху добавлять пакеты собственно модов. 

 

А  билд-скрипты XVM тупо копировали бы что надо из уже разложенных  файлов. Да там ровно одного копирования будет достаточно, директорием.

 

С точки зрения собственно XVM это лишняя ступень копирования. Однако она прояснила бы логику деплоймента XFW и полностью отвязало бы развёртывание XVM от развёртывания XFW. Потому что сейчас они смешаны в одну кучу, что не есть гут.

 

Оно бы облегчило создание модов на основе XFW, а также тестирование собственно XFW. Да и ясность в деплойменте XVM-а добавит.

 

Если отцы-командиры дадут добро (и подскажут иные подводные камни), занялся бы доработкой XFW (и неизбежно XVM ) в этом направлении. Всё равно ведь буду разбираться.


Изменено: John_Nash, 09 Февраль 2017 - 18:07

  • 2

#2 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 677 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 07 Февраль 2017 - 20:07

Давай попробуем, посмотрим, что будет получаться.


  • 0

#3 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 08 Февраль 2017 - 08:50

ОК, новые грабли :)

 

Для начала покопался в билд-скриптах в части копирования файлов, относящихся к XFW -- что, куда и почему.

 

"Файлы, относящиеся к XFW" -- это

1. Точки входа -- всё, что копируется в папку %WOT_CLIENT_DIR%/res_mods/%WOT_VERSION%/

2. Всё, что копируется в папку  %WOT_CLIENT_DIR%/res_mods/mods/xfw/

    В релизе в этой директории 4 папки:

  1. actionscript
  2. native
  3. python
  4. resources (пустая -- сбивает с толку, можно её выкинуть?)

Естественно ожидать что все эти файлы компилятся в проекте XFW, а XVM сам вытягивает из проекта XFW что надо и кладёт куда надо.

В большой степени оно так и есть. В скрипте XVMBUILD_ROOT_PATH\build.sh , в функции build_xfw()

 

Точка входа для AS3 скриптов:

cp -rf src/xfw/~output/swf_wg/*.swf ~output/~ver/gui/flash/

Содержимое res_mods/mods/xfw/python/ :

cp -rf src/xfw/~output/python/mods/* ~output/mods/

Точка входа для питон-скриптов:

cp -rf src/xfw/~output/python/scripts/* ~output/~ver/scripts/

Содержимое res_mods/mods/xfw/actionscript/ :

cp -rf src/xfw/~output/swf/*.swf ~output/mods/xfw/actionscript/

Всё это очень логично и прекрасно, однако остаётся загадкой происхождение папки res_mods/mods/xfw/native.

Она собирается явно не в проекте XFW. Однако лежит в (пусть условном) дистрибе XFW. Что несколько смущает.

 

Откуда берётся папка native найти нетрудно: в суб-репо xvm\src\xvm-native в скрипте build.sh есть замечательная функция copy()

copy()
{
    mkdir -p "$currentdir/../../~output/mods/packages/"
    cp -rf "$currentdir/release/packages/" "$currentdir/../../~output/mods/" 
   
    mkdir -p "$currentdir/../../~output/mods/xfw/"
    cp -rf "$currentdir/release/xfw/" "$currentdir/../../~output/mods/"
    
    cp -rf "$currentdir/libpython/release/libpython/bin/python27.dll" "$currentdir/../../~output/mods/xfw/native/python27.dll"    

    mkdir -p "$currentdir/../../~output/mods/xfw/native/lib"
    cp -rf "$currentdir/libpython/release/modules/bin/_ctypes.pyd" "$currentdir/../../~output/mods/xfw/native/lib/_ctypes.pyd"
}

То есть этот скрипт, на минуточку, из проекта xvm-native, лезет в корень проекта XVM и кладёт свои файлы в условный дистрибутив XFW -- третьего проекта.

 

Тут возникают вопросы и формальные и содержательные.

 

Формальные попроще: чтобы скрипты из суб-проекта (XVM-native) не лазили в проекты верхнего уровня (XVM). Это сделать нетрудно, перетащить копирование в скрипты XVM и всё. Но не будем спешить.

 

Вопрос содержательный поинтереснее: как так вышло, что часть файлов XFW компилится в отдельном проекте и подкладывается в дистрибутив руками. И, главное, что с этим можно сделать. Да и нужно ли?

 

Поймите меня правильно: всё это писалось постепенно, проделана огромная работа,  на всё были резоны. Не дошли руки разобраться. Работает -- и норм. Но свежему человеку... сложновато.

 

Пока что понятно, что у XFW  есть native часть, которая вставляется в него извне. ОК.  За что эта часть отвечает? Насколько от неё зависят другие части XFW? Первое впечатление -- это вообще основа основ. Как тогда без неё компилятся остальные части XFW?

 

В общем, плиз хелп. Объясните нубу.


  • 0

#4 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 677 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 08 Февраль 2017 - 08:59

Тут Миша может подсказать.


  • 0

#5 tricsi

tricsi
  • Premium Member
  • 2 695 сообщений
  • Nick:tricsi
  • WoT Server:RU (Русский), NA (American), EU (European)
  • Город: Санкт-Петербург

Опубликовано 08 Февраль 2017 - 10:12

... чтобы его можно было копировать в папку клиента res_mods.

а если её не будет ?

 

Меня зовут Антон, я работаю в WG и занимаюсь модами и смежными штуками.

В следующей версии танков мы реализовали новую фичу для облегчения инсталяции/деинсталяции модов - пэкеджи пакеты модов.

 

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

В будущем в силу ряда причин мы бы хотели отойти от способа установки модов через res_mods/;

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

https://koreanrandom...-пэкеджи-модов/


  • 0

#6 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 08 Февраль 2017 - 13:06

а если её не будет ?

Хороший вопрос. Подозреваю, что задаваемые мной вопросы и встанут в полный рост. А картошка подбавит и новых.

 

Потому что ВГ предлагают страшно сырую штуку, по крайней мере, в заглавной записи про пакеты проблема зависимостей вообще не упоминается. А она ключевая.Тот же XVM -- огромная система, зависимостей масса, причём как по коду, так и по компилированию и копированию файлов. Первое, и второе, и третье -- разные вещи.


 

 

Тут Миша может подсказать.

Вообще, почему я все эти вопросы задаю? Захотелось написать мод

1. используя XFW

2. чтобы его можно было устанавливать без установки всего XVM, а с минимальным набором -- видимо, этот минимальный набор и есть XFW (не факт)

3. чтобы при обновлении набора из пункта 2 обновлять отдельно стоящий мод было по возможности легче и проще.

 

Наверное, для всего этого XFW и создавался. Но пока как-то сложновато. Даже для тестового мода xfw.hello_world выделить XFW не так-то просто. Прямо сейчас я поудалял руками ненужные файлы в дистрибутиве. Но это очень-очень плохой костыль.


Изменено: John_Nash, 08 Февраль 2017 - 13:07

  • 0

#7 Mixaill

Mixaill
  •  XVM Developer
  • 633 сообщений
  • Nick:Mixailos
  • WoT Server:RU (Русский)
  • Город: Минск

Опубликовано 09 Февраль 2017 - 18:53

Вопрос содержательный поинтереснее: как так вышло, что часть файлов XFW компилится в отдельном проекте и подкладывается в дистрибутив руками. И, главное, что с этим можно сделать. Да и нужно ли?
 
Поймите меня правильно: всё это писалось постепенно, проделана огромная работа,  на всё были резоны. Не дошли руки разобраться. Работает -- и норм. Но свежему человеку... сложновато.
 
Пока что понятно, что у XFW  есть native часть, которая вставляется в него извне. ОК.  За что эта часть отвечает? Насколько от неё зависят другие части XFW? Первое впечатление -- это вообще основа основ. Как тогда без неё компилятся остальные части XFW?
 
В общем, плиз хелп. Объясните нубу.

 
Внезапно за 3 дня до выхода 9.17 выяснилось, что он не работает на XP. Пришлось быстро патчить worldoftanks.exe на ходу. Так получилось, что всё было засунуто именно XVM.
 
Native часть - это поддержка написания расширений С и фикс работоспособности на XP 
 
Определенно, это ошибочно, и часть нужно перенести в XFW.


 
Сделано

Изменено: Mixaill, 09 Февраль 2017 - 18:54

  • 0

#8 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 09 Февраль 2017 - 19:11

Внезапно за 3 дня до выхода 9.17 выяснилось, что он не работает на XP. Пришлось быстро патчить worldoftanks.exe на ходу. Так получилось, что всё было засунуто именно XVM. Native часть - это поддержка написания расширений С и фикс работоспособности на XP Определенно, это ошибочно, и часть нужно перенести в XFW.

 

Спасибо.

 

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

 

Насколько понял, в xvm-native компилятся библиотеки, часть и которых нужна для XFW, а часть -- для отдельных модов в составе XVM. Как раз фикс для XP логично отнести к XFW, так как он делается раз и навсегда для всего колхоза.

 

Вообще в XFW из xvm-native копируются всего 3 файла: python27.dll, lib\_ctypes.pyd и упомянутый фикс XVMNativeWOTFix.pyd. Было бы логично вынести их создание в отдельный проект XFW-native.

 

Тут могут быть подводные камни, потому что нативные части остальных модов должны компилироваться единообразно с   нативными частями XFW. Наверное.


Сделано

 

Упс, пока строчил простыню :)


  • 0

#9 Mixaill

Mixaill
  •  XVM Developer
  • 633 сообщений
  • Nick:Mixailos
  • WoT Server:RU (Русский)
  • Город: Минск

Опубликовано 09 Февраль 2017 - 19:13

Вроде я примерно так и сделал


 

Сейчас у нас есть 3 репозитория
* XVM
* XFW
* wot.libpython
 
Зависят они таким образом
/                             --> XVM
/src/xfw                      --> XVM Framework
/src/xfw/src/native/libpython --> Libpython
В libpython содержатся
* python27.dll
* _ctypes.pyd
В XFW содержится
* xfw_wotfix.pyd
В XVM находятся остальные модули (вибро, работа с банками, пинг, счетчик кадров)
Возможно, часть из них (все?) можно перекинуть в XFW

Изменено: Mixaill, 09 Февраль 2017 - 19:14

  • 1

#10 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 09 Февраль 2017 - 19:50

Сорри, совсем я запутался. wot.libpython -- это то же самое, что и субрепо xvm-native в Меркуриале, которое скачивается при клонировании репо XVM ?


  • 0

#11 Mixaill

Mixaill
  •  XVM Developer
  • 633 сообщений
  • Nick:Mixailos
  • WoT Server:RU (Русский)
  • Город: Минск

Опубликовано 09 Февраль 2017 - 20:05

Смотрите
 
/

/src - каталог

/src/xvm-native/ - каталог внутри репы XVM
/src/xvm-native/libpython - субрепа wot.libpython, которой не стало
/src/xvm-native/packages/xvm_wotfix/ - каталога которого не стало

/src/xfw - субрепа xfw
/src/xfw/src/native - новый каталог
/src/xfw/src/native/libpython - субрепа wot.libpython теперь здесь, внутри субрепы xfw :)
/src/xfw/src/native/xfw_wotfix - xvm_wotfix переехал сюда

  • 0

#12 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 10 Февраль 2017 - 08:19

Смотрите

 

Спасибо. Выглядит круто. Сорри, не успел склонить и потрогать руками новую структуру каталогов. Надеюсь, нынче вечером, и напишу по результатам.


  • 0

#13 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 10 Февраль 2017 - 19:22

Смотрите

Посмотрел -- вообще всё идеально. Нативные либы XFW стали субрепо XFW. Фикс для WinXP стал частью XFW. Нативная часть XVM пакетов откочевала в XVM. 

В результате XFW вообще не знает о существовании XVM, как и быть должно. Более того, нативные либы ничего не знают о вотфиксе и об остальном XFW. Но компилятся вместе, что важно.

 

Потенциальный источник багов -- что нативная часть XVM-a компилится отдельно от нативной части XFW, так что, теоретически, если конфиги билда будут разными, возможны накладки. Но это я перестраховываюсь.

 

Ну и сразу чешутся руки применить наступившее счастье на практике. Например,  взять xfw.hello_world и сделать его самодостаточным. То есть, добавить в него XFW как субрепо и написать элементарный скриптик, который будет давать на выходе самодостаточный мод. Фактически, это дистрибутив XFW плюс ровно один файл мода xfw.hello_world. Такая самодостаточная заготовка, не нужно будет бегать с файлами XFW вручную. Мечта начинающего мододела. 

 

Кроме того, xfw.hello_world станет более аккуратным --  т.к. либы swc, на которые он опираются, будут не падать с неба, а браться из результатов билда XFW. Красиво же.

 

Если дадите добро -- сделаю  пулл реквест для xfw.hello_world. 


Оффтопик. В билд скрипте верхнего уровня есть функция build_native(). Казалось бы, она должна запускать скрипт билда уровнем ниже. Но она только копирует. Это нормально?


Оффтопик. В верхней папке XFW появились два новых скрипта. Что делает xfw / _build_package.sh  понятно -- раскладывает файлы согласно мануалу. Скрипт xfw / _build_wotmod.sh тоже как-то раскладывает скомпилированное, но иначе. А зачем? Иной способ внедрения мода в клиент?


Изменено: John_Nash, 10 Февраль 2017 - 18:58

  • 0

#14 Mixaill

Mixaill
  •  XVM Developer
  • 633 сообщений
  • Nick:Mixailos
  • WoT Server:RU (Русский)
  • Город: Минск

Опубликовано 10 Февраль 2017 - 19:42

Оффтопик. В билд скрипте верхнего уровня есть функция build_native(). Казалось бы, она должна запускать скрипт билда уровнем ниже. Но она только копирует. Это нормально?

Это так и задумано.

А зачем? Иной способ внедрения мода в клиент?

Задел на будущее.
  • 0

#15 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 10 Февраль 2017 - 19:56

Это так и задумано.

Спасибо.

 

Задел на будущее.

 

ОК. Спасибо.

 

Пулл реквест для xfw.hello_world делать? 


  • 0

#16 sirmax

sirmax

    [XVM] Разработчик

  •  XVM Developer
  • 12 677 сообщений
  • Nick:sirmax2
  • WoT Server:RU (Русский)

Опубликовано 10 Февраль 2017 - 20:31

Пулл реквест для xfw.hello_world делать? 

Я в hello_world специально подключал swc, а не сабрепу. Точно не помню почему, вроде для того, чтобы не усложнять пример настройкой билда XFW.


  • 0

#17 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 11 Февраль 2017 - 03:58

Я в hello_world специально подключал swc, а не сабрепу.

ОК ясно.


  • 0

#18 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 11 Февраль 2017 - 11:01

Внезапно, оно пока не взлетает. Похоже, проблема совместимости:  XFW стало независимым уже после перехода на версию общего теста 0.9.17.1,  а тестировал я на текущем клиенте, который  0.9.17.0.3.

 

 Городить костыли для актуальной ныне версии клиента особого смысла нет. Особенно для hello_world проекта, который должен быть рабочей заготовкой.

 

Попробую с клиентом общего теста.

 

Тяжёлое наследие :)


  • 0

#19 John_Nash

John_Nash
  • Пользователь
  • 49 сообщений
  • Nick:John Nash

Опубликовано 12 Февраль 2017 - 14:05

Заработало!  Для клиента с общего теста, как и предполагал.

Выложил репо.

 

Отдельное спасибо Михаилу за сепарацию XFW.

 

Ещё раз, почему эта сепарация важна? Можно не тащить весь огромный XVM, а только относительно небольшой XFW. При этом будет поддерживаться полная совместимость с XVM. Например, все бонусы от апдейтов XFW.


  • 1





0 пользователей читают эту тему

0 зарегистрированных, 0 гостей, 0 невидимых

© Mr 13