Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local configFile = ".emailServerConfig"
- local config = {
- modem = "top",
- server = 0,
- users = {}
- }
- local function waitForSpace()
- local key = false
- while not key do
- local event, _key = os.pullEvent("key")
- key = (_key == 57)
- end
- end
- local function saveConfig()
- local handle = fs.open(configFile, "w")
- handle.write(textutils.serialize(config))
- handle.close()
- end
- local function loadConfig()
- local handle = fs.open(configFile, "r")
- if not handle then
- saveConfig() -- saves default config
- handle = fs.open(configFile, "r")
- end
- config = textutils.unserialize(handle.readAll())
- handle.close()
- end
- local function isValidSide(_side)
- local rsSides = rs.getSides()
- local valid = false
- for key, value in pairs(rsSides) do valid = (value == _side) or valid end
- return valid
- end
- local function configureModem()
- term.clear()
- term.setCursorPos(1, 1)
- print("Error: No modem on side '" .. config.modem .. "'")
- local side = false
- while not side do
- print("Enter modem side:")
- local _side = read()
- if isValidSide(_side) then
- if peripheral.getType(_side) == "modem" then
- print("Configuration updated")
- side = _side
- print("Press Space to continue...")
- waitForSpace()
- else
- print("There is no modem on side '" .. _side .. "'")
- end
- else
- print("Invalid side")
- end
- end
- config.modem = side
- saveConfig()
- end
- loadConfig()
- if isValidSide(config.modem) then
- if peripheral.getType(config.modem) == "modem" then
- rednet.open(config.modem)
- else
- configureModem()
- rednet.open(config.modem)
- end
- else
- configureModem()
- rednet.open(config.modem)
- end
- term.clear()
- term.setCursorPos(1, 1)
- print("Email server is running")
- while true do
- local event, sender, message = os.pullEvent("rednet_message")
- print("\n#" .. sender .. ": " .. message)
- local fullMessage = textutils.unserialize(message)
- if fullMessage.ecommand == "send" then
- local recs = 0
- for key, value in pairs(config.users) do
- if value == fullMessage.user then
- rednet.send(key, textutils.serialize({from = sender, message = fullMessage.message}))
- recs = recs + 1
- end
- end
- if recs == 0 then
- rednet.send(sender, textutils.serialize({status = "invalid_username"}))
- else
- rednet.send(sender, textutils.serialize({status = "ok"}))
- end
- end
- if fullMessage.ecommand == "create" then
- local inuse = false
- for key, value in pairs(config.users) do
- if value == fullMessage.username then inuse = true end
- end
- if inuse then
- rednet.send(sender, textutils.serialize({status = "username_in_use"}))
- else
- config.users[sender] = fullMessage.username
- saveConfig()
- rednet.send(sender, textutils.serialize({status = "ok"}))
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement