Перейти к содержимому
LeshaInc

Серверное ядро или "Servercore"

Рекомендуемые сообщения

6BR80Xy.png?1

Часто необходимо писать программы для серверов. Это могут быть сервера для чатов, или файловые облака или что то еще, но всегда приходится писать велосипеды. Подумав об этом я решил написать программу для сервера.

Программа работает просто. Подгружает модули из папки проекта, а потом начинает слушать все event'ы и обрабатывать.

Представляю вам саму программу:
Servercore v0.2.1

Исходный код: http://pastebin.com/NASX9sX0

Использование:

  • Создаем папку проекта
  • Создаем в этой папке файл .servercore
  • Запускаем servercore указывая первым аргументом папку которую мы создали. Если не указывать аргумент то servercore запустится в рабочей директории.
  • Наслаждаемся рабочим сервером, который пока ничего не делает.


Любые файлы (кроме .servercore) которые находятся в папке проекта будут загружены как модули. Если модуль содержит ошибку наш сервер не полетит, а просто выведет тест ошибки на экран.


NDOJwea.png?1
BTCOQ5s.png?1



При создании модулей можно использовать специальные функции, которые находятся в _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: убрана обязательная поддержка модемов.

Старые версии:



88x31.png
Произведение «Servercore» созданное автором по имени LeshaInc, публикуется на условиях лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» («Атрибуция — Некоммерческое использование — Без производных произведений») 4.0 Всемирная.

 

PS: Название проги звучит как поджанр метала)))

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Идея неплохая. Но лучше сразу писать ServerOS  :D

А как относится программа, загружающая другие проги, к системе отдельной?

По поводу ОСей: шмактус и вниз 5 сообщений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дошло не сразу, долго искал причину 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))
Изменено пользователем HeroBrine1st

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

(При редактировании не могу сбросить строку, поэтому пишу новым сообщением)

Так же без фикса выше этот слушатель работать не будет.

listeners[1] = {"key_down",function (_,_,k1,k2) 
    if keyboard.isControlDown() and keyboard.isKeyDown(46) then
        info("info","interrupted server.")
        running = false
    end
end}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не везде запускается. Крашится программа на строчке:

package.preload["server_api"] = function () return api end

Проблема в том, что не у всех есть preload в package. У меня только есть это на версии OpenOS 1.7.2

image.png.1804993ea056e94c2a77422d1ef35e1d.png
Исправил просто изменив preload, на loaded и не совсем понял для чего ты суёшь туда эту функцию.

Изменено пользователем RolanUnix

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
02.01.2019 в 22:09, RolanUnix сказал:

для чего ты суёшь туда эту функцию

package.preload - таблица с функциями, возвращающими библиотеку. Используется самой опеносью, что бы закинуть туда библиотек в незагруженном формате и загрузить одну из них - тогда все зависимости загрузятся сами и не надо будет танцевать с бубном.

Если изменить на loaded, надо еще заменить все после "=" на просто api.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...