brestows
понимаю что можно if elsif ^)
brestows
но все же
Alexey
local switch = { block = userBlocked; vip = userVIP; test = testVoIP; manager = userManager; };
brestows
ребят простите за глупый вопрос, но как-то можно объявить функцию в начале скрипта, а ее реализацию написать в любом другом месте, что-то не могу нагуглить как это сдеать
Georgy
нет
brestows
т.е. я должен следить за порядком функций в файле ?
Georgy
да
Snusmumriken
Можно. varname ... function varname(x, y) return x + y end Но если попробуешь вызвать до того как определил - жди спид. Собственно, так можно делать локальные рекурсивные фунции: function foo() local bar -- если этого не сделать, ругнётся что нет bar local function bar(a, b) return a > b and b or bar(a - 1, b + 1) end end
Alexey
local function bar()...end эквивалентен local bar; bar=function()...end
Snusmumriken
Проверь сам ))
ShadoWalkeR
В луа не хватает прототипов 😞
Snusmumriken
Чем тебе setmetatable не нравится?
ShadoWalkeR
Я про прототипы функций из С/С++ - где можно описать вызов и ответ в начале файла, а реализацию в конце
Tverd
local foo ... function foo() end
ShadoWalkeR
Не видно передаваемых значений
Snusmumriken
А я уж подумал про ЖС-прототипы. Но кто мешает делать комментарии?
Tverd
или прямо вот что бы как в С local function foo(x,y) end ... function foo(x,y) ... end
Snusmumriken
Да, она два раза создаётся, но это не играет большой роли.
Tverd
я тоже про них подумал... типа переопределять метод в встроеных объектах
Anonymous
посоны посоны посоны
Anonymous
можно ли на луа реализовать что-то вроде многопоточного демона, который будет слушать какой-то порт и отвечать туда чем-то там?
Anonymous
чтобы каждый запрос = отдельный трэд
Anonymous
http://lua-users.org/wiki/CoroutinesAsConnectionHandlers норм?
Anonymous
а ты чо, не старичок? (:
Alexey
Можно и в отдельных потоках если очень надо
Alexey
Я когда то писал патч для luasocket Но лучше попробовать другой вариант
Snusmumriken
можно ли на луа реализовать что-то вроде многопоточного демона, который будет слушать какой-то порт и отвечать туда чем-то там?
Тебе на линупс? Он может демонизировать всё что угодно, так что да. Для ТруЪ-многопоточности - lanes, и всё. Просто создаёшь комплект функций-трэдов, общаешься ими через Linda (или не общаешься, если не нужно). Советую сделать демону слушалку какого-то порта из главного потока в текстовом режиме, чтобы им можно было легко рулить, открывать/закрывать новые потоки, редактировать конфиг и всё такое.
Anonymous
copas — не то?
Anonymous
copas = require "copas" function handler(c, host, port) c:settimeout(1) c:receive("*l") end copas.addserver(assert(socket.bind("*",2220)), function(c) return handler(copas.wrap(c), c:getpeername()) end) copas.loop()
Anonymous
на settimeout ему похуй, почему-то
Anonymous
хотя вроде как wrap() отдаёт обычный luasocket
Snusmumriken
Не то, это корутины. Корутины, панимаищь? Один "тред" завис - и всё зависло, исполняется на одном процессоре в одном потоке. Корутины = много-много goto, в красивой оболочке, не более.
Anonymous
https://gist.github.com/Deco/4026258
Anonymous
А ЧО КАК СЛОЖНО
Snusmumriken
Вот такое, например.
Snusmumriken
Ну вот такие, например. Это код треда, вызывающего произвольную фигню. Менеджер где-то рядом болтается.
Snusmumriken
Ах да, тут истинная многопоточность, и треды не блокируют ))) Менагер тупо проходит циклом по списку занятых тредов и если от них что-то пришло - выдаёт это например в табличку.
Snusmumriken
Это типа безопасный хендлер для потоков, и общая точка общения каждого потока с главным.
Snusmumriken
Ну, это универсальная краткая лекция. Относится к произвольным потокам. Если что: поток - это отдельная фигня. Операционные системы делят их на два типа - "лёгкие" и "тяжёлые" потоки. Лёгкие - это программа сообщает операционной системе, мол, вот этот кусок кода можно выполнять параллельно. Они легко плодятся и имеют общую память, правда, за переключение между потоками отвечает операционная система, и они могут выполняться только на одном процессоре, единственное различие - асинхронность. Ранний Lanes выполняет именно такие потоки. Тяжёлый поток - это как будто совсем другое приложение, с которым можно общаться через общие каналы. У них нет ни одного куска общей памяти, а пересылка - только текстовыми сообщениями через пайпы-каналы. Вот эта херовина может выполняться на разных процессорах, и жрать огромную кучу памяти. Но тут лишний дискомфорт в виде невозможности работать с объектами друг друга напрямую, только через посредника, типа "читалка-отправлялка сообщений" в каждом потоке. Это очень, очень похоже на сетевое взаимодействие разных приложений. А корутины - это считай что очень много GOTO. Функция, которая может в любой момент прерваться через yeld, и продолжить своё выполнение после того как её снова вызвали
Snusmumriken
Ща найду ))
Anonymous
luasocket патчить надо?
Snusmumriken
Зачем?
Snusmumriken
Я ща вычищаю из скрипта хемеру и прочую дрянь, сейчас там останется только сравнительно чистая фигня.
Anonymous
хз, во всех примерах использования lanes+luasocket в luasocket добавляли функцию какую-то патчем
Snusmumriken
Хе, третьему луасокету вроде пофигу, хотя мб это потому что я слушаю одним портом, раскидывая задачки на потоки. Ну, типа прога с одной точкой входа. Проверишь сам, в общем.
Snusmumriken
Чот такое. Есть классы воркеров, менеджеров и всего такого. https://pastebin.com/7VUXra6a
Snusmumriken
Очереди тасков нет, но можно присобачить пятью строками. В данной реализации, если не нашлось свободного воркера на задачу, оно просто вернёт nil на worker:send(...). Да, для этой фигни есть ещё предзагрузчик, который как раз объявляет лишние функции и поля node, так что не пугайся странностям, это кусок довольно большой составной фигни. Мда, примерно так выглядит хайлоад, если что, только таймауты поменьше поставить, и воркеров побольше, а ещё, оболочку над всей этой фигнёй с балансировщиком ))
Anonymous
о, пасиба
Anonymous
@Snusmumriken » Мда, примерно так выглядит хайлоад, ага
Anonymous
поэтому и смотрю на сокеты
Anonymous
https уже не хватает :)
Anonymous
@Jsusdevs
Anonymous
что за жэсть :D
Anonymous
я пока вообще нипонимат, как и что тут работает
Snusmumriken
Мм. Давай нарисую схемку.
Anonymous
или тут сервер и клиент в одном файле, лол?
Snusmumriken
Это просто слушающий сервер, который по TCP принимает запросы, раскидывает их по тредам, и если тред что-то вернул - отправляет обратно тому кто запросил. (18: local succ, script = xpcall(dofile, error_printer, path..'/service.lua') -- скрипт треда). Вот эта "жэсть" - это типа лог для меня любимого, мол, если что-то упало - перестанет отписывать.
Anonymous
ааа
Snusmumriken
Микросервис кароч.
Anonymous
спасибо, будем разбираться :3
Snusmumriken
Чот такое. Хм, можно было текстом послать, но я уже открыл paint.
Anonymous
почему так сильно жрёт ЦП?
Anonymous
Anonymous
Приветствую всех! Пытаюсь разобраться, как накрутить счетчик установок гугл плей с одного устройства. Точнее говоря, какие параметры отвечают за уникальность устройства (имей, серийник, айди, почта, айпи т .д.) Есть у кого-либо знания в этой области? Или, может быть, опыт? Бюджет 1500$
brestows
Народ, подскажите вопрос, есть ли библиотека для lua по работе с каледнарем ?
Alexey
есть для работы с датой/временем
Alexey
Я использую lua-date
Alexey
https://luarocks.org/modules/tieske/date
brestows
Я имел ввиду какой нить ical протокол или что-то подобное
brestows
для работы с удаленным календарем
Adel
Всем привет! Ищу программиста на луа, который сможет написать торгового робота. Алгоритм и стратегия есть. За подробностями в личку
Maxim
Roman
=)
Anonymous
опять ты?
Elias
Alexey
У меня нет твиттера :)
Нет.
Snusmumriken
А зачем тебе твиттач-то? Парсить твитты чтобы на их основе учить нейронку определять отношение окружающих к новым звёздным войнам?