From 433b4dca6f27c99568e4eb268332ac28ed5bacf9 Mon Sep 17 00:00:00 2001 From: "Tristan B. Kildaire" Date: Thu, 18 Jun 2020 15:58:59 +0200 Subject: [PATCH] Reworked mail message handling. Implemented mail delivery on (for now) port 6969 (therefore all servers mjust listen on it). Reworked mail delivery (as in receiving as the server). --- source/client/client.d | 43 ++++++++++++++++++++------------- source/client/mail.d | 54 +++++++++++++++++++++++++----------------- 2 files changed, 59 insertions(+), 38 deletions(-) diff --git a/source/client/client.d b/source/client/client.d index 0ff757c..26986a6 100644 --- a/source/client/client.d +++ b/source/client/client.d @@ -132,7 +132,7 @@ public final class ButterflyClient : Thread Folder storeFolder = new Folder(mailbox, commandBlock["request"]["folder"].str()); /* Store the message in the mailbox */ - storeMail(storeMail, mailBlock); + storeMail(storeFolder, mailBlock); } else { @@ -145,8 +145,7 @@ public final class ButterflyClient : Thread if(connectionType == ClientType.SERVER) { /* TODO: Implement me */ - Mail mail = new Mail(commandBlock["request"]["mail"]); - deliverMail(mail); + deliverMail(commandBlock["request"]["mail"]); } else { @@ -312,10 +311,14 @@ public final class ButterflyClient : Thread /** * Delivers the mail to the local users */ - private void deliverMail(Mail mail) + private void deliverMail(JSONValue mailBlock) { /* Get a list of the recipients of the mail message */ - string[] recipients = mail.getRecipients(); + string[] recipients; + foreach(JSONValue recipient; mailBlock["recipients"].array()) + { + recipients ~= recipient.str(); + } /* Store the mail to each of the recipients */ foreach(string recipient; recipients) @@ -341,10 +344,10 @@ public final class ButterflyClient : Thread Mailbox userMailbox = new Mailbox(username); /* Get the Inbox folder */ - // Folder inboxFolder = new Folder(userMailbox, null, "Inbox"); + Folder inboxFolder = new Folder(userMailbox, "Inbox"); /* Store the message in their Inbox folder */ - // userMailbox.storeMessage(inboxFolder, mail); + Mail.createMail(userMailbox, inboxFolder, mailBlock); writeln("Stored mail message"); } @@ -355,10 +358,14 @@ public final class ButterflyClient : Thread * Sends the mail message `mail` to the servers * listed in the recipients field. */ - private void sendMail(Mail mail) + private void sendMail(JSONValue mailBlock) { /* Get a list of the recipients of the mail message */ - string[] recipients = mail.getRecipients(); + string[] recipients; + foreach(JSONValue recipient; mailBlock["recipients"].array()) + { + recipients ~= recipient.str(); + } /* Send the mail to each of the recipients */ foreach(string recipient; recipients) @@ -384,10 +391,10 @@ public final class ButterflyClient : Thread Mailbox userMailbox = new Mailbox(username); /* Get the Inbox folder */ - // Folder inboxFolder = new Folder(userMailbox, null, "Inbox"); + Folder inboxFolder = new Folder(userMailbox, "Inbox"); /* Store the message in their Inbox folder */ - // userMailbox.storeMessage(inboxFolder, mail); + Mail.createMail(userMailbox, inboxFolder, mailBlock); } else { @@ -399,11 +406,15 @@ public final class ButterflyClient : Thread */ JSONValue messageBlock; messageBlock["command"] = "deliverMail"; - JSONValue mailBlock; - mailBlock["recipients"] = null; /* TODO: Get JSON array of strings */ - mailBlock["message"] = mail.getMessage(); - JSONValue requestBlock; - requestBlock["mail"] = mailBlock; + messageBlock["request"]["mail"] = mailBlock; + + import std.socket : AddressFamily, SocketType, ProtocolType, parseAddress, Address; + + /* Deliver the mail to the remote server */ + Socket remoteServer = new Socket(AddressFamily.INET, SocketType.STREAM, ProtocolType.TCP); + remoteServer.connect(parseAddress(domain, 6969)); + sendMessage(remoteServer, cast(byte[])toJSON(messageBlock)); + writeln("Message delivered to server "~domain); } writeln("Sent mail message"); diff --git a/source/client/mail.d b/source/client/mail.d index 658eabb..327e66e 100644 --- a/source/client/mail.d +++ b/source/client/mail.d @@ -83,6 +83,11 @@ public final class Mailbox /* TODO: Store the message in file `filename` */ } + public void deleteMessage(Folder folder, string mailID) + { + /* TODO: Implement me */ + } + public void deleteMailbox() { /* TODO: Run deletion on all folders */ @@ -229,11 +234,20 @@ public final class Folder public final class Mail { - /** - * The associated Mailbox - */ + /** + * The associated Mailbox + */ + private Mailbox mailbox; - private string id; + /** + * The associated Folder + */ + private Folder folder; + + /** + * The mail message's name + */ + private string mailID; public static Mail createMail(Mailbox mailbox, Folder folder, JSONValue mailBlock) { @@ -261,28 +275,16 @@ public final class Mail return "fhjdkshfjsdgfjk"; } - this(Mailbox mailbox, Folder folder, string id) + this(Mailbox mailbox, Folder folder, string mailID) { - - this.id = id; - - /* TODO: Fetch mail here, or rather in a method */ + this.mailbox = mailbox; + this.folder = folder; + this.mailID = mailID; } - this(JSONValue mailBlock) + private void deleteMessage() { - /* TODO: */ - this.messageBlock = mailBlock["message"]; - - /* Populate the array of recipients */ - JSONValue[] recipientArray = mailBlock["recipients"].array(); - foreach(JSONValue recipient; recipientArray) - { - recipients ~= recipient.str(); - } - - /* Perform a sanity check on the mail message */ - sanityCheck(); + mailbox.deleteMessage(folder, mailID); } private void sanityCheck() @@ -292,12 +294,20 @@ public final class Mail public string[] getRecipients() { + string[] recipients; + + /* TODO: Implement me */ + return recipients; } public JSONValue getMessage() { + JSONValue messageBlock; + + /* TODO: Implement me */ + return messageBlock; } } \ No newline at end of file