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


Фотография

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

сервер oc opencomputers Смерть Цунарефам

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 Оффлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 213
  • Уровень сигнала: 13,71%
  • В игре: 117 час. 41 мин.
  • ГородЛуна

Награды

                       

Отправлено 10 Ноябрь 2015 - 15:09

6BR80Xy.png?1

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

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

Изменения в версии:

Спойлер


Патч 1: убрана обязательная поддержка модемов.

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


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

 

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


Сообщение отредактировал LeshaInc: 03 Январь 2016 - 16:25

  • Fingercomp, Programist135, Asummonster и еще 1 это нравится

#2 Оффлайн   CrazyLimon

CrazyLimon
  • Пользователи
  • Сообщений: 2
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 22 Ноябрь 2015 - 14:17

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



#3 Оффлайн   Fingercomp

Fingercomp
  • Гуру
  • Сообщений: 2 015
  • Уровень сигнала: 149,05%
  • В игре: 1279 час. 35 мин.

Награды

                                               

Отправлено 22 Ноябрь 2015 - 14:35

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

А как относится программа, загружающая другие проги, к системе отдельной?
По поводу ОСей: шмактус и вниз 5 сообщений.
  • Alex это нравится

#4 Оффлайн   HeroBrine1st

HeroBrine1st
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

           

Отправлено 22 Апрель 2018 - 22:11

Дошло не сразу, долго искал причину 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: 22 Апрель 2018 - 22:13


#5 Оффлайн   HeroBrine1st

HeroBrine1st
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

           

Отправлено 22 Апрель 2018 - 22:22

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

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

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







Темы с аналогичным тегами сервер, oc, opencomputers, Смерть Цунарефам

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных