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