diff --git a/src/IRCChannel.h b/src/IRCChannel.h index 2831971..2dfab5c 100644 --- a/src/IRCChannel.h +++ b/src/IRCChannel.h @@ -31,11 +31,15 @@ OFMutableSet *users; } +#ifdef OF_HAVE_PROPERTIES @property (readonly) OFString *name; -@property (copy) OFSet *users; +@property (readonly, copy) OFSet *users; +#endif + channelWithName: (OFString*)name; - initWithName: (OFString*)name; +- (OFString*)name; +- (OFSet*)users; - (void)IRC_addUser: (OFString*)user; - (void)IRC_removeUser: (OFString*)user; @end diff --git a/src/IRCChannel.m b/src/IRCChannel.m index 1414525..f295de7 100644 --- a/src/IRCChannel.m +++ b/src/IRCChannel.m @@ -22,11 +22,11 @@ #import +#import + #import "IRCChannel.h" @implementation IRCChannel -@synthesize name, users; - + channelWithName: (OFString*)name { return [[[self alloc] initWithName: name] autorelease]; @@ -55,9 +55,19 @@ [super dealloc]; } +- (OFString*)name +{ + OF_GETTER(name, YES) +} + +- (OFSet*)users +{ + return [[users copy] autorelease]; +} + - (OFString*)description { - return name; + return [[name copy] autorelease]; } - (void)IRC_addUser: (OFString*)user diff --git a/src/IRCConnection.h b/src/IRCConnection.h index 2ec1e29..6b7fcf2 100644 --- a/src/IRCConnection.h +++ b/src/IRCConnection.h @@ -29,8 +29,14 @@ @class IRCUser; @class IRCChannel; +#ifndef IRC_CONNECTION_M +@protocol IRCConnectionDelegate +#else @protocol IRCConnectionDelegate +#endif +#ifdef OF_HAVE_OPTIONAL_PROTOCOLS @optional +#endif - (void)connection: (IRCConnection*)connection didReceiveLine: (OFString*)line; - (void)connection: (IRCConnection*)connection @@ -80,15 +86,30 @@ uint16_t port; OFString *nickname, *username, *realname; OFMutableDictionary *channels; - id delegate; + id delegate; } +#ifdef OF_HAVE_PROPERTIES @property (copy) OFString *server; @property (assign) uint16_t port; @property (copy) OFString *nickname, *username, *realname; -@property (assign) id delegate; -@property (retain, getter=socket) OFTCPSocket *sock; +@property (assign) id delegate; +@property (readonly, retain, getter=socket) OFTCPSocket *sock; +#endif +- (void)setServer: (OFString*)server; +- (OFString*)server; +- (void)setPort: (uint16_t)port; +- (uint16_t)port; +- (void)setNickname: (OFString*)nickname; +- (OFString*)nickname; +- (void)setUsername: (OFString*)username; +- (OFString*)username; +- (void)setRealname: (OFString*)realname; +- (OFString*)realname; +- (void)setDelegate: (id )delegate; +- (id )delegate; +- (OFTCPSocket*)socket; - (void)sendLine: (OFString*)line; - (void)sendLineWithFormat: (OFConstantString*)line, ...; - (void)connect; @@ -113,3 +134,6 @@ - (void)processLine: (OFString*)line; - (void)handleConnection; @end + +@interface OFObject (IRCConnectionDelegate) +@end diff --git a/src/IRCConnection.m b/src/IRCConnection.m index 35c1ac5..ab7b076 100644 --- a/src/IRCConnection.m +++ b/src/IRCConnection.m @@ -20,6 +20,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#define IRC_CONNECTION_M + #include #import @@ -37,8 +39,6 @@ #import "IRCChannel.h" @implementation IRCConnection -@synthesize server, port, nickname, username, realname, delegate, sock; - - init { self = [super init]; @@ -54,6 +54,71 @@ return self; } +- (void)setServer: (OFString*)server_ +{ + OF_SETTER(server, server_, YES, YES) +} + +- (OFString*)server +{ + OF_GETTER(server, YES) +} + +- (void)setPort: (uint16_t)port_ +{ + port = port_; +} + +- (uint16_t)port +{ + return port; +} + +- (void)setNickname: (OFString*)nickname_ +{ + OF_SETTER(nickname, nickname_, YES, YES) +} + +- (OFString*)nickname +{ + OF_GETTER(nickname, YES) +} + +- (void)setUsername: (OFString*)username_ +{ + OF_SETTER(username, username_, YES, YES) +} + +- (OFString*)username +{ + OF_GETTER(username, YES) +} + +- (void)setRealname: (OFString*)realname_ +{ + OF_SETTER(realname, realname_, YES, YES) +} + +- (OFString*)realname +{ + OF_GETTER(realname, YES) +} + +- (void)setDelegate: (id )delegate_ +{ + delegate = delegate_; +} + +- (id )delegate +{ + return delegate; +} + +- (OFTCPSocket*)socket +{ + OF_GETTER(sock, YES) +} + - (void)connect { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; @@ -96,18 +161,18 @@ withReason: (OFString*)reason { if (reason == nil) - [self sendLineWithFormat: @"PART %@", channel.name]; + [self sendLineWithFormat: @"PART %@", [channel name]]; else - [self sendLineWithFormat: @"PART %@ :%@", channel.name, reason]; + [self sendLineWithFormat: @"PART %@ :%@", + [channel name], reason]; - [channels removeObjectForKey: channel.name]; + [channels removeObjectForKey: [channel name]]; } - (void)sendLine: (OFString*)line { - if ([delegate respondsToSelector: @selector(connection:didSendLine:)]) - [delegate connection: self - didSendLine: line]; + [delegate connection: self + didSendLine: line]; [sock writeLine: line]; } @@ -131,7 +196,7 @@ - (void)sendMessage: (OFString*)msg toChannel: (IRCChannel*)channel { - [self sendLineWithFormat: @"PRIVMSG %@ :%@", channel.name, msg]; + [self sendLineWithFormat: @"PRIVMSG %@ :%@", [channel name], msg]; } - (void)sendMessage: (OFString*)msg @@ -149,7 +214,7 @@ - (void)sendNotice: (OFString*)notice toChannel: (IRCChannel*)channel { - [self sendLineWithFormat: @"NOTICE %@ :%@", channel.name, notice]; + [self sendLineWithFormat: @"NOTICE %@ :%@", [channel name], notice]; } - (void)kickUser: (OFString*)user @@ -157,7 +222,7 @@ withReason: (OFString*)reason { [self sendLineWithFormat: @"KICK %@ %@ :%@", - channel.name, user, reason]; + [channel name], user, reason]; } - (void)changeNicknameTo: (OFString*)nickname_ @@ -165,21 +230,19 @@ [self sendLineWithFormat: @"NICK %@", nickname_]; } -- (void)processLine: (OFString*)line +- (void)IRC_processLine: (OFString*)line { - OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; - OFArray *split; + OFArray *components; OFString *action = nil; - if ([delegate respondsToSelector: - @selector(connection:didReceiveLine:)]) - [delegate connection: self - didReceiveLine: line]; + [delegate connection: self + didReceiveLine: line]; - split = [line componentsSeparatedByString: @" "]; + components = [line componentsSeparatedByString: @" "]; /* PING */ - if (split.count == 2 && [split.firstObject isEqual: @"PING"]) { + if ([components count] == 2 && + [[components firstObject] isEqual: @"PING"]) { OFMutableString *s = [[line mutableCopy] autorelease]; [s replaceOccurrencesOfString: @"PING" withString: @"PONG"]; @@ -188,26 +251,22 @@ return; } - action = [[split objectAtIndex: 1] uppercaseString]; + action = [[components objectAtIndex: 1] uppercaseString]; /* Connected */ - if ([action isEqual: @"001"] && split.count >= 4) { - if ([delegate respondsToSelector: - @selector(connectionWasEstablished:)]) - [delegate connectionWasEstablished: self]; - - [pool release]; + if ([action isEqual: @"001"] && [components count] >= 4) { + [delegate connectionWasEstablished: self]; return; } /* JOIN */ - if ([action isEqual: @"JOIN"] && split.count == 3) { - OFString *who = [split objectAtIndex: 0]; - OFString *where = [split objectAtIndex: 2]; + if ([action isEqual: @"JOIN"] && [components count] == 3) { + OFString *who = [components objectAtIndex: 0]; + OFString *where = [components objectAtIndex: 2]; IRCUser *user; IRCChannel *channel; - who = [who substringWithRange: of_range(1, who.length - 1)]; + who = [who substringWithRange: of_range(1, [who length] - 1)]; user = [IRCUser IRCUserWithString: who]; if ([who hasPrefix: [nickname stringByAppendingString: @"!"]]) { @@ -217,199 +276,190 @@ } else channel = [channels objectForKey: where]; - [channel IRC_addUser: user.nickname]; + [channel IRC_addUser: [user nickname]]; - if ([delegate respondsToSelector: - @selector(connection:didSeeUser:joinChannel:)]) - [delegate connection: self - didSeeUser: user - joinChannel: channel]; + [delegate connection: self + didSeeUser: user + joinChannel: channel]; - [pool release]; return; } /* NAMES reply */ - if ([action isEqual: @"353"] && split.count >= 6) { + if ([action isEqual: @"353"] && [components count] >= 6) { IRCChannel *channel; OFArray *users; size_t pos; + OFEnumerator *enumerator; + OFString *user; - channel = [channels objectForKey: [split objectAtIndex: 4]]; + channel = [channels + objectForKey: [components objectAtIndex: 4]]; if (channel == nil) { /* We did not request that */ - [pool release]; return; } - pos = [[split objectAtIndex: 0] length] + - [[split objectAtIndex: 1] length] + - [[split objectAtIndex: 2] length] + - [[split objectAtIndex: 3] length] + - [[split objectAtIndex: 4] length] + 6; + pos = [[components objectAtIndex: 0] length] + + [[components objectAtIndex: 1] length] + + [[components objectAtIndex: 2] length] + + [[components objectAtIndex: 3] length] + + [[components objectAtIndex: 4] length] + 6; users = [[line substringWithRange: - of_range(pos, line.length - pos)] + of_range(pos, [line length] - pos)] componentsSeparatedByString: @" "]; - for (OFString *user in users) { + enumerator = [users objectEnumerator]; + while ((user = [enumerator nextObject]) != nil) { if ([user hasPrefix: @"@"] || [user hasPrefix: @"+"] || [user hasPrefix: @"%"] || [user hasPrefix: @"*"]) user = [user substringWithRange: - of_range(1, user.length - 1)]; + of_range(1, [user length] - 1)]; [channel IRC_addUser: user]; } - if ([delegate respondsToSelector: @selector(connection: - didReceiveNamesForChannel:)]) - [delegate connection: self - didReceiveNamesForChannel: channel]; + [delegate connection: self + didReceiveNamesForChannel: channel]; - [pool release]; return; } /* PART */ - if ([action isEqual: @"PART"] && split.count >= 3) { - OFString *who = [split objectAtIndex: 0]; - OFString *where = [split objectAtIndex: 2]; + if ([action isEqual: @"PART"] && [components count] >= 3) { + OFString *who = [components objectAtIndex: 0]; + OFString *where = [components objectAtIndex: 2]; IRCUser *user; IRCChannel *channel; OFString *reason = nil; - size_t pos = who.length + 1 + - [[split objectAtIndex: 1] length] + 1 + where.length; + size_t pos = [who length] + 1 + + [[components objectAtIndex: 1] length] + 1 + [where length]; - who = [who substringWithRange: of_range(1, who.length - 1)]; + who = [who substringWithRange: of_range(1, [who length] - 1)]; user = [IRCUser IRCUserWithString: who]; channel = [channels objectForKey: where]; - if (split.count > 3) + if ([components count] > 3) reason = [line substringWithRange: - of_range(pos + 2, line.length - pos - 2)]; + of_range(pos + 2, [line length] - pos - 2)]; - [channel IRC_removeUser: user.nickname]; + [channel IRC_removeUser: [user nickname]]; - if ([delegate respondsToSelector: - @selector(connection:didSeeUser:leaveChannel: - withReason:)]) - [delegate connection: self - didSeeUser: user - leaveChannel: channel - withReason: reason]; + [delegate connection: self + didSeeUser: user + leaveChannel: channel + withReason: reason]; - [pool release]; return; } /* KICK */ - if ([action isEqual: @"KICK"] && split.count >= 4) { - OFString *who = [split objectAtIndex: 0]; - OFString *where = [split objectAtIndex: 2]; - OFString *whom = [split objectAtIndex: 3]; + if ([action isEqual: @"KICK"] && [components count] >= 4) { + OFString *who = [components objectAtIndex: 0]; + OFString *where = [components objectAtIndex: 2]; + OFString *whom = [components objectAtIndex: 3]; IRCUser *user; IRCChannel *channel; OFString *reason = nil; - size_t pos = who.length + 1 + - [[split objectAtIndex: 1] length] + 1 + where.length + 1 + - whom.length; + size_t pos = [who length] + 1 + + [[components objectAtIndex: 1] length] + 1 + + [where length] + 1 + [whom length]; - who = [who substringWithRange: of_range(1, who.length - 1)]; + who = [who substringWithRange: of_range(1, [who length] - 1)]; user = [IRCUser IRCUserWithString: who]; channel = [channels objectForKey: where]; - if (split.count > 4) + if ([components count] > 4) reason = [line substringWithRange: - of_range(pos + 2, line.length - pos - 2)]; + of_range(pos + 2, [line length] - pos - 2)]; - [channel IRC_removeUser: user.nickname]; + [channel IRC_removeUser: [user nickname]]; - if ([delegate respondsToSelector: - @selector(connection:didSeeUser:kickUser: - fromChannel:withReason:)]) - [delegate connection: self - didSeeUser: user - kickUser: whom - fromChannel: channel - withReason: reason]; + [delegate connection: self + didSeeUser: user + kickUser: whom + fromChannel: channel + withReason: reason]; - [pool release]; return; } /* QUIT */ - if ([action isEqual: @"QUIT"] && split.count >= 2) { - OFString *who = [split objectAtIndex: 0]; + if ([action isEqual: @"QUIT"] && [components count] >= 2) { + OFString *who = [components objectAtIndex: 0]; IRCUser *user; OFString *reason = nil; - size_t pos = who.length + 1 + [[split objectAtIndex: 1] length]; + size_t pos = [who length] + 1 + + [[components objectAtIndex: 1] length]; + OFEnumerator *enumerator; + IRCChannel *channel; - who = [who substringWithRange: of_range(1, who.length - 1)]; + who = [who substringWithRange: of_range(1, [who length] - 1)]; user = [IRCUser IRCUserWithString: who]; - if (split.count > 2) + if ([components count] > 2) reason = [line substringWithRange: - of_range(pos + 2, line.length - pos - 2)]; + of_range(pos + 2, [line length] - pos - 2)]; - for (IRCChannel *channel in channels) - [channel IRC_removeUser: user.nickname]; + enumerator = [channels keyEnumerator]; + while ((channel = [enumerator nextObject]) != nil) + [channel IRC_removeUser: [user nickname]]; - if ([delegate respondsToSelector: - @selector(connection:didSeeUserQuit:withReason:)]) - [delegate connection: self - didSeeUserQuit: user - withReason: reason]; + [delegate connection: self + didSeeUserQuit: user + withReason: reason]; - [pool release]; return; } /* NICK */ - if ([action isEqual: @"NICK"] && split.count == 3) { - OFString *who = [split objectAtIndex: 0]; - OFString *newNickname = [split objectAtIndex: 2]; + if ([action isEqual: @"NICK"] && [components count] == 3) { + OFString *who = [components objectAtIndex: 0]; + OFString *newNickname = [components objectAtIndex: 2]; IRCUser *user; + OFEnumerator *enumerator; + IRCChannel *channel; - who = [who substringWithRange: of_range(1, who.length - 1)]; + who = [who substringWithRange: of_range(1, [who length] - 1)]; newNickname = [newNickname substringWithRange: - of_range(1, newNickname.length - 1)]; + of_range(1, [newNickname length] - 1)]; user = [IRCUser IRCUserWithString: who]; - if ([user.nickname isEqual: nickname]) { + if ([[user nickname] isEqual: nickname]) { [nickname release]; - nickname = [user.nickname copy]; + nickname = [[user nickname] copy]; } - for (IRCChannel *channel in channels) { - if ([channel.users containsObject: user.nickname]) { - [channel IRC_removeUser: user.nickname]; + enumerator = [channels keyEnumerator]; + while ((channel = [enumerator nextObject]) != nil) { + if ([[channel users] containsObject: [user nickname]]) { + [channel IRC_removeUser: [user nickname]]; [channel IRC_addUser: newNickname]; } } - if ([delegate respondsToSelector: - @selector(connection:didSeeUser:changeNicknameTo:)]) - [delegate connection: self - didSeeUser: user - changeNicknameTo: newNickname]; + [delegate connection: self + didSeeUser: user + changeNicknameTo: newNickname]; - [pool release]; return; } /* PRIVMSG */ - if ([action isEqual: @"PRIVMSG"] && split.count >= 4) { - OFString *from = [split objectAtIndex: 0]; - OFString *to = [split objectAtIndex: 2]; + if ([action isEqual: @"PRIVMSG"] && [components count] >= 4) { + OFString *from = [components objectAtIndex: 0]; + OFString *to = [components objectAtIndex: 2]; IRCUser *user; OFString *msg; - size_t pos = from.length + 1 + - [[split objectAtIndex: 1] length] + 1 + to.length; + size_t pos = [from length] + 1 + + [[components objectAtIndex: 1] length] + 1 + [to length]; - from = [from substringWithRange: of_range(1, from.length - 1)]; + from = [from substringWithRange: + of_range(1, [from length] - 1)]; msg = [line substringWithRange: - of_range(pos + 2, line.length - pos - 2)]; + of_range(pos + 2, [line length] - pos - 2)]; user = [IRCUser IRCUserWithString: from]; if (![to isEqual: nickname]) { @@ -417,43 +467,34 @@ channel = [channels objectForKey: to]; - if ([delegate respondsToSelector: - @selector(connection:didReceiveMessage: - fromUser:inChannel:)]) - [delegate connection: self - didReceiveMessage: msg - fromUser: user - inChannel: channel]; - } else { - if ([delegate respondsToSelector: - @selector(connection: - didReceivePrivateMessage:fromUser:)]) - [delegate - connection: self - didReceivePrivateMessage: msg - fromUser: user]; - } + [delegate connection: self + didReceiveMessage: msg + fromUser: user + inChannel: channel]; + } else + [delegate connection: self + didReceivePrivateMessage: msg + fromUser: user]; - [pool release]; return; } /* NOTICE */ - if ([action isEqual: @"NOTICE"] && split.count >= 4) { - OFString *from = [split objectAtIndex: 0]; - OFString *to = [split objectAtIndex: 2]; + if ([action isEqual: @"NOTICE"] && [components count] >= 4) { + OFString *from = [components objectAtIndex: 0]; + OFString *to = [components objectAtIndex: 2]; IRCUser *user = nil; OFString *notice; - size_t pos = from.length + 1 + - [[split objectAtIndex: 1] length] + 1 + to.length; + size_t pos = [from length] + 1 + + [[components objectAtIndex: 1] length] + 1 + [to length]; - from = [from substringWithRange: of_range(1, from.length - 1)]; + from = [from substringWithRange: + of_range(1, [from length] - 1)]; notice = [line substringWithRange: - of_range(pos + 2, line.length - pos - 2)]; + of_range(pos + 2, [line length] - pos - 2)]; if (![from containsString: @"!"] || [to isEqual: @"*"]) { /* System message - ignore for now */ - [pool release]; return; } @@ -464,34 +505,35 @@ channel = [channels objectForKey: to]; - if ([delegate respondsToSelector: - @selector(connection:didReceiveNotice: - fromUser:inChannel:)]) - [delegate connection: self - didReceiveNotice: notice - fromUser: user - inChannel: channel]; - } else { - if ([delegate respondsToSelector: - @selector(connection:didReceiveNotice: - fromUser:)]) - [delegate connection: self - didReceiveNotice: notice - fromUser: user]; - } + [delegate connection: self + didReceiveNotice: notice + fromUser: user + inChannel: channel]; + } else + [delegate connection: self + didReceiveNotice: notice + fromUser: user]; - [pool release]; return; } } +- (void)processLine: (OFString*)line +{ + OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; + + [self IRC_processLine: line]; + + [pool release]; +} + - (BOOL)connection: (OFTCPSocket*)connection didReceiveISO88591Line: (OFString*)line context: (id)context exception: (OFException*)exception { if (line != nil) { - [self processLine: line]; + [self IRC_processLine: line]; [sock asyncReadLineWithTarget: self selector: @selector(connection: didReceiveLine:context: @@ -508,7 +550,7 @@ exception: (OFException*)exception { if (line != nil) { - [self processLine: line]; + [self IRC_processLine: line]; return YES; } @@ -543,3 +585,87 @@ [super dealloc]; } @end + +@implementation OFObject (IRCConnectionDelegate) +- (void)connection: (IRCConnection*)connection + didReceiveLine: (OFString*)line +{ +} + +- (void)connection: (IRCConnection*)connection + didSendLine: (OFString*)line +{ +} + +- (void)connectionWasEstablished: (IRCConnection*)connection +{ +} + +- (void)connection: (IRCConnection*)connection + didSeeUser: (IRCUser*)user + joinChannel: (IRCChannel*)channel +{ +} + +- (void)connection: (IRCConnection*)connection + didSeeUser: (IRCUser*)user + leaveChannel: (IRCChannel*)channel + withReason: (OFString*)reason +{ +} + +- (void)connection: (IRCConnection*)connection + didSeeUser: (IRCUser*)user + changeNicknameTo: (OFString*)nickname +{ +} + +- (void)connection: (IRCConnection*)connection + didSeeUser: (IRCUser*)user + kickUser: (OFString*)kickedUser + fromChannel: (IRCChannel*)channel + withReason: (OFString*)reason +{ +} + +- (void)connection: (IRCConnection*)connection + didSeeUserQuit: (IRCUser*)user + withReason: (OFString*)reason +{ +} + +- (void)connection: (IRCConnection*)connection + didReceiveMessage: (OFString*)msg + fromUser: (IRCUser*)user + inChannel: (IRCChannel*)channel +{ +} + +- (void)connection: (IRCConnection*)connection + didReceivePrivateMessage: (OFString*)msg + fromUser: (IRCUser*)user +{ +} + +- (void)connection: (IRCConnection*)connection + didReceiveNotice: (OFString*)notice + fromUser: (IRCUser*)user +{ +} + +- (void)connection: (IRCConnection*)connection + didReceiveNotice: (OFString*)notice + fromUser: (IRCUser*)user + inChannel: (IRCChannel*)channel +{ +} + +- (void)connection: (IRCConnection*)connection + didReceiveNamesForChannel: (IRCChannel*)channel +{ +} + +- (void)connectionWasClosed: (IRCConnection*)connection +{ +} +@end diff --git a/src/IRCUser.h b/src/IRCUser.h index fc2165d..806a111 100644 --- a/src/IRCUser.h +++ b/src/IRCUser.h @@ -29,8 +29,13 @@ OFString *hostname; } +#ifdef OF_HAVE_PROPERTIES @property (copy, readonly) OFString *nickname, *username, *hostname; +#endif + IRCUserWithString: (OFString*)string; - initWithString: (OFString*)string; +- (OFString*)nickname; +- (OFString*)username; +- (OFString*)hostname; @end diff --git a/src/IRCUser.m b/src/IRCUser.m index f9dd714..997f43a 100644 --- a/src/IRCUser.m +++ b/src/IRCUser.m @@ -28,10 +28,11 @@ #import #import +#import + #import "IRCUser.h" @implementation IRCUser -@synthesize username, nickname, hostname; + IRCUserWithString: (OFString*)string { return [[[self alloc] initWithString: string] autorelease]; @@ -48,19 +49,19 @@ if ((tmp2 = strdup([string UTF8String])) == NULL) @throw [OFOutOfMemoryException - exceptionWithClass: isa + exceptionWithClass: [self class] requestedSize: [string UTF8StringLength]]; if ((tmp = strchr(tmp2, '@')) == NULL) @throw [OFInvalidFormatException - exceptionWithClass: isa]; + exceptionWithClass: [self class]]; *tmp = '\0'; hostname = [[OFString alloc] initWithUTF8String: tmp + 1]; if ((tmp = strchr(tmp2, '!')) == NULL) @throw [OFInvalidFormatException - exceptionWithClass: isa]; + exceptionWithClass: [self class]]; *tmp = '\0'; username = [[OFString alloc] initWithUTF8String: tmp + 1]; @@ -86,6 +87,21 @@ [super dealloc]; } +- (OFString*)username +{ + OF_GETTER(username, YES) +} + +- (OFString*)nickname +{ + OF_GETTER(nickname, YES) +} + +- (OFString*)hostname +{ + OF_GETTER(hostname, YES) +} + - copy { return [self retain]; diff --git a/tests/test.m b/tests/test.m index 453e7e5..160778f 100644 --- a/tests/test.m +++ b/tests/test.m @@ -28,7 +28,7 @@ #import "IRCUser.h" #import "IRCChannel.h" -@interface TestApp: OFObject +@interface TestApp: OFObject @end OF_APPLICATION_DELEGATE(TestApp) @@ -38,11 +38,11 @@ OF_APPLICATION_DELEGATE(TestApp) { IRCConnection *connection = [[IRCConnection alloc] init]; - connection.server = @"irc.freenode.net"; - connection.nickname = @"ObjIRC"; - connection.username = @"ObjIRC"; - connection.realname = @"ObjIRC"; - connection.delegate = self; + [connection setServer: @"irc.freenode.net"]; + [connection setNickname: @"ObjIRC"]; + [connection setUsername: @"ObjIRC"]; + [connection setRealname: @"ObjIRC"]; + [connection setDelegate: self]; [connection connect]; [connection handleConnection]; @@ -136,6 +136,6 @@ OF_APPLICATION_DELEGATE(TestApp) - (void)connection: (IRCConnection*)connection didReceiveNamesForChannel: (IRCChannel*)channel { - of_log(@"Users in %@: %@", channel, channel.users); + of_log(@"Users in %@: %@", channel, [channel users]); } @end