-- ##############################
-- msg_sender
-- version 0.6
-- (a paired program: msg_receiver 0.6 http://pastebin.com/ZsGmzz2T)
-- http://hevohevo.hatenablog.com/
rednet.open("right")
local args = {...}
assert(args and #args>0, "msg_sender <receiver_id>")
local receiver_id = tonumber(args[1])
local trans_tbl = {
w="turtle.forward()",
a="turtle.turnLeft(); turtle.forward(); turtle.turnRight()",
s="turtle.back()",
d="turtle.turnRight(); turtle.forward(); turtle.turnLeft()",
space="turtle.up()",
leftShift="turtle.down()",
left="turtle.turnRight()",
right="turtle.turnLeft()",
z="shell.run(\'dance\')", -- let\'s dance!
x="shell.run(\'boring\')", -- run receiver\'s other program
c="myRefuelAll()" -- call receiver\'s function
}
function printResults(sender_id, tbl_results)
local exist_status, run_status, err_msg = unpack(tbl_results)
if exist_status then -- found a function
if run_status then -- success for running
print(" #",sender_id,": ok")
else -- failed with running or doesn\'t reply
if err_msg then
print(" #",sender_id,": (error) ",err_msg)
else
print(" #",sender_id,": no reply")
end
end
else -- not found by wrong string
print(" #",sender_id,": (NotFound) ")
end
end
function interactiveMode()
print(" Start: interactive mode")
write(" > ")
local message = io.read()
print(" Exit: interactive mode")
return message
end
print("Press \'q\' to terminate")
while true do
local event, scancode = os.pullEvent("key")
local keyname = keys.getName(scancode)
local message = trans_tbl[keyname]
if keyname == "enter" and not message then
message = interactiveMode()
end
print(keyname," => ",message or "none")
-- button for terminating
if keyname == "q" or message =="q" then break end
-- send an order message and recieve the results of running
if message then
rednet.send(receiver_id, message)
local sender_id, results, distance = rednet.receive(3)
printResults(sender_id, textutils.unserialize(results))
end
end
print("Terminated")