[Alpha] Opensource Minecraft Masterserver

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#1 Сообщение 22.10.2011, 21:33

Свободная версия мастерсервера, используемого тут.

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" и не забудьте настроить конфигурационный файл.

Пошаговая инструкция по запуску и настройке
  1. Скачайте исходники (ниже ссылки на скачивание)
  2. Перейдите в папку с исходниками и наберите 'make'
  3. [опционально] Перейдите в папку 'modules' и наберите 'make'
  4. Откройте 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. Будут логироваться только критические уведомления, означающие обычно прекращение работы мастерсервера.
    • Остальные опции будут описаны по мере введения в эксплуатацию.
  5. Наберите './master', чтобы запустить мастерсервер. Если что-то пойдёт не так, мастерсервер попытается объяснить, в чём дело %)
Подготовка игры, сервера и лаунчера к работе с мастерсервером
Предположим, что вы запустили мастерсервер на 10.20.30.40:1338. Убедитесь, что лаунчер отсылает запросы именно на этот адрес. Minecraft.jar тоже придётся отредактировать, заменив оригинальные адреса на ваш IP:PORT, так как именно minecraft.jar занимается загрузкой скинов и плащей с мастерсервера. Серверное ПО тоже должно обращаться к "10.20.30.40:1338", очевидно. Инструкция по изменению оригинального клиента и сервера будет добавлена позже.
Базовые пакеты, с которыми работает мастерсервер, полностью идентичны тем, что используются оригинальным лаунчером.
Разработчикам, которые собираются создавать свой лаунчер
Базовые пакеты и их формат.
  • Регистрация пользователя. Формат пакета:

    Код: Выделить всё

    /game/register.jsp\nuser=<USERNAME>&password=<PASSWORD>&version=<VERSION>
    где <VERSION> - версия лаунчера, с которым работает мастерсервер. Это бывает удобно для автообновления лаунчера, если версия не соответствует текущей. Ответ мастерсервера: строка, описывающая процесс регистрации. Например, "Registered successfully!", если регистрация прошла успешно.
  • Авторизация пользователя. Формат пакета:

    Код: Выделить всё

    /game/getversion.jsp\nuser=<USERNAME>&password=<PASSWORD>&version=<VERSION>
    Ответ сервера - строка, содержащая сообщение об ошибке, либо специально сформированная строка с данными о пользователе и проч. Пример такой строки:

    Код: Выделить всё

    0000000000110:545sfg4gsxge4tggxxfggsrg4tgxvbbx:leshiy:fb41fe4e7654f21c8d24:14:
    Здесь "0000000000110" является версией игры (1.1.0), "545sfg4gsxge4tggxxfggsrg4tgxvbbx" - специальный ключ для скачивания определенных minecraft.jar с сервера (например, если есть несколько клиентов с разными плюшками, то пользователь может выбрать какой-то определенный), "leshiy" - имя пользователя в корректном регистре, "fb41fe4e7654f21c8d24" - текущая сессия, используемая повсеместно для проверки возможности пользователя совершать определенные действия, "14" - версия лаунчера.
  • Подключение к серверу (пакет от лаунчера). Формат пакета:

    Код: Выделить всё

    /game/joinserver.jsp?user=<USERNAME>&sessionId=<SESSION>&serverId=<SERVER_ID>
    Ответ: как и оригинальный мастерсервер, этот посылает "OK", если пользователь может подключиться к серверу.
  • Подключение к серверу (подтверждающий пакет от сервера). Формат пакета:

    Код: Выделить всё

    /game/checkserver.jsp?user=<USERNAME>&serverId=<SERVER_ID>
    В данный момент мастерсервер всегда посылает "YES", подтверждая подключение, т.к. все необходимые проверки делаются на предыдущем этапе.
  • [из модуля mod_skins] Получение скина пользователя:

    Код: Выделить всё

    GET /Skins/<USERNAME>.png
    Ответ: файл скина, либо ничего, если скин не может быть найден или передан :)
  • [из модуля mod_skins] Отправка скина на мастерсервер:
    1. Лаунчер посылает следующий пакет:

      Код: Выделить всё

      SKINUPLOAD\n&user=<USERNAME>&<NOTHING>&session=<SESSION>
      где '<NOTHING>' - любая строка, т.к. пока не используется и оставлено для совместимости с лаунчером, с которым я имел дело во время разработки.
    2. Мастерсервер посылает "MC_SKINUPACK", если он может принять скин по данному запросу.
    3. Лаунчер посылает сам файл скина.
Скачивание
https://nodeload.github.com/NiGHt-LEshi ... all/master
[url]git://github.com/NiGHt-LEshiY/om_master.git[/url]
Последний раз редактировалось NiGHt-LEshiY 22.10.2011, 21:33, всего редактировалось 8 раз.
Причина: Alpha.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
ArsNG
Полковник
Полковник
Сообщения: 3059
Зарегистрирован: 20.12.2007
Благодарил (а): 1069 раз
Поблагодарили: 2893 раза

#2 Сообщение 27.10.2011, 17:53

Опционально мастерсервер, естественно, может заниматься и совсем другими делами.
Неужели настолько гибкий?
Последний раз редактировалось NiGHt-LEshiY 27.10.2011, 17:53, всего редактировалось 2 раза.
Причина: Модули писать [будет] достаточно удобно. Так что, надеюсь, почти любая задача будет разрешима.

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#3 Сообщение 28.10.2011, 01:28

Когда ждать код?) Хочется уже потрогать что да как...
PS: Первым делом напишу модуль для авторизации по mysql (если там такого ещё нету).
Последний раз редактировалось NiGHt-LEshiY 28.10.2011, 07:15, всего редактировалось 1 раз.
Причина: Творческий кризис. Думаю, некие ошмётки можно ждать на след. неделе. Может быть уже с поддержкой модулей, а может и нет.

CyberMan
Капитан
Капитан
Сообщения: 352
Зарегистрирован: 11.03.2007
Откуда: 127.0.0.1
Благодарил (а): 60 раз
Поблагодарили: 5 раз
Контактная информация:

#4 Сообщение 30.10.2011, 21:59

Буду тестировать!:) Как подучу си - может, что-нить допишу!:)
Последний раз редактировалось CyberMan 31.10.2011, 00:46, всего редактировалось 1 раз.
В жопу копирайты!
1)Кто не уважает админа, тому сюда
2)Уверен, что Sonic Generations - отстой? - тебе сюда.
3)Изображение
Мой стим-профиль
Изображение

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#5 Сообщение 30.12.2011, 13:04

up..? %)

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#6 Сообщение 06.01.2012, 02:46

Внезапно.
Думаю, это можно считать точкой отсчёта.
Still [dev].
Вложения
master.tar
(77 КБ) 129 скачиваний
master.tar
(77 КБ) 129 скачиваний
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#7 Сообщение 06.01.2012, 20:10

Хорошоо, посмоотрим...))

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#8 Сообщение 07.01.2012, 20:23

Немного изменил описание, залил "нулевой" релиз на гитхаб. Не советую ориентироваться на эту версию, если вы собираетесь (даже в теории) написать какой-нибудь модуль, т.к. мастеру предстоит множество изменений, которые скорее всего поломают совместимость с текущей версией.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

mbg
Нович0к
Нович0к
Сообщения: 4
Зарегистрирован: 25.10.2010

#9 Сообщение 11.01.2012, 18:27

А как подготовить клиента для использования с данным мастер-сервером?

Аватара пользователя
F1_GTR
Игровой Администратор
Игровой Администратор
Сообщения: 409
Зарегистрирован: 24.08.2009
Откуда: Volgograd
Благодарил (а): 13 раз
Поблагодарили: 19 раз
Контактная информация:

#10 Сообщение 11.01.2012, 18:34

Изменить в классах клиента (или в памяти жавы) дефолтные адреса серверов авторизации нотча на адрес своего сервера
Dropbox - 2gb + additional 500 mb
Minus - free 10gb
Bezpalivo[DNIWE EBANOE]: Значит Whadda это ф1 , ф1 1 ты ф1 2, ф1 3 это ф1?
Whadda: ЧЕГО
Whadda: ЛУЛ
Whadda: Ф1 1-3 - Ф!
Whadda: ф1
Bezpalivo[DNIWE EBANOE]: Whadda меняет ник на F1_GTR F1_GTR меняет ник на Whadda
Whadda: А я это я
Whadda: Дак это как был я так и остался
Bezpalivo[DNIWE EBANOE]: ДА пошли вы нахуй
Bezpalivo[DNIWE EBANOE]: D:

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#11 Сообщение 11.01.2012, 19:10

Наверное надо документацию сделать..
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
F1_GTR
Игровой Администратор
Игровой Администратор
Сообщения: 409
Зарегистрирован: 24.08.2009
Откуда: Volgograd
Благодарил (а): 13 раз
Поблагодарили: 19 раз
Контактная информация:

#12 Сообщение 11.01.2012, 19:23

NiGHt-LEshiY
Может в конце концов добью этот C++ и сделаю нормальный лаунчер :3
Dropbox - 2gb + additional 500 mb
Minus - free 10gb
Bezpalivo[DNIWE EBANOE]: Значит Whadda это ф1 , ф1 1 ты ф1 2, ф1 3 это ф1?
Whadda: ЧЕГО
Whadda: ЛУЛ
Whadda: Ф1 1-3 - Ф!
Whadda: ф1
Bezpalivo[DNIWE EBANOE]: Whadda меняет ник на F1_GTR F1_GTR меняет ник на Whadda
Whadda: А я это я
Whadda: Дак это как был я так и остался
Bezpalivo[DNIWE EBANOE]: ДА пошли вы нахуй
Bezpalivo[DNIWE EBANOE]: D:

CyberMan
Капитан
Капитан
Сообщения: 352
Зарегистрирован: 11.03.2007
Откуда: 127.0.0.1
Благодарил (а): 60 раз
Поблагодарили: 5 раз
Контактная информация:

#13 Сообщение 11.01.2012, 19:39

Как я понял, сразу ядро направлено на никсы... Пошёл устанавливать образ в вируталку...
В жопу копирайты!
1)Кто не уважает админа, тому сюда
2)Уверен, что Sonic Generations - отстой? - тебе сюда.
3)Изображение
Мой стим-профиль
Изображение

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#14 Сообщение 11.01.2012, 19:42

Пока компилируется только на Linux. Пробовал GCC версий 4.2-4.6, старее не нашёл. И Clang компилит, если не ошибаюсь.
Когда доделаю весь функционал, что сейчас на уме, займусь поддержкой BSD (не должно пройти много времени, по идее).
Поддержка Windows не планируется, к сожалению (наверное) =\
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

CyberMan
Капитан
Капитан
Сообщения: 352
Зарегистрирован: 11.03.2007
Откуда: 127.0.0.1
Благодарил (а): 60 раз
Поблагодарили: 5 раз
Контактная информация:

#15 Сообщение 11.01.2012, 19:46

ну, думаю, это не проблема... Я думаю вот как раз сегодня начал почитывать книжечку по Си++ и надеюсь, что как-нить, если кто меня не опередит, сделаю порт под винду....
В жопу копирайты!
1)Кто не уважает админа, тому сюда
2)Уверен, что Sonic Generations - отстой? - тебе сюда.
3)Изображение
Мой стим-профиль
Изображение

Закрыто Вложения 1