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

Process API и component.proxy

Вопрос

У меня есть такая программа, но мне надо что бы init.lua мог читать этот файл, а его дочерние процессы и программы, запущенные пользователем нет (возвращалось nil). как это сделать?

 

1532476919_notepad_L0qf1Rl1WN.png.9617f785ad518e3c44f0a0916b6fc2a1.png

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


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

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

Сохранить оригинальную функцию open из proxy в переменной `open`, затем заменить функцию в этом proxy на

function(...) 
  local args = {...}
  if args[1] == "file.lua" then -- Заменить название файла
    return nil
  else 
    return open(...) -- В случае, если оригинальная функция сохранена в переменную open, иначе нужно изменить название
  end
end

(может быть ошибся с синтасисом, давно на lua не писал)

Минусом данного решения является необходимость вызывать open из переменной внутри файла init.lua, а так же недоступность io.open, fs.open и подобных функций по отношению к конкретному файлу даже изнутри init.lua.

Плюсом данного решения является потрясающая производительность по сравнению с debug.getinfo.

 

Если данного решения будет недостаточно - нужно копать в сторону debug.getinfo. Найду Ocelot Desktop на своём ПК - попробую написать функцию с ним.

 

К слову. Я не уверен, что component.proxy для одного компонента является единственным. Возможно, API предоставляет разные экземпляры, тогда нужно будет изменить функцию component.proxy, но это уже выглядит большим костылём.

 

Расскажите, что вы хотите сделать; может быть, существует способ проще.

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


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

Похоже, что эта функция подходит.

local function getCurrentScript()
	local info
	for runLevel = 0, math.huge do
		info = debug.getinfo(runLevel)
		if info then
			if info.what == "main" then
				return info.source:sub(2, -1)
			end
		else
			error("Failed to get debug info for runlevel " .. runLevel)
		end
	end
end

Она возвращает путь к файлу скрипта, выполняющемуся в данный момент.

Нужно вызвать её и сравнить возвращаемое значение с `"/init.lua"`, если не совпадает - вернуть nil.

 

Минус - низкая производительность (об этом написано прямо в документации на debug.getinfo).

 

+ как оказалось, поля в proxy можно создавать/изменять/удалять и они не будут пропадать.

1799374378_.png.d7749ccdac1fc8c669ac15f0d5fc88a3.png

 

P.s.

Цитата

Расскажите, что вы хотите сделать; может быть, существует способ проще.

Это остаётся в силе)

Изменено пользователем HeroBrine1st
+ минус, + постскриптум

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


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

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

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

Гость
Ответить на вопрос...

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

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

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

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

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


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