Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- HouseControl by houseofkraft
- ]]--
- local args = { ... }
- if #args < 1 then
- printError("Usages:")
- printError("housecontrol host")
- printError("housecontrol join <ID>")
- error()
- end
- function pushEvent()
- while true do
- local e = {os.pullEvent()}
- info = {e}
- rednet.send(sid, "event-stc", info)
- end
- end
- function respondRednet()
- while true do
- id, message, info = rednet.receive()
- if message == "ping" then
- rednet.send(id, "pong")
- elseif message == "event-cts" then
- local event = info[1]
- local p2 = info[2]
- local p3 = info[3]
- local p4 = info[4]
- local p5 = info[5]
- -- Usually events don't exceed 4 args, If the events do, feel free to change this
- os.queueEvent(event, p2, p3, p4, p5)
- elseif message == "disconnect" then
- print("The client has disconnected from you.")
- break
- end
- end
- end
- if args[1] == "host" then
- -- Define custom functions
- local oldPrint = print
- local oldWrite = write
- print = function(msg)
- oldPrint(msg)
- info = {msg}
- rednet.send(sid, "print", info)
- end
- write = function(msg)
- oldWrite(msg)
- info = {msg}
- rednet.send(sid, "write", info)
- end
- term.write = function(msg)
- oldWrite(msg)
- info = {msg}
- rednet.send(sid, "write", info)
- end
- term.clear = function()
- oldClear()
- info = {msg}
- rednet.send(sid, "clear")
- end
- while true do
- id, message, info = rednet.receive()
- if message == "connect" then
- local id = info[1]
- if id == os.getComputerID() then
- rednet.send(id, "sucess")
- sid = id
- parallel.waitForAny(pushEvent, respondRednet)
- end
- end
- end
- elseif args[1] == "join" then
- local function listen()
- while true do
- id, message, info = rednet.receive(1)
- if message == "clear" then
- term.clear()
- elseif message == "print" then
- local text = info[1]
- print(tostirng(text))
- elseif message == "write" then
- local text = info[1]
- print(tostirng(text))
- elseif message == "event-stc" then
- local event = info[1]
- local p2 = info[2]
- local p3 = info[3]
- local p4 = info[4]
- local p5 = info[5]
- os.queueEvent(event, p2, p3, p4, p5)
- end
- end
- end
- local function pullEvent()
- while true do
- local e = {os.pullEvent()}
- info = {e}
- rednet.send(sid, "event-cts", info)
- end
- end
- if #args < 2 then
- printError("Usage: housecontrol join <ID>")
- error()
- end
- local sid = args[2]
- info = {sid}
- rednet.send(sid, "connect", info)
- id, message = rednet.receive()
- if message == "sucess" then
- parallel.waitForAll(listen, pullEvent)
- else
- printError("No response!")
- error()
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement