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

Asummonster

Пользователи
  • Публикации

    420
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Сообщения, опубликованные пользователем Asummonster


  1. Ну, таймер это не совсем параллельные программы. Таймер просто позволяет вызвать одну функцию несколько раз с определенным периодом. А функцию, конечно, описывать до запуска таймера. А иначе, что таймер будет вызывать?

    ну, не обязательно до таймера

    можно же 

    event.timer(1, function() print("Hello world!") end)
    
    • Нравится 1

  2. В опеннет, вроде, и так встроен пинг

     

    Ты не прав.

     

    У меня стоит Debian, я знаю чем он занят, и все важные операции он делает с моего ведома. (Не знаю, как там у вас, виндузятников :D )

     

    Что касается пинг-понга - это особенность реализации TCP/IP сетей. А не железа.

    Вот если ты поднимешь OpenNet, ты можешь реализовать там команду ping, которая будет определять доступность узла сети.

    А встраивать в мод, по сути в само "железо" сетевых передатчиков - это не правильно. Железо делает то, на что мы его программируем и не должно делать ничего постороннего.


  3.  Я не говорил прослушку.  Всего навсего : сканер, что прощупывает каналы, от 0 до 65535 и выдаёт список открытых. Вот и всё. :smile44:

    В жизни, тоже не ставят - 100500 миллионов приёмников. :giggle:

     

    З.Ы. Можно даже 4 стойки поставить. И пускай каждая, гоняет по кругу свой диапазон(по-типу : 0x0000 - 0x3FFF, 0x4000 - 0x7FFF, 0x8000 - 0xBFFF, 0xC000 - 0xFFFF). Ну вы меня - думаю поняли. :)

    Всмысле - список открытых портов?


  4. Может, вместо термалки иммерсив поставите? Там и поддержка компьютерная лучше, чем во всех других индустриальных модах, и куча красивых структур, экскаваторы всякие, дробилки, движки дизельные, печки дуговые и тому подобное. А что там, в той термалке? Ячейки какие-то да сервомеханизмы, которые халявно качают всё под ряд. Один плюс термалки - аддон для компов, который позволяет роботу тессаракт с собой возить. Да и разнообразие какое-то будет. Этот ИТ уже полтора года перерождаете, сколько можно?


  5. Здесь в переменную запишется только то, что функция выполнится, т.е. true в примере на скриншоте. Хотелось бы получить именно результат выполнения (из скриншота - 80 и 25).

    res={pcall(load("return "..any))}

    res[1]>>true

    res[2]>>80

    res[3]>>25

    res={pcall(load("return "..any))}
    tmp=""
    for id=2, #res do
      tmp=tmp.." | "..res[id]
    end
    modem.broadcast(port, tmp)
    
    • Нравится 1

  6. Вероятно, так и есть :)

     

    Отдельно уточнить хотел, как можно вывести результат в броадкаст? Попробовал :

     

    res=pcall(load(any))

     

    Но броадкаст передал nil.

    На сколько я понял,pcall возвращает результат выполнения(true/false) и ответ от load

    И надо прикрепить return

    Что то вроде result, res = pcall(load("return "..any))

    post-14173-0-96600400-1463594458_thumb.png


  7. file:flush в обычной записи файлов, насколько я знаю - не требуется. file:write и так все записывает.

    Записывать-то он записывает, но не сохраняет.

    file:close автоматом сохраняет файл и закрывает его

    file:flush нужен, если ты не хочешь закрывать файл, но хочешь сохранить его(например, при логировании чего либо).


  8. Никакого прелоада не нужно


    Это vcomponent

     

    local component = require("component")
    local computer = require("computer")
    
    local proxylist = {}
    local proxyobjs = {}
    local typelist = {}
    local doclist = {}
    
    local oproxy = component.proxy
    function component.proxy(address)
    	checkArg(1,address,"string")
    	if proxyobjs[address] ~= nil then
    		return proxyobjs[address]
    	end
    	return oproxy(address)
    end
    
    local olist = component.list
    function component.list(filter, exact)
    	checkArg(1,filter,"string","nil")
    	local data = {}
    	for k,v in olist(filter, exact) do
    		data[#data + 1] = k
    		data[#data + 1] = v
    	end
    	for k,v in pairs(typelist) do
    		if filter == nil or (exact and v == filter) or (not exact and v:find(filter, nil, true)) then
    			data[#data + 1] = k
    			data[#data + 1] = v
    		end
    	end
    	local place = 1
    	return function()
    		local addr,type = data[place], data[place + 1]
    		place = place + 2
    		return addr,type
    	end
    end
    
    local otype = component.type
    function component.type(address)
    	checkArg(1,address,"string")
    	if typelist[address] ~= nil then
    		return typelist[address]
    	end
    	return otype(address)
    end
    
    local odoc = component.doc
    function component.doc(address, method)
    	checkArg(1,address,"string")
    	checkArg(2,method,"string")
    	if proxylist[address] ~= nil then
    		if proxylist[address][method] == nil then
    			error("no such method",2)
    		end
    		if doclist[address] ~= nil then
    			return doclist[address][method]
    		end
    		return nil
    	end
    	return odoc(address, method)
    end
    
    local oslot = component.slot
    function component.slot(address)
    	checkArg(1,address,"string")
    	if proxylist[address] ~= nil then
    		return -1 -- vcomponents do not exist in a slot
    	end
    	return oslot(address)
    end
    
    local omethods = component.methods
    function component.methods(address)
    	checkArg(1,address,"string")
    	if proxylist[address] ~= nil then
    		local methods = {}
    		for k,v in pairs(proxylist[address]) do
    			if type(v) == "function" then
    				methods[k] = true -- All vcomponent methods are direct
    			end
    		end
    		return methods
    	end
    	return omethods(address)
    end
    
    local oinvoke = component.invoke
    function component.invoke(address, method, ...)
    	checkArg(1,address,"string")
    	checkArg(2,method,"string")
    	if proxylist[address] ~= nil then
    		if proxylist[address][method] == nil then
    			error("no such method",2)
    		end
    		return proxylist[address][method](...)
    	end
    	return oinvoke(address, method, ...)
    end
    
    local ofields = component.fields
    function component.fields(address)
    	checkArg(1,address,"string")
    	if proxylist[address] ~= nil then
    		return {} -- What even is this?
    	end
    	return ofields(address)
    end
    
    local componentCallback =
    {
    	__call = function(self, ...) return proxylist[self.address][self.name](...) end,
    	__tostring = function(self) return (doclist[self.address] ~= nil and doclist[self.address][self.name] ~= nil) and doclist[self.address][self.name] or "function" end
    }
    
    local vcomponent = {}
    
    function vcomponent.register(address, ctype, proxy, doc)
    	checkArg(1,address,"string")
    	checkArg(2,ctype,"string")
    	checkArg(3,proxy,"table")
    	if proxylist[address] ~= nil then
    		return nil, "component already at address"
    	elseif component.type(address) ~= nil then
    		return nil, "cannot register over real component"
    	end
    	proxy.address = address
    	proxy.type = ctype
    	local proxyobj = {}
    	for k,v in pairs(proxy) do
    		if type(v) == "function" then
    			proxyobj[k] = setmetatable({name=k,address=address},componentCallback)
    		else
    			proxyobj[k] = v
    		end
    	end
    	proxylist[address] = proxy
    	proxyobjs[address] = proxyobj
    	typelist[address] = ctype
    	doclist[address] = doc
    	computer.pushSignal("component_added",address,ctype)
    	return true
    end
    
    function vcomponent.unregister(address)
    	checkArg(1,address,"string")
    	if proxylist[address] == nil then
    		if component.type(address) ~= nil then
    			return nil, "cannot unregister real component"
    		else
    			return nil, "no component at address"
    		end
    	end
    	local thetype = typelist[address]
    	proxylist[address] = nil
    	proxyobjs[address] = nil
    	typelist[address] = nil
    	doclist[address] = nil
    	computer.pushSignal("component_removed",address,thetype)
    	return true
    end
    
    function vcomponent.list()
    	local list = {}
    	for k,v in pairs(proxylist) do
    		list[#list + 1] = {k,typelist[k],v}
    	end
    	return list
    end
    
    function vcomponent.resolve(address, componentType)
    	checkArg(1, address, "string")
    	checkArg(2, componentType, "string", "nil")
    	for k,v in pairs(typelist) do
    		if componentType == nil or v == componentType then
    			if k:sub(1, #address) == address then
    				return k
    			end
    		end
    	end
    	return nil, "no such component"
    end
    
    local r = math.random
    function vcomponent.uuid()
    	return string.format("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
    	r(0,255),r(0,255),r(0,255),r(0,255),
    	r(0,255),r(0,255),
    	r(64,79),r(0,255),
    	r(128,191),r(0,255),
    	r(0,255),r(0,255),r(0,255),r(0,255),r(0,255),r(0,255))
    end
    
    return vcomponent
    
    

     

     

    • Нравится 3
×
×
  • Создать...