diff --git a/source/davinci/c2s/channels.d b/source/davinci/c2s/channels.d index 00c97d5..706923b 100644 --- a/source/davinci/c2s/channels.d +++ b/source/davinci/c2s/channels.d @@ -66,8 +66,10 @@ public final class ChannelEnumerateReply : Command } } +import davinci.base.components : Validatable; + // NOTE: Can be used for reception AND request (sending) -public final class ChannelMessage : Command +public final class ChannelMessage : Command, Validatable { private string[] to; private string from; @@ -87,6 +89,11 @@ public final class ChannelMessage : Command this.data = data; } + public void setFrom(string from) + { + this.from = from; + } + public void setTo(string[] to) { foreach(string curTo; to) @@ -140,9 +147,47 @@ public final class ChannelMessage : Command { return getStatus() == Status.GOOD; } + + public bool validate(ref string reason) + { + // If this is a request + if(this.status == Status.UNSET) + { + if(to.length > 0 && from.length > 0) + { + return true; + } + else + { + reason = "Recipients list is empty or the from field is empty"; + return false; + } + } + + // TODO: Implement the rest + return false; + } } +unittest +{ + string reason; + + // Valid case of a CHANNEL_SEND_MESSAGE + ChannelMessage chanMesg = new ChannelMessage(); + chanMesg.setTo(["deavmi", "gustav"]); + chanMesg.setFrom("testUser"); + assert(chanMesg.validate(reason)); + + // In-valid case of a CHANNEL_SEND_MESSAGE + chanMesg = new ChannelMessage(); + chanMesg.setTo(cast(string[])[]); + chanMesg.setFrom("testUser"); + assert(!chanMesg.validate(reason)); + assert(reason.length > 0); +} + public enum MembershipMode { JOIN,