Перейти к публикации
Форум - ComputerCraft
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
  • Like 5

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


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

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

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

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

  • Like 1

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


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

Дошло не сразу, долго искал причину 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}

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×