با توجه به نوع خاصی که بازی امسال هنگام اجرا توسط سرور دارد، برای راحتی کامپایل کدها به فایل باینری و اجرای آنها توسط سرور در یک محیط ایزوله و مشابه محیط سیستم داوری مسابقه، یک ایمیج داکر آماده کردهایم تا به کمک آن و تنها با چند دستور سادهی داکر، هم کامپایل کدهای خود را انجام دهید، هم سرور را در یک محیط ایزوله و لینوکسی اجرا کنید و خروجی آن را بگیرید.
قبل از شروع نیاز است که داکر روی سیستم شما نصب باشد، با مراجعه به این لینک میتوانید آن را نصب کنید.
بعد از نصب داکر ابتدا باید ایمیج داکری که قابلیتهای بالا را داراست، از سرور رجیستری ما pull کنید که با زدن دستور زیر، به راحتی این کار انجام میشود:
docker pull reg.aichallenge.ir/aic-server:latest
توجه: ممکن است اولین بار که این ایمیج را دریافت میکنید، کمی زمان ببرد، اما در آپدیتهای بعدی سرور که این ایمیج نیز آپدیت میشود و نیاز است که شما دوباره آن را pull کنید، اجرای این دستور، زمان بسیار کمتری خواهد گرفت.
بعد از گرفتن خروجی jar به کمک IntelliJ یا هر ابزار کمکی دیگر از کد جاوایتان، ابتدا این فایل jar را در هر فولدری که دوست دارید، قرار دهید، سپس دستور زیر را در همان فولدری که فایل jar قرار دارد، بزنید:
docker run --name aics -it --rm --mount type=bind,source="$(pwd)",target=/home/code reg.aichallenge.ir/aic-server:latest compile -l jar -e jarfilename.jar -o java-binary
اکنون فایلی با اسم java-binary در کنار فایل jarشما قرار خواهد گرفت. این فایل آمادهی اجرا توسط سرور میباشد.
**توجه: در مورد کلاینت جاوا (و نه دیگر کلاینتها)، سرور میتواند فایل jar را نیز اجرا کند و اجباری برای باینری کردن فایل jar وجود ندارد، اما این کار باعث افزایش بازدهی و سرعت اجرای کد خواهد شد، همچنین این کاریست که سمت سیستم داوری نیز انجام خواهد شد. **
وارد فولدر کلاینت پایتون خود شوید یعنی جایی که فایل Controller.py قرار دارد. سپس دستور زیر را بزنید:
docker run --name aics -it --rm --mount type=bind,source="$(pwd)",target=/home/code reg.aichallenge.ir/aic-server:latest compile -l python -e Controller.py -o python-binary
اکنون فایلی با اسم python-binary در کنار سایر فایلهای شما قرار خواهد گرفت. این فایل آمادهی اجرا توسط سرور میباشد.
وارد فولدر کلاینت سیپلاسپلاس خود شوید و دستور زیر را بزنید:
docker run --name aics -it --rm --mount type=bind,source="$(pwd)",target=/home/code reg.aichallenge.ir/aic-server:latest compile -l cpp -o cpp-binary
اکنون فایلی با اسم cpp-binary در کنار سایر فایلهای شما قرار خواهد گرفت. این فایل آمادهی اجرا توسط سرور میباشد.
همچنین با زدن دستور زیر میتوانید اطلاعات کمکی بیشتری از دستور compile بدست آوردید:
docker run --name aics -it --rm --mount type=bind,source="$(pwd)",target=/home/code reg.aichallenge.ir/aic-server:latest compile --help
توجه: اگر کاربر ویندوز هستید، دستورات بالا را میتوانید در PowerShell بزنید با این تفاوت که به جای (pwd)$ از {PWD}$ استفاده کنید.
**همچنین اگر کامپایل با خطا رو به رو شد، میتوانید لاگ مربوط به کامپایل را در فایل compile.log ببینید. **
بعد از تولید فایلهای باینری، ابتدا یک فولدر بسازید و فایل map.config، و فایلهای باینریتان را درون این فولدر قرار دهید. وارد این فولدر شوید.
توجه کنید که ساختار فولدر قبل از اجرای دستور به صورت زیر است (با فرض جاوا بودن کلاینت انتخابی شما):
.
├── java-binary
├── map.json
└── map.config
حال به عنوان مثال، دستور زیر یک بازی بین ۲ کلاینت باینری شدهی جاوا اجرا میکند و پس از اتمام بازی نیز، فایل log.json را در همین فولدر قرار میدهد.
docker run --name aic21 -it --rm --mount type=bind,source="$(pwd)",target=/home/code reg.aichallenge.ir/aic-server:latest server --first-team=./java-binary --second-team=./java-binary
و بعد از اجرای کامل بازی به صورت زیر خواهد بود:
.
├── java-binary
├── Log
│ └── server
│ └── server.log
├── log.json
├── map.json
└── map.config
حال شما میتوانید از فایلهای لاگ تولید شده استفاده کنید.