Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local commands = {--[[getCursorPos = 0, getPaperLevel = 0, getPageSize = 0, getCursorPos = 0--]]setCursorPos = 2, newPage = 0, write = 1, setPageTitle = 1, endPage = 0}
- local cfg = {}
- local printer
- local spooler = {}
- function printUsage()
- print("Usage:")
- print("printserver")
- end
- function packet(iType, id, cmd, data, to)
- rednet.send(to, textutils.serialize({dataroot = {["type"] = iType, packetid = id, cmd = cmd, data = data}}))
- end
- function errpacket(err, id, to, _cmd)
- packet(5, id, _cmd, err, to)
- end
- function printhandler(tPrint, sender)
- if not tPrint then return end
- if not tPrint['dataroot'] then return end
- tPrint = tPrint['dataroot']
- if tPrint['type'] == 1 then
- if spooler[tPrint.packetid] then
- errpacket("Invalid packetid", tPrint.packetid, sender, 1)
- else
- packet(6, tPrint.packetid, 1, "Print initialized. please send commands.", sender)
- spooler[tPrint.packetid] = {finished = false, printcommands = {}}
- end
- elseif tPrint['type'] == 2 then
- if spooler[tPrint.packetid] then
- if spooler[tPrint.packetid]['finished'] then
- errpacket("Print request already finished.", tPrint.packetid, sender, 2)
- else
- packet(6, tPrint.packetid, 2, "Your print request is now ready to print. it will be printed soon.", sender)
- end
- else
- errpacket("This request does not exist.", tPrint.packetid, sender, 2)
- end
- elseif tPrint['type'] == 3 then
- if spooler[tPrint.packetid] == nil then
- errpacket("Invalid packetid", tPrint.packetid, sender, 3)
- elseif spooler[tPrint.packetid].finished then
- errpacket("Packet already finished.", tPrint.packetid, sender, 3)
- elseif commands[tPrint.cmd] == nil then
- errpacket("Unknown command: "..tPrint.cmd, tPrint.packetid, sender)
- else
- local np = commands[tPrint['cmd']]
- if np ~= #tPrint.data then
- errpacket("Wrong param count for "..tPrint['cmd'], tPrint.packetid, sender)
- else
- table.insert(spooler[tPrint.packetid]['printcommands'], {cmd = tPrint['cmd'], p1 = data[1], p2 = data[2]})
- packet(6, tPrint.packetid, 3, "Added to command list", sender)
- end
- end
- end
- end
- function server()
- print ("serversta")
- while true do
- event, p1, p2, p3 = os.pullEvent("rednet_message")
- if event == "rednet_message" then
- printhandler(textutils.unserialize(p2), p1)
- end
- end
- print ("serverend")
- end
- function printerthread()
- print ("printersta")
- while true do
- for k, v in pairs(spooler) do
- if v.finished then
- for _, v2 in ipairs(v.printcommands) do
- printer[v2.cmd](v2.p1, v2.p2)
- end
- spooler[k] = nil
- end
- end
- sleep(0.01)
- end
- print ("printerend")
- end
- function main()
- cfg = {
- ["printer.side"] = "left",
- ["modem.side"] = "right",
- }
- cfg = config.load("cfg/printserver.conf", cfg, true)
- rednet.open(cfg["modem.side"])
- printer = peripheral.wrap(cfg["printer.side"])
- parallel.waitForAny(printerthread, server)
- end
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement