Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- port=8000
- modem={}
- name=os.getComputerID()
- --broadcasts go in form: type, src, dest, step (array of hop names), data
- function openModems()
- n=1
- if peripheral.getType("back")=="modem" then modem[n]=peripheral.wrap("back") n=n+1 print("connected back") end
- if peripheral.getType("top")=="modem" then modem[n]=peripheral.wrap("top") n=n+1 print("connected top") end
- if peripheral.getType("left")=="modem" then modem[n]=peripheral.wrap("left") n=n+1 print("connected left") end
- if peripheral.getType("right")=="modem" then modem[n]=peripheral.wrap("right") n=n+1 print("connected right") end
- for i=1, #modem do
- modem[i].open(port) print("opened "..port.." on modem "..i)
- end
- end
- function broadcast(type, src, dest, dat) --takes type, src, dest, dat
- local packet={}
- packet.type=type
- packet.src=src
- packet.dest=dest
- step={}
- step[1]=name
- packet.step=textutils.serialize(step)
- packet.dat=textutils.serialize(dat)
- local transmit=textutils.serialize(packet)
- for i=1, #modem do
- modem[i].transmit(port, port, transmit) print("transmitted on "..port)
- end
- openModems()
- end
- function receive(type) --returns type, src, dest, step, dat
- local event, mSide, sChannel, rChannel, msg, senderDist = os.pullEvent("modem_message")
- openModems()
- local packet=textutils.unserialize(msg)
- if packet.type==type or type==nil or type==false or type==0 then
- if packet.dest==nil or packet.dest==name then
- return packet.type, packet.src, packet.dest, textutils.unserialize(packet.step), textutils.unserialize(packet.dat)
- end
- end
- print("returning nil")
- return nil
- end
- function setName(n)
- name=n
- end
- function start()
- openModems()
- print("opened modems")
- name=os.getComputerID()
- end
- function contains(array, val)
- local found=false
- for i=1, #array do
- if array[i]==val then found=true end
- end
- return found
- end
- openModems()
- setName(("host"..os.getComputerID()))
- stp={}
- stp[1]=name
- broadcast("name", name, nil, stp, nil)
- while true do
- local type, src, dest, step, dat = receive(nil)
- print("type of broadcast: "..type)
- print("source of broadcast: "..src)
- print("destination of broadcast: "..dest)
- print("Steps of broadcast so far: ")
- for i=1, #step do print(step[i]) end
- print("internal data: "..textutils.serialize(dat))
- if found(step, name) then
- step[(#step+1)]=name
- print("Added self to steps label")
- broadcast("packet", name, nil, step, dat)
- print("resent packets")
- else
- print("Self is in steps, not forwarding (deadloop avoiding)")
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement