diff --git a/source/birchwood/client/client.d b/source/birchwood/client/client.d index cd78303..2b0bbc1 100644 --- a/source/birchwood/client/client.d +++ b/source/birchwood/client/client.d @@ -71,23 +71,19 @@ public class Client : Thread //TODO: Do something here, tare downs } + // TODO: Investigate public ConnectionInfo getConnInfo() { return connInfo; } - - /** - * User overridable handler functions below - */ - - // TODO: comment /** - * + * Called on reception of a channel message + * * Params: - * fullMessage = - * channel = - * msgBody = + * fullMessage = the channel message in its entirety + * channel = the channel + * msgBody = the body of the message */ public void onChannelMessage(Message fullMessage, string channel, string msgBody) { @@ -95,11 +91,13 @@ public class Client : Thread logger.log("Channel("~channel~"): "~msgBody); } - // TODO: comment /** - * + * Called on reception of a direct message + * * Params: - * message = + * fullMessage = the direct message in its entirety + * nickname = the sender + * msgBody = the body of the message */ public void onDirectMessage(Message fullMessage, string nickname, string msgBody) { @@ -107,11 +105,11 @@ public class Client : Thread logger.log("DirectMessage("~nickname~"): "~msgBody); } - // TODO: comment /** - * + * Called on generic commands + * * Params: - * commandReply = + * commandReply = the generic message */ public void onGenericCommand(Message message) { @@ -119,11 +117,11 @@ public class Client : Thread logger.log("Generic("~message.getCommand()~", "~message.getFrom()~"): "~message.getParams()); } - // TODO: comment /** - * + * Called on command replies + * * Params: - * commandReply = + * commandReply = the command's reply */ public void onCommandReply(Message commandReply) { @@ -135,8 +133,6 @@ public class Client : Thread * User operations (request-response type) */ - // TODO: Add joinChannels(strung[]) - /** * Joins the requested channel * @@ -168,6 +164,75 @@ public class Client : Thread } } + /** + * Joins the requested channels + * + * Params: + * channels = the channels to join + * Throws: + * BirchwoodException on invalid channel name + */ + public void joinChannel(string[] channels) + { + /* If single channel */ + if(channels.length == 1) + { + /* Join the channel */ + joinChannel(channels[0]); + } + /* If multiple channels */ + else if(channels.length > 1) + { + string channelLine = channels[0]; + + /* Ensure valid characters in first channel */ + if(isValidText(channelLine)) + { + //TODO: Add check for # + + /* Append on a trailing `,` */ + channelLine ~= ","; + + for(ulong i = 1; i < channels.length; i++) + { + string currentChannel = channels[i]; + + /* Ensure the character channel is valid */ + if(isValidText(currentChannel)) + { + //TODO: Add check for # + + if(i == channels.length-1) + { + channelLine~=currentChannel; + } + else + { + channelLine~=currentChannel~","; + } + } + else + { + throw new BirchwoodException(BirchwoodException.ErrorType.ILLEGAL_CHARACTERS); + } + } + + /* Join multiple channels */ + Message joinMessage = new Message("", "JOIN", channelLine); + sendMessage(joinMessage); + } + else + { + throw new BirchwoodException(BirchwoodException.ErrorType.ILLEGAL_CHARACTERS); + } + } + /* If no channels provided at all (error) */ + else + { + throw new BirchwoodException(BirchwoodException.ErrorType.EMPTY_PARAMS); + } + } + /** * Parts from a list of channel(s) in one go * @@ -662,25 +727,6 @@ public class Client : Thread receiver.rq(message); } - // /** - // * Sends a message to the server by enqueuing it on - // * the client-side send queue - // * - // * Params: - // * messageOut = the message to send - // */ - // private void sendMessage(string messageOut) - // { - // // TODO: Do message splits here - - - // /* Encode the mesage */ - // ubyte[] encodedMessage = encodeMessage(messageOut); - - // /* Enqueue the message to the send queue */ - // sender.sq(encodedMessage); - // } - /** * Sends a message to the server by enqueuing it on * the client-side send queue. @@ -930,9 +976,11 @@ public class Client : Thread client.joinChannel("#birchwood"); // TODO: Add a joinChannels(string[]) client.joinChannel("#birchwood2"); - client.joinChannel("#birchwoodLeave1"); - client.joinChannel("#birchwoodLeave2"); - client.joinChannel("#birchwoodLeave3"); + + client.joinChannel(["#birchwoodLeave1", "#birchwoodLeave2", "#birchwoodLeave3"]); + // client.joinChannel("#birchwoodLeave1"); + // client.joinChannel("#birchwoodLeave2"); + // client.joinChannel("#birchwoodLeave3"); Thread.sleep(dur!("seconds")(2)); client.command(new Message("", "NAMES", "")); // TODO: add names commdn diff --git a/source/birchwood/client/receiver.d b/source/birchwood/client/receiver.d index 93be2e8..5957b29 100644 --- a/source/birchwood/client/receiver.d +++ b/source/birchwood/client/receiver.d @@ -53,6 +53,13 @@ public final class ReceiverThread : Thread } // TODO: Rename to `receiveQ` + /** + * Enqueues the raw message into the receieve queue + * for eventual processing + * + * Params: + * encodedMessage = the message to enqueue + */ public void rq(ubyte[] encodedMessage) { /* Lock queue */ diff --git a/source/birchwood/client/sender.d b/source/birchwood/client/sender.d index 8f22468..3e70f90 100644 --- a/source/birchwood/client/sender.d +++ b/source/birchwood/client/sender.d @@ -48,6 +48,13 @@ public final class SenderThread : Thread } // TODO: Rename to `sendQ` + /** + * Enqueues the raw message into the send queue + * for eventual sending + * + * Params: + * encodedMessage = the message to enqueue + */ public void sq(ubyte[] encodedMessage) { /* Lock queue */ diff --git a/source/birchwood/protocol/package.d b/source/birchwood/protocol/package.d index 0853c26..733ce7a 100644 --- a/source/birchwood/protocol/package.d +++ b/source/birchwood/protocol/package.d @@ -1,6 +1,7 @@ module birchwood.protocol; public import birchwood.protocol.messages : Message; +public import birchwood.protocol.constants : ReplyType; // TODO: Look how to neaten up (if any) public import birchwood.protocol.formatting; \ No newline at end of file