97 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
local sides = peripheral.getNames()
 | 
						|
for i = 1, #sides do
 | 
						|
    if peripheral.getType(sides[i]) == "modem" then
 | 
						|
        modemSide = sides[i]
 | 
						|
        break
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
rednet.open(modemSide)
 | 
						|
 | 
						|
function dump(o)
 | 
						|
    if o == nil then
 | 
						|
        return ""
 | 
						|
    end
 | 
						|
 | 
						|
    if type(o) == 'table' then
 | 
						|
        local s = '{ '
 | 
						|
        for k,v in pairs(o) do
 | 
						|
            if type(k) ~= 'number' then k = '"'..k..'"' end
 | 
						|
            s = s .. '['..k..'] = ' .. dump(v) .. ','
 | 
						|
        end
 | 
						|
        return s .. '} '
 | 
						|
    end
 | 
						|
 | 
						|
    return tostring(o)
 | 
						|
end
 | 
						|
 | 
						|
function split(s)
 | 
						|
    chunks = {}
 | 
						|
 | 
						|
    for substring in s:gmatch("%S+") do
 | 
						|
       table.insert(chunks, substring)
 | 
						|
    end
 | 
						|
    return chunks
 | 
						|
end
 | 
						|
 | 
						|
function recv()
 | 
						|
    while true do
 | 
						|
        local id, data = rednet.receive()
 | 
						|
        print("Message from " .. id .. ": " .. dump(data))
 | 
						|
        write("> ")
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function move_control(turtle_id)
 | 
						|
    while true do
 | 
						|
        local event, param = os.pullEvent("key")
 | 
						|
        if event == "key" then
 | 
						|
            -- print("Got key: " .. param)
 | 
						|
            if param == 14 then
 | 
						|
                break
 | 
						|
            elseif param == 17 then
 | 
						|
                rednet.send(turtle_id, {"eval", "turtle.forward()"})
 | 
						|
            elseif param == 30 then
 | 
						|
                rednet.send(turtle_id, {"eval", "turtle.turnLeft()"})
 | 
						|
            elseif param == 31 then
 | 
						|
                rednet.send(turtle_id, {"eval", "turtle.back()"})
 | 
						|
            elseif param == 32 then
 | 
						|
                rednet.send(turtle_id, {"eval", "turtle.turnRight()"})
 | 
						|
            elseif param == 57 then
 | 
						|
                rednet.send(turtle_id, {"eval", "turtle.up()"})
 | 
						|
            elseif param == 29 then
 | 
						|
                rednet.send(turtle_id, {"eval", "turtle.down()"})
 | 
						|
            end
 | 
						|
        end
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function control()
 | 
						|
    while true do
 | 
						|
        write("> ")
 | 
						|
        local input = split(read())
 | 
						|
        -- print(dump(input))
 | 
						|
        if input[1] == 'lookup' then
 | 
						|
            print(rednet.lookup("rmm", input[2]))
 | 
						|
        elseif input[1] == 'ping' then
 | 
						|
            rednet.send(tonumber(input[2]), 'ping')
 | 
						|
        elseif input[1] == 'eval' then
 | 
						|
            rednet.send(tonumber(input[2]), {"eval", input[3]})
 | 
						|
        elseif input[1] == 'send' then
 | 
						|
            rednet.send(tonumber(input[2]), input[3])
 | 
						|
        elseif input[1] == 'move' then
 | 
						|
            move_control(tonumber(input[2]))
 | 
						|
        else
 | 
						|
            print("Unknown command")
 | 
						|
        end
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
rednet.host("rmm", "master")
 | 
						|
 | 
						|
while true do
 | 
						|
    parallel.waitForAny(recv, control)
 | 
						|
end
 | 
						|
 | 
						|
rednet.close(modemSide)
 |