Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # pastebin get 9bf3dHx4 named.lua
- peripheral.find("modem", rednet.open)
- os.setComputerLabel("dns-server")
- filename = "dns.db"
- computers = {}
- rows = 1
- function readDBfromFileToRAM()
- local file = fs.open(filename, "r")
- if file then
- local restored = file.readAll()
- file.close()
- return textutils.unserialise(restored)
- end
- return nil
- end
- function writeToDB(id,name)
- --save to array
- computers[rows] = {}
- computers[rows][1] = tostring(id)
- computers[rows][2] = name
- rows = rows + 1
- --save to file
- local file = fs.open(filename,"w")
- file.write(textutils.serialize(computers))
- file.close()
- end
- function searchInDB(id,name)
- for i=1,#computers do
- if (computers[i][1] == id) or (computers[i][2] == name) then
- print(("already have client %s in database"):format(computers[i][2]))
- return
- end
- end
- writeToDB(id, name)
- print(("registered id: %d with name %s"):format(id, name))
- end
- function querryDB(searchType,target)
- for i=1,#computers do
- if (searchType == "name") and (computers[i][2] == target) then
- return computers[i][1]
- end
- if (searchType == "id") and (computers[i][1] == target) then
- return computers[i][2]
- end
- end
- return "not found"
- end
- function listenForRegister()
- while true do
- local id,name = rednet.receive("dns-register")
- searchInDB(id, name)
- end
- end
- function listenForQuerry()
- while true do
- id, request = rednet.receive("dns-querry")
- print(("client: %d asking for type: %s target %s"):format(id, request[1], request[2]))
- result = querryDB(request[1], request[2])
- rednet.send(id, result, "dns-answer")
- end
- end
- --RUNTIME
- ---------------------------
- --read saved database to ram
- restoredDatabase = readDBfromFileToRAM()
- if restoredDatabase then
- computers = restoredDatabase
- rows = #computers + 1
- end
- --write own name to db
- searchInDB(os.computerID(), os.computerLabel())
- --parallel start two listen jobs
- parallel.waitForAny(listenForRegister, listenForQuerry)
- --this should never be reached
- print("Somehow the DNS server stopped")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement