From e48560fdce3489b8a93e8a4ac0f359b1d76af300 Mon Sep 17 00:00:00 2001 From: achmizs Date: Tue, 12 Jan 2016 14:55:24 -0500 Subject: [PATCH] Modify delegate methods to send self with message The methods declared in IRCClientSessionDelegate and IRCClientChannelDelegate now have an additional parameter, for the session or the channel to send a reference to itself. This is in order that a single delegate object may manage multiple sessions or channels, and disambiguate between them when receiving messages. --- IRCClient/IRCClientChannel.m | 16 ++++---- IRCClient/IRCClientChannelDelegate.h | 18 +++++---- IRCClient/IRCClientSession.m | 34 ++++++++-------- IRCClient/IRCClientSessionDelegate.h | 60 ++++++++++++++++++---------- 4 files changed, 73 insertions(+), 55 deletions(-) diff --git a/IRCClient/IRCClientChannel.m b/IRCClient/IRCClientChannel.m index cb5192b..69bb88a 100644 --- a/IRCClient/IRCClientChannel.m +++ b/IRCClient/IRCClientChannel.m @@ -148,44 +148,44 @@ - (void)userJoined:(NSData *)nick { - [_delegate userJoined:nick]; + [_delegate userJoined:nick channel:self]; } - (void)userParted:(NSData *)nick withReason:(NSData *)reason us:(BOOL)wasItUs { - [_delegate userParted:nick withReason:reason us:wasItUs]; + [_delegate userParted:nick channel:self withReason:reason us:wasItUs]; } - (void)modeSet:(NSData *)mode withParams:(NSData *)params by:(NSData *)nick { - [_delegate modeSet:mode withParams:params by:nick]; + [_delegate modeSet:mode forChannel:self withParams:params by:nick]; } - (void)topicSet:(NSData *)topic by:(NSData *)nick { _topic = topic; - [_delegate topicSet:topic by:nick]; + [_delegate topicSet:topic forChannel:self by:nick]; } - (void)userKicked:(NSData *)nick withReason:(NSData *)reason by:(NSData *)byNick us:(BOOL)wasItUs { - [_delegate userKicked:nick withReason:reason by:byNick us:wasItUs]; + [_delegate userKicked:nick fromChannel:self withReason:reason by:byNick us:wasItUs]; } - (void)messageSent:(NSData *)message byUser:(NSData *)nick { - [_delegate messageSent:message byUser:nick]; + [_delegate messageSent:message byUser:nick onChannel:self]; } - (void)noticeSent:(NSData *)notice byUser:(NSData *)nick { - [_delegate noticeSent:notice byUser:nick]; + [_delegate noticeSent:notice byUser:nick onChannel:self]; } - (void)actionPerformed:(NSData *)action byUser:(NSData *)nick { - [_delegate actionPerformed:action byUser:nick]; + [_delegate actionPerformed:action byUser:nick onChannel:self]; } @end diff --git a/IRCClient/IRCClientChannelDelegate.h b/IRCClient/IRCClientChannelDelegate.h index 834ec49..8451486 100644 --- a/IRCClient/IRCClientChannelDelegate.h +++ b/IRCClient/IRCClientChannelDelegate.h @@ -28,6 +28,8 @@ * object may be supplied instead of the given parameter. */ +@class IRCClientChannel; + @protocol IRCClientChannelDelegate /** When a client joins this channel, the userJoined event is fired. Note that @@ -39,7 +41,7 @@ * * @param nick The nickname of the user that joined the channel. */ -- (void)userJoined:(NSData *)nick; +- (void)userJoined:(NSData *)nick channel:(IRCClientChannel *)sender; /** When an IRC client parts a channel you are connect to, you will see * an onPart event. You will also see this event when you part a channel. @@ -48,7 +50,7 @@ * @param reason (optional) The reason, if any, that the user gave for leaving. * @param wasItUs (required) Was it us who parted, or another user? */ -- (void)userParted:(NSData *)nick withReason:(NSData *)reason us:(BOOL)wasItUs; +- (void)userParted:(NSData *)nick channel:(IRCClientChannel *)sender withReason:(NSData *)reason us:(BOOL)wasItUs; /** Received when an IRC client changes the channel mode. What modes are available * for a given channel is an implementation detail for each server. @@ -57,14 +59,14 @@ * @param params any parameters with the mode (such as channel key). * @param nick the nickname of the IRC client that changed the mode. */ -- (void)modeSet:(NSData *)mode withParams:(NSData *)params by:(NSData *)nick; +- (void)modeSet:(NSData *)mode forChannel:(IRCClientChannel *)sender withParams:(NSData *)params by:(NSData *)nick; /** Received when the topic is changed for the channel. * * @param aTopic The new topic of the channel. * @param nick Nickname of the IRC client that changed the topic. */ -- (void)topicSet:(NSData *)topic by:(NSData *)nick; +- (void)topicSet:(NSData *)topic forChannel:(IRCClientChannel *)sender by:(NSData *)nick; /** Received when an IRC client is kicked from a channel. * @@ -73,7 +75,7 @@ * @param byNick nickname of the client that performed the kick command * @param wasItUs Was it us who got kicked, or another user? */ -- (void)userKicked:(NSData *)nick withReason:(NSData *)reason by:(NSData *)byNick us:(BOOL)wasItUs; +- (void)userKicked:(NSData *)nick fromChannel:(IRCClientChannel *)sender withReason:(NSData *)reason by:(NSData *)byNick us:(BOOL)wasItUs; /** Received when an IRC client sends a public PRIVMSG to the channel. Note that the * user may not necessarily be required to be on the channel to send a message @@ -82,7 +84,7 @@ * @param message the message sent to the channel. * @param nick the nickname of the IRC client that sent the message. */ -- (void)messageSent:(NSData *)message byUser:(NSData *)nick; +- (void)messageSent:(NSData *)message byUser:(NSData *)nick onChannel:(IRCClientChannel *)sender; /** Received when an IRC client sends a public NOTICE to the channel. Note that * the user may not necessarily be required to be on the channel to send a notice to @@ -92,13 +94,13 @@ * @param notice the notice sent to the channel. * @param nick the nickname of the IRC client that sent the notice. */ -- (void)noticeSent:(NSData *)notice byUser:(NSData *)nick; +- (void)noticeSent:(NSData *)notice byUser:(NSData *)nick onChannel:(IRCClientChannel *)sender; /** Received when an IRC client sends a CTCP ACTION message to the channel. * * @param action the action message sent to the channel. * @param nick the nickname of the IRC client that sent the message. */ -- (void)actionPerformed:(NSData *)action byUser:(NSData *)nick; +- (void)actionPerformed:(NSData *)action byUser:(NSData *)nick onChannel:(IRCClientChannel *)sender; @end diff --git a/IRCClient/IRCClientSession.m b/IRCClient/IRCClientSession.m index 90c119a..f383147 100644 --- a/IRCClient/IRCClientSession.m +++ b/IRCClient/IRCClientSession.m @@ -314,7 +314,7 @@ static NSDictionary* ircNumericCodeList; - (void)connectionSucceeded { - [_delegate connectionSucceeded]; + [_delegate connectionSucceeded:self]; } - (void)nickChangedFrom:(NSData *)oldNick to:(NSData *)newNick @@ -324,17 +324,17 @@ static NSDictionary* ircNumericCodeList; if ([_nickname isEqualToData:oldNickOnly]) { _nickname = newNick; - [_delegate nickChangedFrom:oldNickOnly to:newNick own:YES]; + [_delegate nickChangedFrom:oldNickOnly to:newNick own:YES session:self]; } else { - [_delegate nickChangedFrom:oldNickOnly to:newNick own:NO]; + [_delegate nickChangedFrom:oldNickOnly to:newNick own:NO session:self]; } } - (void)userQuit:(NSData *)nick withReason:(NSData *)reason { - [_delegate userQuit:nick withReason:reason]; + [_delegate userQuit:nick withReason:reason session:self]; } - (void)userJoined:(NSData *)nick channel:(NSData *)channelName @@ -348,7 +348,7 @@ static NSDictionary* ircNumericCodeList; IRCClientChannel* newChannel = [[IRCClientChannel alloc] initWithName:channelName andIRCSession:_irc_session]; _channels[channelName] = newChannel; - [_delegate joinedNewChannel:newChannel]; + [_delegate joinedNewChannel:newChannel session:self]; } else { @@ -386,7 +386,7 @@ static NSDictionary* ircNumericCodeList; - (void)modeSet:(NSData *)mode by:(NSData *)nick { - [_delegate modeSet:mode by:nick]; + [_delegate modeSet:mode by:nick session:self]; } - (void)topicSet:(NSData *)newTopic forChannel:(NSData *)channelName by:(NSData *)nick @@ -422,17 +422,17 @@ static NSDictionary* ircNumericCodeList; - (void)privateMessageReceived:(NSData *)message fromUser:(NSData *)nick { - [_delegate privateMessageReceived:message fromUser:nick]; + [_delegate privateMessageReceived:message fromUser:nick session:self]; } - (void)serverMessageReceivedFrom:(NSData *)origin params:(NSArray *)params { - [_delegate serverMessageReceivedFrom:origin params:params]; + [_delegate serverMessageReceivedFrom:origin params:params session:self]; } - (void)privateNoticeReceived:(NSData *)notice fromUser:(NSData *)nick { - [_delegate privateNoticeReceived:notice fromUser:nick]; + [_delegate privateNoticeReceived:notice fromUser:nick session:self]; } - (void)noticeSent:(NSData *)notice toChannel:(NSData *)channelName byUser:(NSData *)nick @@ -444,12 +444,12 @@ static NSDictionary* ircNumericCodeList; - (void)serverNoticeReceivedFrom:(NSData *)origin params:(NSArray *)params { - [_delegate serverNoticeReceivedFrom:origin params:params]; + [_delegate serverNoticeReceivedFrom:origin params:params session:self]; } - (void)invitedToChannel:(NSData *)channelName by:(NSData *)nick { - [_delegate invitedToChannel:channelName by:nick]; + [_delegate invitedToChannel:channelName by:nick session:self]; } - (void)CTCPRequestReceived:(NSData *)request fromUser:(NSData *)nick @@ -481,7 +481,7 @@ static NSDictionary* ircNumericCodeList; } else { - if ([_delegate respondsToSelector:@selector(CTCPRequestReceived:ofType:fromUser:)]) + if ([_delegate respondsToSelector:@selector(CTCPRequestReceived:ofType:fromUser:session:)]) { char* request_string = malloc(request.length); [request getBytes:request_string length:request.length]; @@ -492,7 +492,7 @@ static NSDictionary* ircNumericCodeList; NSData* requestTypeData = [NSData dataWithBytes:request_body length:strlen(request_body) + 1]; NSData* requestBodyData = [NSData dataWithBytes:request_type length:strlen(request_type) + 1]; - [_delegate CTCPRequestReceived:requestBodyData ofType:requestTypeData fromUser:nick]; + [_delegate CTCPRequestReceived:requestBodyData ofType:requestTypeData fromUser:nick session:self]; free(request_string); } @@ -501,7 +501,7 @@ static NSDictionary* ircNumericCodeList; - (void)CTCPReplyReceived:(NSData *)reply fromUser:(NSData *)nick { - [_delegate CTCPReplyReceived:reply fromUser:nick]; + [_delegate CTCPReplyReceived:reply fromUser:nick session:self]; } - (void)CTCPActionPerformed:(NSData *)action byUser:(NSData *)nick atTarget:(NSData *)target @@ -516,18 +516,18 @@ static NSDictionary* ircNumericCodeList; else { // An action in a private message - [_delegate privateCTCPActionReceived:action fromUser:nick]; + [_delegate privateCTCPActionReceived:action fromUser:nick session:self]; } } - (void)unknownEventReceived:(NSData *)event from:(NSData *)origin params:(NSArray *)params { - [_delegate unknownEventReceived:event from:origin params:params]; + [_delegate unknownEventReceived:event from:origin params:params session:self]; } -(void)numericEventReceived:(NSUInteger)event from:(NSData *)origin params:(NSArray *)params { - [_delegate numericEventReceived:event from:origin params:params]; + [_delegate numericEventReceived:event from:origin params:params session:self]; } @end diff --git a/IRCClient/IRCClientSessionDelegate.h b/IRCClient/IRCClientSessionDelegate.h index edb9abb..79568c5 100644 --- a/IRCClient/IRCClientSessionDelegate.h +++ b/IRCClient/IRCClientSessionDelegate.h @@ -19,6 +19,7 @@ #import +@class IRCClientSession; @class IRCClientChannel; /** @brief Receives delegate messages from an IRCClientSession. @@ -33,7 +34,8 @@ @protocol IRCClientSessionDelegate /** The client has successfully connected to the IRC server. */ -- (void)connectionSucceeded; +@required +- (void)connectionSucceeded:(IRCClientSession *)sender; /** An IRC client on a channel that this client is connected to has changed nickname, * or this IRC client has changed nicknames. @@ -42,14 +44,16 @@ * @param oldNick the old nickname * @param wasItUs did our nick change, or someone else's? */ -- (void)nickChangedFrom:(NSData *)oldNick to:(NSData *)newNick own:(BOOL)wasItUs; +@required +- (void)nickChangedFrom:(NSData *)oldNick to:(NSData *)newNick own:(BOOL)wasItUs session:(IRCClientSession *)sender; /** An IRC client on a channel that this client is connected to has quit IRC. * * @param nick the nickname of the client that quit. * @param reason (optional) the quit message, if any. */ -- (void)userQuit:(NSData *)nick withReason:(NSData *)reason; +@required +- (void)userQuit:(NSData *)nick withReason:(NSData *)reason session:(IRCClientSession *)sender; /** The IRC client has joined (connected) successfully to a new channel. This * event creates an IRCClientChannel object, which you are expected to assign a @@ -63,48 +67,55 @@ * * @param channel the IRCClientChannel object for the newly joined channel. */ -- (void)joinedNewChannel:(IRCClientChannel *)channel; +@required +- (void)joinedNewChannel:(IRCClientChannel *)channel session:(IRCClientSession *)sender; /** The client has changed it's user mode. * * @param mode the new mode. */ -- (void)modeSet:(NSData *)mode by:(NSData *)nick; +@required +- (void)modeSet:(NSData *)mode by:(NSData *)nick session:(IRCClientSession *)sender; /** The client has received a private PRIVMSG from another IRC client. * * @param message the text of the message * @param nick the other IRC Client that sent the message. */ -- (void)privateMessageReceived:(NSData *)message fromUser:(NSData *)nick; +@required +- (void)privateMessageReceived:(NSData *)message fromUser:(NSData *)nick session:(IRCClientSession *)sender; /** The client has received a private NOTICE from another client. * * @param notice the text of the message * @param nick the nickname of the other IRC client that sent the message. */ -- (void)privateNoticeReceived:(NSData *)notice fromUser:(NSData *)nick; +@required +- (void)privateNoticeReceived:(NSData *)notice fromUser:(NSData *)nick session:(IRCClientSession *)sender; /** The client has received a private PRIVMSG from the server. * * @param origin the sender of the message * @param params the parameters of the message */ -- (void)serverMessageReceivedFrom:(NSData *)origin params:(NSArray *)params; +@required +- (void)serverMessageReceivedFrom:(NSData *)origin params:(NSArray *)params session:(IRCClientSession *)sender; /** The client has received a private NOTICE from the server. * * @param origin the sender of the notice * @param params the parameters of the notice */ -- (void)serverNoticeReceivedFrom:(NSData *)origin params:(NSArray *)params; +@required +- (void)serverNoticeReceivedFrom:(NSData *)origin params:(NSArray *)params session:(IRCClientSession *)sender; /** The IRC client has been invited to a channel. * * @param channel the channel for the invitation. * @param nick the nickname of the user that sent the invitation. */ -- (void)invitedToChannel:(NSData *)channelName by:(NSData *)nick; +@required +- (void)invitedToChannel:(NSData *)channelName by:(NSData *)nick session:(IRCClientSession *)sender; /** A private CTCP request was sent to the IRC client. * @@ -112,14 +123,16 @@ * @param type the CTCP request type * @param nick the nickname of the user that sent the request. */ -- (void)CTCPRequestReceived:(NSData *)request ofType:(NSData *)type fromUser:(NSData *)nick; +@optional +- (void)CTCPRequestReceived:(NSData *)request ofType:(NSData *)type fromUser:(NSData *)nick session:(IRCClientSession *)sender; /** A private CTCP reply was sent to the IRC client. * * @param reply an NSData containing the raw C string of the reply. * @param nick the nickname of the user that sent the reply. */ -- (void)CTCPReplyReceived:(NSData *)reply fromUser:(NSData *)nick; +@optional +- (void)CTCPReplyReceived:(NSData *)reply fromUser:(NSData *)nick session:(IRCClientSession *)sender; /** A private CTCP ACTION was sent to the IRC client. * @@ -128,15 +141,8 @@ * @param action the action message text. * @param nick the nickname of the client that sent the action. */ -- (void)privateCTCPActionReceived:(NSData *)action fromUser:(NSData *)nick; - -/** An unhandled event was received from the IRC server. - * - * @param event the unknown event name - * @param origin the sender of the event - * @param params an NSArray of NSData objects that are the raw C strings of the event. - */ -- (void)unknownEventReceived:(NSData *)event from:(NSData *)origin params:(NSArray *)params; +@required +- (void)privateCTCPActionReceived:(NSData *)action fromUser:(NSData *)nick session:(IRCClientSession *)sender; /** An unhandled numeric was received from the IRC server * @@ -144,6 +150,16 @@ * @param origin the sender of the event * @param params an NSArray of NSData objects that are the raw C strings of the event. */ -- (void)numericEventReceived:(NSUInteger)event from:(NSData *)origin params:(NSArray *)params; +@optional +- (void)numericEventReceived:(NSUInteger)event from:(NSData *)origin params:(NSArray *)params session:(IRCClientSession *)sender; + +/** An unhandled event was received from the IRC server. + * + * @param event the unknown event name + * @param origin the sender of the event + * @param params an NSArray of NSData objects that are the raw C strings of the event. + */ +@optional +- (void)unknownEventReceived:(NSData *)event from:(NSData *)origin params:(NSArray *)params session:(IRCClientSession *)sender; @end