Advertisement
LBPHacker

Email server (for dexter9)

Feb 24th, 2013
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.62 KB | None | 0 0
  1. local configFile = ".emailServerConfig"
  2. local config = {
  3.     modem = "top",
  4.     server = 0,
  5.     users = {}
  6. }
  7.  
  8. local function waitForSpace()
  9.     local key = false
  10.     while not key do
  11.         local event, _key = os.pullEvent("key")
  12.         key = (_key == 57)
  13.     end
  14. end
  15.  
  16. local function saveConfig()
  17.     local handle = fs.open(configFile, "w")
  18.     handle.write(textutils.serialize(config))
  19.     handle.close()
  20. end
  21.  
  22. local function loadConfig()
  23.     local handle = fs.open(configFile, "r")
  24.     if not handle then
  25.         saveConfig() -- saves default config
  26.         handle = fs.open(configFile, "r")
  27.     end
  28.     config = textutils.unserialize(handle.readAll())
  29.     handle.close()
  30. end
  31.  
  32. local function isValidSide(_side)
  33.     local rsSides = rs.getSides()
  34.     local valid = false
  35.     for key, value in pairs(rsSides) do valid = (value == _side) or valid end
  36.     return valid
  37. end
  38.  
  39. local function configureModem()
  40.     term.clear()
  41.     term.setCursorPos(1, 1)
  42.     print("Error: No modem on side '" .. config.modem .. "'")
  43.     local side = false
  44.     while not side do
  45.         print("Enter modem side:")
  46.         local _side = read()
  47.         if isValidSide(_side) then
  48.             if peripheral.getType(_side) == "modem" then
  49.                 print("Configuration updated")
  50.                 side = _side
  51.                 print("Press Space to continue...")
  52.                 waitForSpace()
  53.             else
  54.                 print("There is no modem on side '" .. _side .. "'")
  55.             end
  56.         else
  57.             print("Invalid side")
  58.         end
  59.     end
  60.     config.modem = side
  61.     saveConfig()
  62. end
  63.  
  64. loadConfig()
  65. if isValidSide(config.modem) then
  66.     if peripheral.getType(config.modem) == "modem" then
  67.         rednet.open(config.modem)
  68.     else
  69.         configureModem()
  70.         rednet.open(config.modem)
  71.     end
  72. else
  73.     configureModem()
  74.     rednet.open(config.modem)
  75. end
  76.  
  77. term.clear()
  78. term.setCursorPos(1, 1)
  79. print("Email server is running")
  80.  
  81. while true do
  82.     local event, sender, message = os.pullEvent("rednet_message")
  83.     print("\n#" .. sender .. ": " .. message)
  84.     local fullMessage = textutils.unserialize(message)
  85.     if fullMessage.ecommand == "send" then
  86.         local recs = 0
  87.         for key, value in pairs(config.users) do
  88.             if value == fullMessage.user then
  89.                 rednet.send(key, textutils.serialize({from = sender, message = fullMessage.message}))
  90.                 recs = recs + 1
  91.             end
  92.         end
  93.         if recs == 0 then
  94.             rednet.send(sender, textutils.serialize({status = "invalid_username"}))
  95.         else
  96.             rednet.send(sender, textutils.serialize({status = "ok"}))
  97.         end
  98.     end
  99.     if fullMessage.ecommand == "create" then
  100.         local inuse = false
  101.         for key, value in pairs(config.users) do
  102.             if value == fullMessage.username then inuse = true end
  103.         end
  104.         if inuse then
  105.             rednet.send(sender, textutils.serialize({status = "username_in_use"}))
  106.         else
  107.             config.users[sender] = fullMessage.username
  108.             saveConfig()
  109.             rednet.send(sender, textutils.serialize({status = "ok"}))
  110.         end
  111.     end
  112. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement