Advertisement
Stiepen

printserver

Sep 10th, 2012
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.04 KB | None | 0 0
  1. local commands = {--[[getCursorPos = 0, getPaperLevel = 0, getPageSize = 0, getCursorPos = 0--]]setCursorPos = 2, newPage = 0, write = 1, setPageTitle = 1, endPage = 0}
  2. local cfg = {}
  3. local printer
  4. local spooler = {}
  5.  
  6. function printUsage()
  7.   print("Usage:")
  8.   print("printserver")
  9. end
  10.  
  11. function packet(iType, id, cmd, data, to)
  12.   rednet.send(to, textutils.serialize({dataroot = {["type"] = iType, packetid = id, cmd = cmd, data = data}}))
  13. end
  14.  
  15. function errpacket(err, id, to, _cmd)
  16.   packet(5, id, _cmd, err, to)
  17. end
  18.  
  19. function printhandler(tPrint, sender)
  20.   if not tPrint then return end
  21.   if not tPrint['dataroot'] then return end
  22.   tPrint = tPrint['dataroot']
  23.   if tPrint['type'] == 1 then
  24.     if spooler[tPrint.packetid] then
  25.       errpacket("Invalid packetid", tPrint.packetid, sender, 1)
  26.     else
  27.       packet(6, tPrint.packetid, 1, "Print initialized. please send commands.", sender)
  28.       spooler[tPrint.packetid] = {finished = false, printcommands = {}}
  29.     end
  30.   elseif tPrint['type'] == 2 then
  31.     if spooler[tPrint.packetid] then
  32.       if spooler[tPrint.packetid]['finished'] then
  33.         errpacket("Print request already finished.", tPrint.packetid, sender, 2)
  34.       else
  35.         packet(6, tPrint.packetid, 2, "Your print request is now ready to print. it will be printed soon.", sender)
  36.       end
  37.     else
  38.       errpacket("This request does not exist.", tPrint.packetid, sender, 2)
  39.     end
  40.   elseif tPrint['type'] == 3 then
  41.     if spooler[tPrint.packetid] == nil then
  42.       errpacket("Invalid packetid", tPrint.packetid, sender, 3)
  43.     elseif spooler[tPrint.packetid].finished then
  44.       errpacket("Packet already finished.", tPrint.packetid, sender, 3)
  45.     elseif commands[tPrint.cmd] == nil then
  46.       errpacket("Unknown command: "..tPrint.cmd, tPrint.packetid, sender)
  47.     else
  48.       local np = commands[tPrint['cmd']]
  49.       if np ~= #tPrint.data then
  50.         errpacket("Wrong param count for "..tPrint['cmd'], tPrint.packetid, sender)
  51.       else
  52.         table.insert(spooler[tPrint.packetid]['printcommands'], {cmd = tPrint['cmd'], p1 = data[1], p2 = data[2]})
  53.         packet(6, tPrint.packetid, 3, "Added to command list", sender)
  54.       end
  55.     end
  56.   end
  57. end
  58.  
  59. function server()
  60.   print ("serversta")
  61.   while true do
  62.     event, p1, p2, p3 = os.pullEvent("rednet_message")
  63.     if event == "rednet_message" then
  64.       printhandler(textutils.unserialize(p2), p1)
  65.     end
  66.   end
  67.   print ("serverend")
  68. end
  69.  
  70. function printerthread()
  71.   print ("printersta")
  72.   while true do
  73.     for k, v in pairs(spooler) do
  74.       if v.finished then
  75.         for _, v2 in ipairs(v.printcommands) do
  76.           printer[v2.cmd](v2.p1, v2.p2)
  77.         end
  78.         spooler[k] = nil
  79.       end
  80.     end
  81.     sleep(0.01)
  82.   end
  83.   print ("printerend")
  84. end
  85.  
  86. function main()
  87.   cfg = {
  88.     ["printer.side"] = "left",
  89.     ["modem.side"] = "right",
  90.   }
  91.   cfg = config.load("cfg/printserver.conf", cfg, true)
  92.   rednet.open(cfg["modem.side"])
  93.   printer = peripheral.wrap(cfg["printer.side"])
  94.   parallel.waitForAny(printerthread, server)
  95. end
  96. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement