Snusmumriken
Ммм. Думаю он победит уже тем, что там уже всё есть.
На луях придётся сначала запилить асинхронный сокет, а потом добавить туда "веб"-протокол.
В общем-то, ничего сложного, работы на пол часа-час.
С lanes будет ещё и бешено быстрым/труЪ-асинхронным.
Snusmumriken
Есть вот эта штука:
https://github.com/lipp/lua-websockets
Но там куча ненужных внешних зависимостей, ирл достаточно было бы сделать две зависимости на почти стандартные штуки: lanes и socket, собственно.
fgntfg
Ну вот да. На самом деле взять коробку и развернуть её - не проблема. Проблемы начинаются когда коробку надо перепилить, поженить с базой и вот это вот всё.
Roman
Snusmumriken
Тогда сам смотри :P
Snusmumriken
Ну дык. И она использует корутины от libuv, есть такое.
Но тем не менее, смотри доки. Тут мало кто даст тебе более подробную информацию чем доки.
Вот, кстати, и они: https://github.com/luvit/luv/blob/master/docs.md
Georgy
Snusmumriken
Это тебе не любой чат, тут есть я.
Snusmumriken
fgntfg
Anonymous
Ivan
всем привет! Задача такая: играет фоновая музыка, хотелось бы, чтобы звук подбора монетки гармонировал с фоновой мелодией, для этого я выписал хронометраж трека и какой звук воспроизвести на текущей секунде. Как это сделать? На С++ я бы сделал это так: https://ideone.com/qxSoM6
mva
Я тебя наверное уже достаточно достал. Но если будет время попроси "Админа @pro.lua" меня разбанить. Буду хоть в режиме read only сидеть
Snusmumriken
Лол, он ещё тут : )
Ну лады, пущай читает.
Tverd
Всем привет! Кто-нить писал что нить на ecs? Как и где обрабатывали события от движка? Например клацнули мышью на спрайте или по сети пришел пакет?
Snusmumriken
Там, обычно, хендлеры-колбеки. ЕСЦ - концепция, а не конкретная технология.
Elias
И события можно обрабатывать в системах часто. Или в машинах состояний.
Типа если у тебя выстрел стоит на клик, то на пушка подписывается на ивент и стреляет в GunIdleState. Тут ECS мало влияет на всё
Tverd
Ага, в общем система отлавливает события, гуд, спасиб
Tverd
нужно было развеять сомнения )))
Snusmumriken
Не факт, но обычно так и есть.
Tverd
ну пока будем отталкиваться от этого
Alxius
мне сказали в чате что отсутствие виндовс версии игры - это серьезная проблема для людей которые хотят посмотреть игру я наконец то это исправил вот страничка с релизом виндовс версии (Наконец то спустя 3 месяца) https://vk.com/feed?w=wall-134363102_74
Alxius
да да это тот самый проеkt на Love2D
mva
> отсутствие виндовс версии игры - это серьезная проблема для людей которые хотят посмотреть игру
mva
ну, как обычно. самые наглые юзеры - юзеры windows
Snusmumriken
И их примерно 95%, я смотрел статистику пользователей стима.
А линукс-игруны пользуются стимом, потому что это самая большая база игр под линукс.
Aiwan \ (•◡•) / _bot
что за игра? где можно почитать о ней?
Nick
подскажите, чем к тарантулу ходить из lapis ?
https://github.com/hengestone/lapis-tarantool не работает
Snusmumriken
Привет посоны, чего хотите/расскажете? : )
Snusmumriken
Snusmumriken
Самое забавное и одновременно стрёмное что можно придумать - луа-приложение на тарантуле, которое слушает сокет, принимает луа-код, исполняет через loadstring и возвращает ответ. Тут возможны запросы произвольной сложности, и вызывающая сторона сама думает, что и как ей надо.
Snusmumriken
Но вообще есть вот это:
https://github.com/tarantool/tarantino
fgntfg
Snusmumriken
> Самое забавное и одновременно стрёмное
fgntfg
Можно сделать свой Rest-api a-la elastic
vvzvlad
А как на паттернах в луа захватить первое слово, если оно либо "set", либо "get"?
fgntfg
И назвать его тарантастик
vvzvlad
Ну, т.е. аналогично такому, но проще:
local _, _, gpio_cmd = string.find(message, ^(%a%a%a))
if (gpio_cmd == "set" or gpio_cmd == "get") then ...
Что-нибудь типа ^(get|set)
_AMD_
sub?
fgntfg
vvzvlad
что не работает?
fgntfg
Regex
vvzvlad
в том-то и дело, что нет. Поэтому и спрашиваю, можно ли, и как, если да
vvzvlad
А все равно паттерный два раза писать. Я хотел в один уместить
fgntfg
http://rrthomas.github.io/lrexlib/
Vsevolod
lpeg.re еще
Andrey
Ребят а как сгенерить xml ?
Andrey
А готового ничего нет,типа lxml ?
Andrey
Чтоб из table в xml как нить ?;)
Andrey
Там парсеры все ..
Snusmumriken
Чтоб из table в xml как нить ?;)
Прекол XML в том, что там есть куча дополнительного стаффа.
Есть такой XML:
<tag1>
<tag2>bla-bla</tag2>
</tag1>
Есть такой XML:
<tag1 property1=bla-bla, property2 = "prop">
<tag2></tag3>bla-bla</tag2>
</tag1>
Поэтому для нормальной конверсии, нужно делать таблички такого рода:
xmltbl = {
tag = "tag1",
properties = {
property1 = "bla-bla",
property2 = "prop2"
},
nodes = {
{
tag = "tag2",
content = {
"</tag3>",
"tag2",
....
}
}
}
}
Snusmumriken
< 3
Vsevolod
а никто не занимался вопросами отладки стека lua, при написании сишных расширений: вроде вошли в функцию, имеем N аргументов на входе, M на выходе (скажем, из docstring'а), и для каждой функции lua API проверяем, чтобы N и M оставались инвариантными
Vsevolod
наверное, немного сумбурно, но стоит задача найти функцию-паразита, которая подсирает в стек
Vsevolod
я думал даже писать под это дело расширение к libclang, но руки пока не дошли
Vsevolod
наверняка у многих возникала такая проблема, не?
Snusmumriken
Ничего особо сложного.
1. lua_gettop(L); - получить количество фигни на стеке
2. lua_settop(L, n); - выставить значение стека
т.е.
// луа-функция имеет на входе только стейт
int lua_cfunc(lua_state * L){
// если первые два значения в стеке - числа
if (lua_isnumber(L, 1) && lua_isnumber(L, 2)){
// берём первое число
int a = lua_checknumber(L, 1);
// берём второе число
int b = lua_checknumber(L, 2);
int c = a + b;
int d = a - b;
// пихаем в конец стека фигню
lua_pushnumber(L, c);
lua_pushnumber(L, d);
std::cout << lua_gettop(L); << std::endl;
// 4: 1:a, 2:b, 3:c, 4:d
// луа-си-функция должна возвращать
// количество аргументов с конца,
// которые функция возвращает в луа
return 2;
}
// а если не числа - ничего не возвращает ((
return 0;
}
Vsevolod
эм, нет, это все понятно
Vsevolod
хотя да, можно эту вот обвязку через codegen вставлять в каждую функцию
Vsevolod
а потом перлом парсить, ага
Vsevolod
settop - это грубое решение
Vsevolod
можно с водой младенца выплеснуть
Vsevolod
не хочется такого
Snusmumriken
Мм. Воспользуйся функцией printstack, и увидишь её содержимое.
void lua_printstack(lua_State *L)
{
for (int i = 1; i <= lua_gettop(L); i++)
std::cout << i << " - " << luaL_typename(L, i) << std::endl;
}
Можно со всех сторон смотреть, кто где подсирает.
Vsevolod
ну это еще более усложнит задачу перлу. функций очень много
Vsevolod
и они зависят от контекста
Snusmumriken
А чому перл? Тут как бы сишка.
Vsevolod
парсить вывод всей этой простыни
Vsevolod
и это будет больше не сишка, а libclang, потому что инжектить это надо в 100500 мест
Vsevolod
а потом парсить
Snusmumriken
Ууу, слишком сложно.
Попробуйте попроще : )
Vsevolod
а попроще никак
Vsevolod
api жырное и асинхронное
Vsevolod
проблему я локализовал достаточно точно, но поймать не могу
Snusmumriken
Ну, асинхронность - это получать id потока и писать в лог-файл, с именем соответствующий текущему потоку.
Жырность - неудобно, да.
Vsevolod
потоков никаких нет, есть асинхронные события и event loop
Snusmumriken
Ммм. Тогда пускать некоторое время события по одному, последовательно. Там же какой-то процесс есть?
Типа, сначала запускаем одно событие, когда оно отработается - полученные данные пихаем в следующее событие, и т.п.
Не? Ну я к тому, что любую асинхронность можно свести к линейному процессу, для читабельности логов.
А жирность - да, не очень круто, но вроде анализируется. Глобальную замену тоже никто не отменял.
Типа, при вызове каждой луа-сишной функции, пихаем лог: "Вызвалась такая-то функция, содержимое стека - вот такое вот", и на выходе из луа-сишной функции - то же самое.
Глобальные замены - регулярками типа:
replace
what:
luafunc_(funcname)(\(\))\n{
to:
luafunc_\0(\1)\n{
LOG("call \0 function, stack: %s", luax_printstack(L));
Ну типа чтобы у каждая функция, типа
int luafunc_foo(lua_state * L){
....
return 1;
}
стала таким:
int luafunc_foo(lua_state * L){
LOG("call foo function, stack: %s", luax_printstack(L));
....
return 1;
}
В самой регулярке не уверен, думаю ты на том же перле напишешь лучше.
Mons