LeshaInc 625 Опубликовано: 10 ноября, 2015 (изменено) Часто необходимо писать программы для серверов. Это могут быть сервера для чатов, или файловые облака или что то еще, но всегда приходится писать велосипеды. Подумав об этом я решил написать программу для сервера. Программа работает просто. Подгружает модули из папки проекта, а потом начинает слушать все event'ы и обрабатывать. Представляю вам саму программу: Servercore v0.2.1Исходный код: http://pastebin.com/NASX9sX0Использование: Создаем папку проекта Создаем в этой папке файл .servercore Запускаем servercore указывая первым аргументом папку которую мы создали. Если не указывать аргумент то servercore запустится в рабочей директории. Наслаждаемся рабочим сервером, который пока ничего не делает. Любые файлы (кроме .servercore) которые находятся в папке проекта будут загружены как модули. Если модуль содержит ошибку наш сервер не полетит, а просто выведет тест ошибки на экран. При создании модулей можно использовать специальные функции, которые находятся в _G.sc. Описание этих функций: sc.info(info_type:string, message:string) - выводит информацию со временем и раскрашивает как на скринах. Принимает тип информации и само сообщение. Типов информации всего 4: ok,err,warn и info. sc.getTime() - возвращает время в формате unix timestamp. sc.on(event_name:string,handler:function) - добавляет слушателя на сигнал. Циклом слушаются все сигналы а потом запускают функцию обработчик для того сигнала который пришел. Пример простейшего модуля: sc.on("touch",function (e) sc.info("info","you touched!")end) Изменения в версии: Фикс багов и добавление новых багов NoDebug режим (-d) IgnoreServercore режим (-i) Новая лицензия: Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0 Патч 1: убрана обязательная поддержка модемов.Старые версии: 0.2.0 http://pastebin.com/pRrcMTtn 0.1.0 http://pastebin.com/sf9xPDAG Произведение «Servercore» созданное автором по имени LeshaInc, публикуется на условиях лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» («Атрибуция — Некоммерческое использование — Без производных произведений») 4.0 Всемирная. PS: Название проги звучит как поджанр метала))) Изменено 3 января, 2016 пользователем LeshaInc 8 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
CrazyLimon 2 Опубликовано: 22 ноября, 2015 Идея неплохая. Но лучше сразу писать ServerOS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 22 ноября, 2015 Идея неплохая. Но лучше сразу писать ServerOS А как относится программа, загружающая другие проги, к системе отдельной? По поводу ОСей: шмактус и вниз 5 сообщений. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st 88 Опубликовано: 22 апреля, 2018 (изменено) Дошло не сразу, долго искал причину nil в аргументах function main() while running do local e = {event.pull()} for i=1,#listeners do Зачем паковать ивент в таблицу и подавать его таким? local ok,err = pcall(listeners[i][2],e) Предлагаю исправленный вариант: local ok,err = pcall(listeners[i][2],table.unpack(e)) Изменено 22 апреля, 2018 пользователем HeroBrine1st Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st 88 Опубликовано: 22 апреля, 2018 (При редактировании не могу сбросить строку, поэтому пишу новым сообщением) Так же без фикса выше этот слушатель работать не будет. listeners[1] = {"key_down",function (_,_,k1,k2) if keyboard.isControlDown() and keyboard.isKeyDown(46) then info("info","interrupted server.") running = false end end} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RolanUnix 18 Опубликовано: 2 января, 2019 (изменено) Не везде запускается. Крашится программа на строчке: package.preload["server_api"] = function () return api end Проблема в том, что не у всех есть preload в package. У меня только есть это на версии OpenOS 1.7.2 Исправил просто изменив preload, на loaded и не совсем понял для чего ты суёшь туда эту функцию. Изменено 2 января, 2019 пользователем RolanUnix Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st 88 Опубликовано: 6 февраля, 2019 02.01.2019 в 22:09, RolanUnix сказал: для чего ты суёшь туда эту функцию package.preload - таблица с функциями, возвращающими библиотеку. Используется самой опеносью, что бы закинуть туда библиотек в незагруженном формате и загрузить одну из них - тогда все зависимости загрузятся сами и не надо будет танцевать с бубном. Если изменить на loaded, надо еще заменить все после "=" на просто api. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах