GitHub: http://github.com/NiGHt-LEshiY/om_master
Что такое мастерсервер?
Мастерсервер это "главный" сервер (полный аналог minecraft.net), основная задача которого сводится к следующему:
- Регистрация и аутентификация аккаунтов (вход в игру)
- Получение файлов клиента, необходимых для игры
- Получение и отправка скинов и плащиков пользователей
- Подключение игрока к игровому серверу
* В общем, мастерсервер обеспечивает взаимодействие между игроками и игровыми серверами со всеми удобствами, начиная от запуска лаунчера (клиента) и заканчивая фактическим началом игры (хотя мастер может и дальше каким-либо образом взаимодействовать с игроками, серверами). В самом игровом процессе мастер не участвует.
Состав
Ядро состоит из базового набора возможностей: регистрация пользователей, авторизация, загрузка файлов и подключение к серверу. Всё остальное - внешние модули. Такой подход делает мастерсервер довольно гибким и расширяемым.
Используемые средства, общая модель
Написан целиком на C (GNU C99, если быть точным). Компилируется и работает на GNU/Linux c GCC 4.2+. Может и более старые версии GCC подойдут, но таковых не нашлось. Проверяется возможность компиляции с Clang. Вскоре будет совместимость с BSD.
Модули могут быть написаны на любом ЯП, который умеет взаимодействовать с кодом на C (например C++, Python). [в стандартном комплекте есть парочка модулей для примера]
Есть встроенные функции базы данных, основанные на примитивном алгоритме, но если планируется обрабатывать более 100 запросов в секунду, рекомендуется использовать настоящую базу данных. В качестве примера была выбрана BerkeleyDB. Для использования скомпилируйте berkeleydb.c в папке "modules" и не забудьте настроить конфигурационный файл.
Пошаговая инструкция по запуску и настройке
- Скачайте исходники (ниже ссылки на скачивание)
- Перейдите в папку с исходниками и наберите 'make'
- [опционально] Перейдите в папку 'modules' и наберите 'make'
- Откройте master.conf в вашем любимом редакторе
- Выберите `server_ip` и `server_port` по желанию. Если IP == 0.0.0.0, то мастер будет слушать на всех сетевых интерфейсах. Порт, очевидно, это число от 1 до 65535.
- Так как мастер находится в стадии "Альфа", предполагается, что первоначально он будет отлаживаться и настраиваться. Если вы хотите запустить мастер на долгий срок (как демон), установите директиву `dbg_daemonize` равной 1.
- `database_lib` содержит имя файла в папке 'modules', который будет использоваться как источник функций для работы с базой данных. Как я уже говорил, если нагрузка предполагается выше средней, лучше отказаться от встроенного алгоритма на основе связанных списков в пользу настоящей базы данных. В качестве примера выбрана BerkeleyDB. Скомпилируйте одноимённый модуль и убедитесь, что строка `database_lib = berkeleydb.so` раскомментирована.
- Если ваш лаунчер автоматически обновляет игровые файлы при изменении версии игры, убедитесь, что `game_version` установлена на нужную версию. Например, для Minecraft 1.1.0 строка будет выглядеть так: `game_version = 0000000000110`
- По умолчанию `log_level` равен 0, что означает вывод полного набора отладочных сообщений. Максимальный уровень - 4. Будут логироваться только критические уведомления, означающие обычно прекращение работы мастерсервера.
- Остальные опции будут описаны по мере введения в эксплуатацию.
- Наберите './master', чтобы запустить мастерсервер. Если что-то пойдёт не так, мастерсервер попытается объяснить, в чём дело %)
Предположим, что вы запустили мастерсервер на 10.20.30.40:1338. Убедитесь, что лаунчер отсылает запросы именно на этот адрес. Minecraft.jar тоже придётся отредактировать, заменив оригинальные адреса на ваш IP:PORT, так как именно minecraft.jar занимается загрузкой скинов и плащей с мастерсервера. Серверное ПО тоже должно обращаться к "10.20.30.40:1338", очевидно. Инструкция по изменению оригинального клиента и сервера будет добавлена позже.
Базовые пакеты, с которыми работает мастерсервер, полностью идентичны тем, что используются оригинальным лаунчером.
https://nodeload.github.com/NiGHt-LEshi ... all/master
[url]git://github.com/NiGHt-LEshiY/om_master.git[/url]