Закрыть
Harrier Du-Bois
был в сети сегодня в 13:28

Harrier Du-Bois

Ревашоль форева!
Местоимения: они/их
Семейное положение: Всё сложно
Дата регистрации: 13 января 2023 в 18:36
Родной город: Ревашоль
Полит. взгляды: Коммунистические
День рождения: 30 января 0006, 2019 лет
Информация

Интересы: Служба в РГМ
Любимая музыка: Говорят, что я любил диско
Любимые книги: Краткое описание инфраматериализма
О себе: Лейтенант, дважды Ефрейтор
Аудиозаписи
72 аудиозаписи
nikanikoo don't listen to them?
01:49
Филипп Киркоров Ой мама шикирдын шикирдын feat. Валерий …
02:10
Jase На руинах надежд
03:52
Подарки
37 подарков
Стена 312 записей Все
Идея создания Minecraft Classic сервера на Bash с GNU-утилитами, без использования какого либо языка программирования:
Сервер для классических версий, так просто меньше заморочек.
Есть главная проблема: Bash не умеет работать с null-байтами в строках, они обрезают данные. Поэтому вся архитектура будет строиться вокруг непрерывной конвертации бинарного трафика в текст (hex) и обратно.
Следующие утилиты пригодятся:
Использование socat или xinetd для прослушивания порта 25565.
При каждом входящем подключении socat запускает отдельный экземпляр bash-скрипта, пробрасывая сокет клиента в стандартные потоки stdin и stdout скрипта.
Сырые байты из stdin немедленно пайпятся в "xxd -p", превращаясь в сплошную hex-строку (0x0...), которую bash может безопасно читать и сохранять в переменные.
В самом скрипте формируется ответный пакет как текстовую hex-строку, прогоняет её через "xxd -r -p" для обратной конвертации в сырые байты и пишет в stdout (т.е. прямо в сокет клиента).

Так как в классических версиях сервера пакеты имеют строгую длину, входящий hex-поток нарезается с помощью текстовых утилит cut, "head -c" или awk (чтение определенных символов строки). ID пакета (первые два hex-символа) передается в конструкцию скрипта "case ... esac", которая вызывает соответствующую функцию в bash (рукопожатие, авторизация, установка блока, движение).
Мир будет хранится в "/dev/shm" (tmpfs), для повышения скрости. При старте/завершении работы мир загружать/выгружать. Сам мир будет небольшим, плоским, один слой какого-то блока. Запись будет в текстовом файле или через ассоциативные массивы bash, где блоки записаны в виде символов.
При первом старте сервера утилита yes (да, тупо спамит какими-то символам) генерирует простой файл нужного размера.
При входе игрока сервер не собирает чанки динамически, а просто читает файл плоского мира (через утилиту cat), оборачивает в заголовки пакетов и отправляет клиенту. Серверу также нужна многопоточность. Внутри обработчика клиента запускается фоновый процесс ("while true; do ... sleep 0.05; done &"), имитирующий 20 TPS. Изменения, как упоминал, пишутся в "/dev/shm", чтобы другие фоновые процессы могли их прочитать. Фоновый цикл регулярно формирует hex-пакет Keep-Alive и отправляет его через xxd, чтобы клиент не отвалился по таймауту.
Показать больше
Пожаловаться  |  Комментарии (3)  |  Поделиться
Коммунизм нежизнеспособен, но мы продолжим с ним бороться.
Пожаловаться  |  Комментарии (1)  |  Поделиться
Захотелось похвастаться своими рисунками из скетчбука.

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

Представляю к вашему вниманию последние рисунки за три дня:
Пожаловаться  |  Комментарии  |  Поделиться
Стоило App Store и Google Play удалить VK и святого «Макса», как Российские чиновники и топ менеджеры тут же вспомнили давно забытый либеральный вокабуляр: «дискриминация!», «нарушение прав!».

Действительно, как посмели эти коварные западники посягнуть на святое… на отечественное право ограничивать? Итак, под обоюдные лозунги о «свободе» с обеих сторон, сама свобода тихо ушла в небытие.
Пожаловаться  |  Комментарии  |  Поделиться
1 2 3 »