FireDemonite icon

MailServer

FireDemonite | PRO | 10/01/18 07:19:09 PM UTC | 0 ⭐ | 301 👁️ | Never ⏰ | []
Lua |

6.82 KB

|

None

|

0 👍

/

0 👎

rednet.open("top")
local Users = {}
local Message = {user = "", message = "",subject = "", read = false}
local FileData = {}
local FileTemplate = {}
local ReadMessage = {}
 
local file = fs.open("disk/ClientInfo.txt","r")
Users = textutils.unserialise(file.readAll())
file.close()
w,h = term.getSize()
term.clear()
term.setCursorPos(1,1)
print("ID:"..os.getComputerID())
term.setCursorPos(14,1)
print("----FireMail Server----")
print("Users:")
for i = 1,#Users do
    print(Users[i].name)
end
 
while true do
    FileData = {}
    sendName = ""
    sendID = 0
    sendLoc = ""
    senderName = ""
    senderID = 0
    senderLoc = ""
    ID, msg, dist, protocol = rednet.receive("FireMail")
    message = msg[3]
  --if (msg[3] == "sendMail") then
    for key,value in pairs(Users) do
        --print(value.dLoc)
        if (value.dLoc == nil) then
            for i = 2,7 do
                label = disk.getLabel("drive_"..i)
                if (label ~= nill) then
                    label = string.lower(label)
                    --h = fs.open("disk"..i.."/MailData",fs.exists("disk"..i.."/MailData") and "a" or "w")
                    --h.write(textutils.serialise(FileTemplate))
                    --h.close()
                end
                --print(label)
                --print(value.name)
                if (label == value.name) then
                    Users[key].dLoc = "disk"..i
                    --print(Users[key].dLoc)
                end
            end
        end
        if (msg[4] == "sendMail") then
               if(string.lower(msg[1]) == value.name) then
                sendName = value.name
                sendID = value.id
                sendLoc = value.dLoc
            end
            if(ID == value.id) then
                senderID = value.id
                senderName = value.name
                senderLoc = value.dLoc
            end
        end
    end
  if(msg[4] == "sendMail") then
    if(sendID > 0 ) then
        rednet.send(ID,"Mail Sent!","SCMail")
    else
        rednet.send(ID,"INVALID ADRESS","SCMail")
    end
  end
    if (msg[4] == "sendMail") then
        print(senderName,"->",sendName,":",message)
        --print(sendLoc)
        Message.user = senderName
        Message.message = msg[3]
        Message.subject = msg[2]
        --Message.time = os.clock()
        --print("Message time sent: "..Message.time)
        if (sendID > 0) then
            PlayerMailData = fs.open(sendLoc.."/MailData", "r")
            FileData = textutils.unserialise(PlayerMailData.readAll())
            table.insert(FileData, Message)
            PlayerMailData.close()
            PlayerMailData = fs.open(sendLoc.."/MailData", "w")
            PlayerMailData.write(textutils.serialise(FileData))
            PlayerMailData.close()
        end
    elseif(msg[4] == "getMail") then
        for k,v in pairs(Users) do
            if(v.id == ID and v.dLoc ~= nil) then
                --print(senderLoc)
                senderLoc = v.dLoc
                print("User Location: "..v.dLoc)
                PlayerMailData = fs.open(v.dLoc.."/MailData", "r")
                FileData = textutils.unserialise(PlayerMailData.readAll())
                PlayerMailData.close()
               
              if(FileData[1] ~= nil) then
                for k,sv in pairs(FileData) do
                --this for loop cant find the next one apparently
                    --for sk,tv in pairs(sv) do
                        if (sv.read) then
                        else
                            print("Get mail requested: ID: "..v.id.." Name: "..v.name)
                            --rednet.send(v.id,sv.message,"getMail")
                            --sendingMsg = {name = sv.name, subject = sv.subject,
                            --print(FileData[k].name)
                            --print(sv.subject)
                            --print(sv.message)
                            --sendingmsg = {name = "hi",subject = "lol"}
                            --print(sendingmsg.name)
                            table.insert(ReadMessage, {name = sv.user,subject = sv.subject,message = sv.message})
                            print(ReadMessage[1].name)
                            FileData[k].read = true
                            --print("Data read is now: "..tostring(FileData[k].read))
                        end
                    --end
                end
               
                --print(Users[k].dLoc)
                senderLoc = Users[k].dLoc.."/MailData"
               
              end
              readFileData = {}
              removeMsg = {}
              noMail = false
              for k,v in pairs(FileData) do
                  if(FileData[k].read == true) then
                      readFileData[k] = true
                  else
                      readFileData[k] = false
                  end
              end
              for i = 1,#readFileData do
                  if (readFileData[i] == false) then
                      noMail = false
                  end
              end
              --print("ReadMessage: ")
              --print(ReadMessage[1].name)
              if(ReadMessage[1] ~= nill) then
                  print("Sending Message!")
                  rednet.send(ID, ReadMessage, "getMail")
              end
              --print("Before FOR LOOP")
              for k,v in pairs(FileData) do
                  if(FileData[k].read) then
                      --print("Inserting...")
                      table.insert(removeMsg, k)
                      --print(removeMsg[k])
                  end
              end
              for i = #removeMsg,1,-1 do
                  --print("i = "..i)
                  print(removeMsg[i])
                  if (removeMsg[i] ~= nil) then
                      print("removing "..FileData[i].user.." with Msg: "..FileData[i].message)
                      table.remove(FileData,removeMsg[i])
                  end
              end
              --PMD = fs.open(senderLoc,"w")
              print("LOCATION: ")
              print(v.dLoc)
--              if( FileData[1] ~= nill) then
                  PMD = fs.open(v.dLoc.."/MailData","w")
                  PMD.write(textutils.serialise(FileData))
                  PMD.close()
--              else
--                  PMD = fs.open(senderLoc,"w")
--                  PMD.write(textutils.serialise({""}))
--                  PMD.close()
                  --print(textutils.serialise(FileData))
--              end
              message = {name = "Server", subject = "NoReply", message = "No new Mails"}
              if(FileData[1] == nil or noMail) then
                  print("Sent NoReply")
                  rednet.send(v.id,{message},"getMail")
              end
            end
        end
    end
end

Comments