Запуск и отладка сервера MegaMek Net (практикум)

Форум МegaMek Лиги СтарТерра

Модераторы: Prophet_Roshak, RBS_Vader

Re: Запуск и отладка сервера MegaMek Net (практикум)

Сообщение Andos » 05 окт 2009, 00:44

пока ничем, я просто сделал up для желающих
Аватара пользователя
Andos
Академик
 
Сообщения: 2736
Зарегистрирован: 28 апр 2008, 18:46
Благодарил (а): 618 раз.
Поблагодарили: 274 раз.
Награды: 3
Кольца вокруг гнезда (1) Великое червие - 2010 (1) Операция "Крыса" (1)

Re: Запуск и отладка сервера MegaMek Net (практикум)

Сообщение Loki » 06 окт 2009, 00:13

Кстати, мне удалось запустить сервер. Теперь нужен только чистый "клиент".
Мы - это Клан, Клан - это мы! (с)

9-th Talon Cluster
Star Commander Loki
Аватара пользователя
Loki
Читатель
 
Сообщения: 229
Зарегистрирован: 03 авг 2009, 17:22
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.

Сборка MekWars своими руками

Сообщение vitus » 19 ноя 2009, 11:07

После нескольких малоудачных опытов по старту MekWar сервера я решил собрать его самостоятельно и получить возможность отладки.
Привожу здесь свои изыскания.
Понадобится JDK и Netbeans от санов. А так же бубуен.
Нус! Начнем! Удар в бубен [бум] и немного его потрясем [т-с-с-с-с]
1. Получаем последние версии сырцов.
Я привык к IDE Netbeans и решил не отказваться от имеющихся в нем возможностей. Посему и использовал встроенные туда механизмы SVN.
Получаем сырцы MegaMek с репозитория https://megamek.svn.sourceforge.net/svnroot/megamek и формируем на их базе проект netbeans.
Получаем сырцы MekWars с репозитория https://mekwars.svn.sourceforge.net/svnroot/mekwars и формируем на их базе еще один проект netbeans.
[бум][т-с-с-с-с][т-с-с-с-с]
2. Сборка MegaMek
Для успешной сборки необходимо отметить каталог l10n как содержащий сырцы (каталог src определяется автоматически). Делается это в свойствах проекта на закладке Sources.
Добавляем необходимые для сборки jar-ы (там же на закладке Libraries). В Compile-time Libraries должны быть добавлены все jar-ы находящиеся в папке lib.
На закладке Build/Packaging отмечаем Compres JAR File и Build JAR after Compiling.
На закладке Run выбираем в качестве Main Class - megamek.MegaMek.
Собственно можно собирать проект (Clean fnd Build) и ... [бум][бум][т-с-с-с-с] ... в папке dist появится MegaMek.jar и каталог lib.
В качестве последнего штриха в build.xml я добавил еще одну цель "make-dist" которя собирает дистрибутив MegaMek.zip, но для наших целей это не обязательно, так как мы собираемся использовать этот проект в качесвте подчиненного в проекте MekWars.
На всякий пожарный привожу здесь ant скрипт этой цели.

<target name="make-dist" depends="jar">
<copydir src="data" dest="dist/data" />
<copydir src="docs" dest="dist/docs" />
<copydir src="mmconf" dest="dist/mmconf" />
<mkdir dir="dist/logs" />
<copyfile src="HACKING" dest="dist/HACKING" />
<copyfile src="license.txt" dest="dist/license.txt" />
<copyfile src="startup.sh" dest="dist/startup.sh" />
<copyfile src="MegaMek.exe" dest="dist/MegaMek.exe" />
<zip destfile="dist/MegaMek.zip" basedir="dist/" />
</target>

Продолжение следует...

Добавлено спустя 20 минут 29 секунд:
Сборка MekWars своими руками (продолжение)
2. Сборка MekWars
Переходим к проекту MekWars и делаем его главным.
Лезем в папки server-dist и client-dist и копируем все jar-ы из подпапок lib в папку lib проекта.
Добавляем все jar-ы из папки lib в Compile-time Libraries (закладка Libraries в свойствах проекта).
Там же жмем Add Project и добавляем проект MegaMek и главный jar из него (dist/MegaMek.jar) в Compile-time Libraries.
На закладке Build/Packaging отмечаем Compres JAR File и Build JAR after Compiling.
Закладку Run можно пока не трогать.
В принципе можно уже собирать проект, но это не будет Cool, так как нам нужно получить не один, а два дистрибутива (для сервера и клиента соответственно).
Вот тут то и понадобится бубен. Итак!!! [бум][бум][т-с-с-с-с][бум][бум]
В build.xml переопределяем цель "-post-jar", которя выполняется автоматически сразу после окончания процедуры сборки проекта.

<target depends="init" name="-post-jar">
<property name="dist.MegaMek.jar" value="${dist.dir}/MegaMek.jar"/>
<property name="serverdist" value="${basedir}/server-dist"/>
<property name="clientdist" value="${basedir}/client-dist"/>
<property name="dedfile" value="${dist.dir}/MekWarsDed.jar"/>
<property name="adminfile" value="${dist.dir}/MekWarsAdmin.jar"/>
<property name="trackerfile" value="${dist.dir}/MekWarsTracker.jar"/>
<property name="opeditor" value="${dist.dir}/MekWarsOpEditor.jar"/>
<property name="autoupdater" value="${dist.dir}/MekWarsAutoUpdate.jar"/>
<property name="serverfile" value="${dist.dir}/MekWarsServer.jar"/>
<property name="clientfile" value="${dist.dir}/MekWarsClient.jar"/>
<mkdir dir="${dist.dir}/logs"/>
<jar
basedir="${build.classes.dir}"
compress="true"
destfile="${adminfile}"
excludes="server/**,client/**,dedicatedhost/**"
includes="admin/**,com/**,common/**"
manifest="AdminManifest.txt"
/>
<jar
basedir="${build.classes.dir}"
compress="true"
destfile="${clientfile}"
excludes="server/**,admin/**,dedicatedhost/**"
includes="client/**,com/**,common/**"
manifest="ClientManifest.txt"
/>
<jar
basedir="${build.classes.dir}"
compress="true"
destfile="${dedfile}"
excludes="server/**,client/**,admin/**"
includes="dedicatedhost/**,common/**"
manifest="DedHostManifest.txt"
/>
<jar
basedir="${build.classes.dir}"
compress="true"
destfile="${autoupdater}"
excludes="server/**,admin/**,dedicatedhost/**"
includes="updaters/**"
manifest="MekWarsAutoUpdateManifest.txt"
/>
<jar
basedir="${build.classes.dir}"
compress="true"
destfile="${opeditor}"
excludes="server/**,admin/**,dedicatedhost/**"
includes="OperationsEditor/**,common/DefaultOperation*,common/util/SpringLayoutHelper*"
manifest="OpEditorManifest.txt"
/>
<jar
basedir="${build.classes.dir}"
compress="true"
destfile="${serverfile}"
excludes="admin/**,dedicatedhost/**"
includes="common/**,server/**,client/**"
manifest="ServerManifest.txt"
/>
<jar
basedir="${build.classes.dir}"
compress="true"
destfile="${trackerfile}"
excludes="server/**,admin/**,dedicatedhost/**"
includes="tracker/**"
manifest="TrackerManifest.txt"
/>
<property name="server.dist.dir" value="${dist.dir}/server"/>
<property name="client.dist.dir" value="${dist.dir}/client"/>
<mkdir dir="${server.dist.dir}"/>
<mkdir dir="${client.dist.dir}"/>
<copy todir="${server.dist.dir}">
<fileset file="${reference.MegaMek.jar}" />
<fileset file="${serverfile}"/>
<fileset file="${adminfile}"/>
<fileset file="${trackerfile}"/>
<fileset file="${opeditor}"/>
<fileset file="${trackerfile}"/>
<fileset dir="${serverdist}">
<exclude name="data/mechfiles/**"/>
<exclude name="MegaMek.jar"/>
</fileset>
<fileset dir="${project.MegaMek}/data"/>
<fileset dir="${project.MegaMek}/l10n"/>
<fileset dir="${project.MegaMek}/docs"/>
</copy>
<mkdir dir="${server.dist.dir}/logs"/>
<copy todir="${client.dist.dir}">
<fileset file="${reference.MegaMek.jar}" />
<fileset file="${clientfile}"/>
<fileset file="${adminfile}"/>
<fileset file="${trackerfile}"/>
<fileset file="${opeditor}"/>
<fileset file="${trackerfile}"/>
<fileset dir="${clientdist}">
<exclude name="data/mechfiles/**"/>
<exclude name="MegaMek.jar"/>
</fileset>
<fileset dir="${project.MegaMek}/data"/>
<fileset dir="${project.MegaMek}/l10n"/>
<fileset dir="${project.MegaMek}/docs"/>
</copy>
<mkdir dir="${client.dist.dir}/logs"/>
<zip destfile="${dist.dir}/MekWarsSerever.zip" basedir="${serverdist}/" />
<zip destfile="${dist.dir}/MekWarsClient.zip" basedir="${clientdist}/" />
</target>

Вот теперь можно собирать проект - (Clean fnd Build) и ... [бум][бум][т-с-с-с-с] ... в папке dist появится кучка файлов и...
два каталога server и client, а так же два дистрибутива MekWarsClient.zip и MekWarsSerever.zip.

Продолжение следует...

Добавлено спустя 27 минут 30 секунд:
Сборка MekWars своими руками (продолжение)
4. Отладка
Теперь можно заняться отладкой. Так почему же у меня лезут ошибки при подключении клиента к серверу?
[т-с-с-с-с][т-с-с-с-с][бум]
Идем в свойства проекта и в закладке Run устанавливаем Main Class - server.MWServer и рабочую директорию dist/server.
Можно запускать дебаг, но я заодно решил пересобрать проект (Clean fnd Build) и потом [т-с-с-с-с][бум][бум] (Debug).
Через какое-то время сервер готов к приему клиентских соединений.
Идем в папку dist/client и запускаем оттуда клиента.
Пишем IP сервера - 127.0.0.1 и любоем имя пользователя.
Жмем Ok - [вот он момент истины] и что мы видим - downloading-downloading-...
Лезем в папку dist/server/logs. Ага... [бум][бум][т-с-с-с-с][т-с-с-с-с] файлие error.0 полнится и ширится.
Смотрим в каком классе грабли и ставим там точку прерывания (server.dataProvider.commands.BanTargeting).
Поиграем клавишами F7 и F8. Вот оно!!! [т-с-с-с-с] Идет обращение к несуществующему файлу ./campaign/bantargeting.dat, а почему он создался автоматически, как, например, ./campaign/banammo.dat, а потому, что кода его создания нет.
Исправляем ситуацию в server/dataProvider/commands/BanTargeting.java по образу и подобию server/dataProvider/commands/BannedAmmo.java.

public void execute(Date timestamp, BinWriter out, CampaignData data)
throws Exception {
FileInputStream configFile;
try{
configFile = new FileInputStream("./campaign/bantargeting.dat");
}catch (FileNotFoundException FNFE){
FileOutputStream ban = new FileOutputStream("./campaign/bantargeting.dat");
PrintStream p = new PrintStream(ban);

//server banned ammo
p.println(System.currentTimeMillis());
p.println("server#");
ban.close();
p.close();
configFile = new FileInputStream("./campaign/bantargeting.dat");
}
BufferedReader config = new BufferedReader(new InputStreamReader(configFile));

while (config.ready()) {
out.println(config.readLine(),"BanTargeting");
}
}

Все пересборка (Clean fnd Build) и через 6 минут [бум][бум][т-с-с-с-с] получаем рабочий дистрибутив сервера, который адекватно реагируется на первый коннект клиента.

Задача решена - заключительный [БУМ].

Но продолжение следует. На очереди избавление от ошибок подгрузки описания мехов...
Аватара пользователя
vitus
Новичок
 
Сообщения: 3
Зарегистрирован: 27 окт 2009, 13:08
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Запуск и отладка сервера MegaMek Net (практикум)

Сообщение ВадБус » 19 ноя 2009, 21:56

vitus
*Звук жестяных фанфар
"...Какой камешек не подними - непременно окажется, что у него тысяча граней, и из этой-то непростоты и сложна жизнь..." М. Семенова

Изображение
Аватара пользователя
ВадБус
Продвинутый читатель
 
Сообщения: 871
Зарегистрирован: 31 июл 2009, 23:41
Откуда: Воронеж
Благодарил (а): 272 раз.
Поблагодарили: 122 раз.
Награды: 2
Кольца вокруг гнезда (1) Операция "Крыса" (1)

Пред.

Вернуться в MegaMek Лига StarTerra

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20