2013-03-28 3 views
0

Я пытаюсь сделать компьютерную систему/сеть на Tekkit, используя computercraft.Lua/Computercraft слушает, но также функция?

Computecraft - это модификация на основе Lua, которая работает в Minecraft/Tekkit и других пакетах модификации.

В принципе, я в настоящее время с помощью беспроводного маршрутизатора, чтобы выполнить это:

rednet.open('top') -- Open Connection to the wireless router 
print ("test") 
input = read() 
rednet.receive() -- Listen for messages send/broadcasted 

if message then 
print (message) 
end 

Я пытаюсь выполнить изменение всех моих систем, которые что-то вроде этого:

rednet.open ('top') 
-- Do all normal stuff 

rednet.receive() 
if message == "Lock202" then 
os.pullEvent = os.pullEventRaw 
term.clear() 
term.setCursorPos(1,1) 
print ("Alert In Progress, Terminal Locked") 
end 

справляюсь все нормальные вещи, я хочу, чтобы пользователь мог перемещаться и использовать функциональные возможности компьютера. Но при вызове rednet.receive() он зависает и ожидает входящего сообщения.

Я хочу, чтобы это выполнялось в фоновом режиме и срабатывало только при получении сообщения.

Я пробовал посмотреть документацию, помогает. и решил довести этот вопрос до SO, потому что из-за диапазона доступных Lua Coders.

+0

Документация рекомендует использовать 'Parallel.waitForAny' для ожидания' rednet.receive' в фоновом режиме. –

ответ

0

Команда rednet.receive() может иметь аргумент в своих параметрах и это «Тайм-аут».

Это измеряется в секундах. Он также является поплавком (десятичным), например. 4,50, 1,23. и т. д.

Это означает, что он получит за этот период времени.

Хороший способ достижения того, что вы хотите, чтобы другой компьютер постоянно получать сообщения, а затем выдавая Редстоун сигнал на компьютер вы хотите делать модульный прием и писать что-то вдоль линий

function Check() 
    If rs.getInput("back") then 
    local id, message = rednet.receive(5) 
    print("Receiving Message") 
    end 
end 

другой компьютер будет делать это:

computerid = 50 

id, message = rednet.receive() 
    rs.setOutput("back",true) 
    sleep(1) 
    rednet.send(computerid, message) 
    rs.setOutput("back",false) 

computerid будет равен любым исходный компьютер вы хотите работать идентификационный есть. Вы также должны регулярно использовать функцию Check() при запуске кода. Это не повлияет на компьютер, если сообщение не получено, и в этом случае он получает в течение времени, указанного в параметре «rednet.receive» аргументы.

Надеется, что это было полезно

--EwilDawe

2

http://computercraft.info/wiki/Parallel.waitForAll

что функция, которая будет основна мульти нити программы ... ооочень можно д.о.о. ...

function listen() 
while true do 
    id, msg, distance = rednet.receive() 
    FUNCTION_THAT_RUNS_STUFF(id, msg, distance) 
    sleep(1) 
end 
end 

function main_loop() 
while true do 
    --do your other stuff in here 
end 
end 

--end of file run everything 
parrallel.waitForAll(listen, main_loop) 
0

что я сделал, у меня был 1 компьютер, работающий os.pullEvent, и загрузка других, собирающих информацию и отправляющих ее через rednet, что сделало так, что только o ne pc так застрял, несмотря на то, что другие были довольно необычными, конечно, если бы вы сделали то, что я сделал, вы могли бы обнаружить его ключи и rednet_message и многое другое.