Changeset 3080

Show
Ignore:
Timestamp:
12/24/05 23:28:57 (3 years ago)
Author:
timothy
Message:
  • More code clean up.
  • Added a new method to easily send mixed content. sendRawMessageWithComponents: will let you send a mix of strings and data. This is handy when sending connection encoded strings and pre-encoded data for room messages.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/cocoa-networking/Chat Core/MVChatConnection.h

    r3072 r3080  
    211211#pragma mark - 
    212212 
    213 - (void) sendRawMessage:(NSString *) raw; 
    214 - (void) sendRawMessage:(NSString *) raw immediately:(BOOL) now; 
     213- (void) sendRawMessage:(id) raw; 
     214- (void) sendRawMessage:(id) raw immediately:(BOOL) now; 
    215215- (void) sendRawMessageWithFormat:(NSString *) format, ...; 
     216- (void) sendRawMessageWithComponents:(id) firstComponent, ...; 
    216217 
    217218#pragma mark - 
  • branches/cocoa-networking/Chat Core/MVChatConnection.m

    r3072 r3080  
    498498#pragma mark - 
    499499 
    500 - (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding toTarget:(NSString *) target asAction:(BOOL) action { 
    501 // subclass this method, if used 
    502         [self doesNotRecognizeSelector:_cmd]; 
    503 
    504  
    505 - (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding toUser:(NSString *) user asAction:(BOOL) action { 
    506 // subclass this method, if needed 
    507         [self sendMessage:message withEncoding:encoding toTarget:user asAction:action]; 
    508 
    509  
    510 - (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding toChatRoom:(NSString *) room asAction:(BOOL) action { 
    511 // subclass this method, if needed 
    512         [self sendMessage:message withEncoding:encoding toTarget:[room lowercaseString] asAction:action]; 
    513 
    514  
    515 #pragma mark - 
    516  
    517 - (void) sendRawMessage:(NSString *) raw { 
     500- (void) sendRawMessage:(id) raw { 
    518501        [self sendRawMessage:raw immediately:NO]; 
    519502} 
    520503 
    521 - (void) sendRawMessage:(NSString *) raw immediately:(BOOL) now { 
     504- (void) sendRawMessage:(id) raw immediately:(BOOL) now { 
    522505// subclass this method 
    523506        [self doesNotRecognizeSelector:_cmd]; 
     
    531514 
    532515        NSString *command = [[NSString allocWithZone:nil] initWithFormat:format arguments:ap]; 
     516 
     517        va_end( ap ); 
     518 
    533519        [self sendRawMessage:command immediately:NO]; 
    534520        [command release]; 
     521} 
     522 
     523- (void) sendRawMessageWithComponents:(id) firstComponent, ... { 
     524        NSParameterAssert( firstComponent != nil ); 
     525 
     526        NSMutableData *data = [[NSMutableData allocWithZone:nil] initWithCapacity:512]; 
     527        id object = firstComponent; 
     528 
     529        va_list ap; 
     530        va_start( ap, firstComponent ); 
     531 
     532        do { 
     533                if( [object isKindOfClass:[NSData class]] ) { 
     534                        [data appendData:object]; 
     535                } else if( [firstComponent isKindOfClass:[NSString class]] ) { 
     536                        NSData *stringData = [object dataUsingEncoding:[self encoding] allowLossyConversion:YES]; 
     537                        [data appendData:stringData]; 
     538                } else { 
     539                        NSData *stringData = [[object description] dataUsingEncoding:[self encoding] allowLossyConversion:YES]; 
     540                        [data appendData:stringData]; 
     541                } 
     542        } while( object = va_arg( ap, void * ) ); 
    535543 
    536544        va_end( ap ); 
     545 
     546        [self sendRawMessage:data immediately:NO]; 
     547        [data release]; 
    537548} 
    538549 
  • branches/cocoa-networking/Chat Core/MVIRCChatConnection.h

    r3079 r3080  
    2929- (void) _handleCommand:(id) command parameters:(NSArray *) parameters fromSender:(NSString *) sender username:(NSString *) user host:(NSString *) host; 
    3030 
    31 + (const char *) _flattenedIRCStringForMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) enc andChatFormat:(MVChatMessageFormat) format; 
    32 - (void) _forceDisconnect
     31+ (NSData *) _flattenedIRCDataForMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) enc andChatFormat:(MVChatMessageFormat) format; 
     32- (void) _sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding toTarget:(NSString *) target asAction:(BOOL) action
    3333 
    3434- (void) _processErrorCode:(int) errorCode withContext:(char *) context; 
    3535 
    3636- (void) _updateKnownUser:(MVChatUser *) user withNewNickname:(NSString *) nickname; 
    37  
    38 - (oneway void) _sendMessage:(const char *) msg toTarget:(NSString *) target asAction:(BOOL) action; 
    3937@end 
    4038 
  • branches/cocoa-networking/Chat Core/MVIRCChatConnection.m

    r3079 r3080  
    10541054 
    10551055@implementation MVIRCChatConnection 
    1056 /*+ (void) initialize { 
    1057         [super initialize]; 
    1058  
    1059         static BOOL tooLate = NO; 
    1060         if( ! tooLate ) { 
    1061                 pthread_mutexattr_t lockAttr; 
    1062                 pthread_mutexattr_init( &lockAttr ); 
    1063                 pthread_mutexattr_settype( &lockAttr, PTHREAD_MUTEX_RECURSIVE ); 
    1064  
    1065                 extern pthread_mutex_t irssiLock; 
    1066                 pthread_mutex_init( &irssiLock, &lockAttr ); 
    1067  
    1068                 pthread_mutexattr_destroy( &lockAttr ); 
    1069  
    1070                 irssi_gui = IRSSI_GUI_NONE; 
    1071  
    1072                 NSString *temp = NSTemporaryDirectory(); 
    1073                 temp = [temp stringByAppendingPathComponent:@"Colloquy/Irssi"]; 
    1074                 temp = [@"--home=" stringByAppendingString:temp]; 
    1075                 char *args[] = { "Chat Core", (char *)[temp cString] }; 
    1076                 core_init_paths( sizeof( args ) / sizeof( char * ), args ); 
    1077  
    1078                 core_init(); 
    1079                 irc_init(); 
    1080  
    1081                 settings_set_bool( "override_coredump_limit", FALSE ); 
    1082                 settings_set_bool( "settings_autosave", FALSE ); 
    1083                 settings_set_str( "dcc_port", "1024 1048" ); 
    1084                 signal_emit( "setup changed", 0 ); 
    1085  
    1086                 signal_emit( "irssi init finished", 0 ); 
    1087  
    1088                 [self _registerCallbacks]; 
    1089  
    1090                 [NSThread detachNewThreadSelector:@selector( _irssiRunLoop ) toTarget:self withObject:nil]; 
    1091                 tooLate = YES; 
    1092         } 
    1093 } */ 
    1094  
    10951056+ (NSArray *) defaultServerPorts { 
    10961057        return [NSArray arrayWithObjects:[NSNumber numberWithUnsignedShort:6667],[NSNumber numberWithUnsignedShort:6660],[NSNumber numberWithUnsignedShort:6669],[NSNumber numberWithUnsignedShort:7000],[NSNumber numberWithUnsignedShort:994], nil]; 
     
    11011062- (id) init { 
    11021063        if( ( self = [super init] ) ) { 
    1103                 _proxyUsername = nil; 
    1104                 _proxyPassword = nil; 
    11051064                _chatConnection = [[AsyncSocket allocWithZone:nil] initWithDelegate:self]; 
    11061065 
     1066                _serverPort = 6667; 
     1067                _server = @"irc.freenode.net"; 
     1068                _username = [NSUserName() retain]; 
     1069                _nickname = [_username retain]; 
     1070                _currentNickname = [_nickname retain]; 
     1071                _realName = [NSFullUserName() retain]; 
     1072 
    11071073                _knownUsers = [[NSMutableDictionary allocWithZone:nil] initWithCapacity:200]; 
    1108  
    1109 //              extern unsigned int connectionCount; 
    1110 //              connectionCount++; 
    1111  
    1112 //              while( ! irssiThreadReady ) usleep( 50 ); 
    1113  
    1114 /*              IrssiLock(); 
    1115  
    1116                 CHAT_PROTOCOL_REC *proto = chat_protocol_find_id( IRC_PROTOCOL ); 
    1117                 if( ! proto ) { 
    1118                         IrssiUnlock(); 
    1119                         [self release]; 
    1120                         return nil; 
    1121                 } 
    1122  
    1123                 SERVER_CONNECT_REC *settings = server_create_conn( proto -> id, "irc.freenode.net", 6667, NULL, NULL, [self encodedBytesWithString:NSUserName()] ); 
    1124                 if( ! settings ) { 
    1125                         IrssiUnlock(); 
    1126                         [self release]; 
    1127                         return nil; 
    1128                 } 
    1129  
    1130                 [self _setIrssiConnectSettings:settings]; 
    1131  
    1132                 IrssiUnlock(); */ 
    11331074        } 
    11341075 
     
    11471088        [_proxyPassword release]; 
    11481089        _proxyPassword = nil; 
    1149  
    1150 //      [self _setIrssiConnection:NULL]; 
    1151 //      [self _setIrssiConnectSettings:NULL]; 
    1152  
    1153 //      extern unsigned int connectionCount; 
    1154 //      connectionCount--; 
    11551090 
    11561091        [super dealloc]; 
     
    11921127        [self _willConnect]; // call early so other code has a chance to change our info 
    11931128 
    1194         if( ! [_chatConnection connectToHost:[self server] onPort:[self serverPort] error:NULL] ) { 
    1195                 NSLog( @"failed to connect" ); 
    1196         } 
     1129        if( ! [_chatConnection connectToHost:[self server] onPort:[self serverPort] error:NULL] ) 
     1130                [self _didNotConnect]; 
    11971131 
    11981132/*      IrssiLock(); 
     
    12481182        if( [self status] == MVChatConnectionConnectedStatus ) { 
    12491183                if( [[reason string] length] ) { 
    1250                         const char *msg = [[self class] _flattenedIRCStringForMessage:reason withEncoding:[self encoding] andChatFormat:[self outgoingChatFormat]]; 
    1251                         [self sendRawMessage:[NSString stringWithFormat:@"QUIT :%s", msg] immediately:YES]; 
    1252                 } else [self sendRawMessage:@"QUIT" immediately:YES]; 
     1184                        NSData *msg = [[self class] _flattenedIRCDataForMessage:reason withEncoding:[self encoding] andChatFormat:[self outgoingChatFormat]]; 
     1185                        [self sendRawMessageWithComponents:@"QUIT :", msg, nil]; 
     1186                } else [self sendRawMessage:@"QUIT"]; 
    12531187        } 
    12541188 
     
    12761210        NSParameterAssert( [nickname length] > 0 ); 
    12771211 
     1212        if( [nickname isEqualToString:[self nickname]] ) 
     1213                return; 
     1214 
    12781215        id old = _nickname; 
    12791216        _nickname = [nickname copyWithZone:nil]; 
    12801217        [old release]; 
    12811218 
    1282         if( ! _currentNickname ) 
     1219        if( ! _currentNickname || ! [self isConnected] ) { 
     1220                id old = _currentNickname; 
    12831221                _currentNickname = [_nickname retain]; 
    1284  
    1285         if( [self isConnected] && ! [nickname isEqualToString:[self nickname]] ) 
     1222                [old release]; 
     1223        } 
     1224 
     1225        if( [self isConnected] ) 
    12861226                [self sendRawMessageWithFormat:@"NICK %@", nickname]; 
    12871227} 
     
    14131353#pragma mark - 
    14141354 
    1415 - (void) sendRawMessage:(NSString *) raw immediately:(BOOL) now { 
     1355- (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding toTarget:(NSString *) target asAction:(BOOL) action { 
     1356        NSData *msg = [[self class] _flattenedIRCDataForMessage:message withEncoding:encoding andChatFormat:[self outgoingChatFormat]]; 
     1357        if( action ) { 
     1358                NSString *prefix = [[NSString allocWithZone:nil] initWithFormat:@"PRIVMSG %@ :\001ACTION ", target]; 
     1359                [self sendRawMessageWithComponents:prefix, msg, @"\001", nil]; 
     1360                [prefix release]; 
     1361        } else { 
     1362                NSString *prefix = [[NSString allocWithZone:nil] initWithFormat:@"PRIVMSG %@ :", target]; 
     1363                [self sendRawMessageWithComponents:prefix, msg, nil]; 
     1364                [prefix release]; 
     1365        } 
     1366
     1367 
     1368- (void) sendRawMessage:(id) raw immediately:(BOOL) now { 
    14161369        NSParameterAssert( raw != nil ); 
    1417  
    1418         const char *rawString = [self encodedBytesWithString:raw]; 
    1419         if( ! rawString ) return; 
    1420  
    1421         NSMutableData *data = [[NSMutableData allocWithZone:nil] initWithBytes:(void *)rawString length:strlen( rawString )]; 
     1370        NSParameterAssert( [raw isKindOfClass:[NSData class]] || [raw isKindOfClass:[NSString class]] ); 
     1371 
     1372        NSMutableData *data = nil; 
     1373        NSString *string = nil; 
     1374 
     1375        if( [raw isKindOfClass:[NSMutableData class]] ) { 
     1376                data = [raw retain]; 
     1377                string = [[NSString allocWithZone:nil] initWithData:data encoding:[self encoding]]; 
     1378        } else if( [raw isKindOfClass:[NSData class]] ) { 
     1379                data = [raw mutableCopyWithZone:nil]; 
     1380                string = [[NSString allocWithZone:nil] initWithData:data encoding:[self encoding]]; 
     1381        } else if( [raw isKindOfClass:[NSString class]] ) { 
     1382                data = [[raw dataUsingEncoding:[self encoding] allowLossyConversion:YES] mutableCopyWithZone:nil]; 
     1383                string = [raw retain]; 
     1384        } 
     1385 
    14221386        [data appendBytes:"\x0D\x0A" length:2]; 
    14231387 
    14241388        [_chatConnection writeData:data withTimeout:-1. tag:0]; 
     1389 
     1390        [[NSNotificationCenter defaultCenter] postNotificationName:MVChatConnectionGotRawMessageNotification object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:string, @"message", [NSNumber numberWithBool:YES], @"outbound", nil]]; 
     1391 
     1392        [string release]; 
    14251393        [data release]; 
    1426  
    1427         [[NSNotificationCenter defaultCenter] postNotificationName:MVChatConnectionGotRawMessageNotification object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:raw, @"message", [NSNumber numberWithBool:YES], @"outbound", nil]]; 
    14281394} 
    14291395 
     
    15071473        NSParameterAssert( [[user nickname] length] > 0 ); 
    15081474 
    1509 /*      IrssiLock(); 
    1510         const char *mask = [self encodedBytesWithString:[NSString stringWithFormat:@"%@!*@*", [user nickname]]]; 
    1511         if( ! notifylist_find( mask, NULL ) ) notifylist_add( mask, NULL, TRUE, 600 ); 
    1512         IrssiUnlock(); */ 
    15131475} 
    15141476 
     
    15171479        NSParameterAssert( [[user nickname] length] > 0 ); 
    15181480 
    1519 /*      IrssiLock(); 
    1520         notifylist_remove( [self encodedBytesWithString:[NSString stringWithFormat:@"%@!*@*", [user nickname]]] ); 
    1521         IrssiUnlock(); */ 
    15221481} 
    15231482 
     
    15471506 
    15481507                _awayMessage = [message copyWithZone:nil]; 
    1549 /*              const char *msg = [[self class] _flattenedIRCStringForMessage:message withEncoding:[self encoding] andChatFormat:[self outgoingChatFormat]]; 
    1550  
    1551                 IrssiLock(); 
    1552                 if( _chatConnection ) 
    1553                         irc_send_cmdv( (IRC_SERVER_REC *) _chatConnection, "AWAY :%s", msg ); 
    1554                 IrssiUnlock(); */ 
     1508 
     1509                NSData *msg = [[self class] _flattenedIRCDataForMessage:message withEncoding:[self encoding] andChatFormat:[self outgoingChatFormat]]; 
     1510                [self sendRawMessageWithComponents:@"AWAY :", msg, nil]; 
    15551511        } else { 
    15561512                [[self localUser] _setStatus:MVChatUserAvailableStatus]; 
    15571513                [self sendRawMessage:@"AWAY"]; 
    15581514        } 
    1559 } 
    1560  
    1561 #pragma mark - 
    1562  
    1563 - (unsigned int) lag { 
    1564         unsigned int lag = 0; 
    1565  
    1566 /*      IrssiLock(); 
    1567         if( _chatConnection ) 
    1568                 lag = _chatConnection -> lag; 
    1569         IrssiUnlock(); */ 
    1570  
    1571         return lag; 
    15721515} 
    15731516@end 
     
    18071750        signals_remove_module( MODULE_NAME ); 
    18081751} 
    1809  
    1810 + (const char *) _flattenedIRCStringForMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) enc andChatFormat:(MVChatMessageFormat) format { 
     1752*/ 
     1753+ (NSData *) _flattenedIRCDataForMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) enc andChatFormat:(MVChatMessageFormat) format { 
    18111754        NSString *cformat = nil; 
    18121755 
     
    18241767        } 
    18251768 
    1826         NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:enc], @"StringEncoding", [NSNumber numberWithBool:YES], @"NullTerminatedReturn", cformat, @"FormatType", nil]; 
    1827         NSData *data = [message chatFormatWithOptions:options]; 
    1828         return [data bytes]; 
    1829 
    1830  
    1831 #pragma mark - 
    1832  
    1833 + (void) _irssiRunLoop { 
    1834         GMainLoop *glibMainLoop = g_main_new( TRUE ); 
    1835  
    1836         extern BOOL irssiThreadReady; 
    1837         irssiThreadReady = YES; 
    1838  
    1839         extern BOOL MVChatApplicationQuitting; 
    1840         extern unsigned int connectionCount; 
    1841  
    1842         NSAutoreleasePool *pool = nil; 
    1843         while( ! MVChatApplicationQuitting || connectionCount ) { 
    1844                 pool = [[NSAutoreleasePool allocWithZone:nil] init]; 
    1845                 g_main_iteration( TRUE, &irssiLock ); // this will block until one event occurs 
    1846                 [pool release]; 
    1847         } 
    1848  
    1849         pool = nil; 
    1850  
    1851         IrssiLock(); 
    1852  
    1853         [self _deregisterCallbacks]; 
    1854  
    1855         signal_emit( "gui exit", 0 ); 
    1856  
    1857         g_main_destroy( glibMainLoop ); 
    1858         glibMainLoop = NULL; 
    1859  
    1860         irc_deinit(); 
    1861         core_deinit(); 
    1862  
    1863         IrssiUnlock(); 
    1864  
    1865         pthread_mutex_destroy( &irssiLock ); 
    1866 
    1867  
    1868 #pragma mark - 
    1869  
    1870 - (SERVER_REC *) _irssiConnection { 
    1871         return _chatConnection; 
    1872 
    1873  
    1874 - (void) _setIrssiConnection:(SERVER_REC *) server { 
    1875         SERVER_REC *old = _chatConnection; 
    1876  
    1877         if( old ) { 
    1878                 MVIRCChatConnectionModuleData *data = MODULE_DATA( old ); 
    1879                 if( data ) data -> connection = nil; 
    1880                 MODULE_DATA_UNSET( old ); 
    1881         } 
    1882  
    1883         _chatConnection = server; 
    1884  
    1885         if( _chatConnection ) { 
    1886                 server_ref( _chatConnection ); 
    1887  
    1888                 MVIRCChatConnectionModuleData *data = g_new0( MVIRCChatConnectionModuleData, 1 ); 
    1889                 data -> connection = self; 
    1890  
    1891                 MODULE_DATA_SET( server, data ); 
    1892  
    1893                 _chatConnection -> no_reconnect = 1; 
    1894         } 
    1895  
    1896         if( old ) server_unref( old ); 
    1897 
    1898  
    1899 #pragma mark - 
    1900  
    1901 - (SERVER_CONNECT_REC *) _irssiConnectSettings { 
    1902         return _chatConnectionSettings; 
    1903 
    1904  
    1905 - (void) _setIrssiConnectSettings:(SERVER_CONNECT_REC *) settings { 
    1906         SERVER_CONNECT_REC *old = _chatConnectionSettings; 
    1907         _chatConnectionSettings = settings; 
    1908  
    1909         if( _chatConnectionSettings ) { 
    1910                 server_connect_ref( _chatConnectionSettings ); 
    1911                 _chatConnectionSettings -> no_autojoin_channels = TRUE; 
    1912         } 
    1913  
    1914         if( old ) server_connect_unref( old ); 
    1915 
    1916  
     1769        NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:enc], @"StringEncoding", cformat, @"FormatType", nil]; 
     1770        return [message chatFormatWithOptions:options]; 
     1771
     1772/* 
    19171773#pragma mark - 
    19181774 
     
    19461802        [self _setIrssiConnection:NULL]; 
    19471803        [super _didDisconnect]; 
    1948 } 
    1949  
    1950 - (void) _forceDisconnect { 
    1951         if( ! _chatConnection ) return; 
    1952  
    1953         [self _willDisconnect]; 
    1954  
    1955         IrssiLock(); 
    1956  
    1957         if( _chatConnection -> handle ) { 
    1958                 g_io_channel_unref( net_sendbuffer_handle( _chatConnection -> handle ) ); 
    1959                 net_sendbuffer_destroy( _chatConnection -> handle, FALSE); 
    1960                 _chatConnection -> handle = NULL; 
    1961         } 
    1962  
    1963         _chatConnection -> connection_lost = FALSE; 
    1964         _chatConnection -> no_reconnect = FALSE; 
    1965  
    1966         server_disconnect( _chatConnection ); 
    1967  
    1968         [super _didDisconnect]; 
    1969  
    1970         [self _setIrssiConnection:NULL]; 
    1971  
    1972         IrssiUnlock(); 
    19731804} 
    19741805 
     
    20781909                [user release]; 
    20791910        } 
    2080 } 
    2081  
    2082 #pragma mark - 
    2083  
    2084 - (oneway void) _sendMessage:(const char *) msg toTarget:(NSString *) target asAction:(BOOL) action { 
    2085         IrssiLock(); 
    2086  
    2087         if( _chatConnection ) { 
    2088                 if( ! action ) _chatConnection -> send_message( _chatConnection, [self encodedBytesWithString:target], msg, 0 ); 
    2089                 else irc_send_cmdv( (IRC_SERVER_REC *) _chatConnection, "PRIVMSG %s :\001ACTION %s\001", [self encodedBytesWithString:target], msg ); 
    2090         } 
    2091  
    2092         IrssiUnlock(); 
    20931911} */ 
    20941912@end 
  • branches/cocoa-networking/Chat Core/MVIRCChatRoom.m

    r3075 r3080  
    4444- (void) setTopic:(NSAttributedString *) topic { 
    4545        NSParameterAssert( topic != nil ); 
    46  
    47         const char *msg = [MVIRCChatConnection _flattenedIRCStringForMessage:topic withEncoding:[self encoding] andChatFormat:[[self connection] outgoingChatFormat]]; 
    48  
    49 /*      IrssiLock(); 
    50         irc_send_cmdv( (IRC_SERVER_REC *) [[self connection] _irssiConnection], "TOPIC %s :%s", [[self connection] encodedBytesWithString:[self name]], msg ); 
    51         IrssiUnlock(); */ 
     46        NSData *msg = [MVIRCChatConnection _flattenedIRCDataForMessage:topic withEncoding:[self encoding] andChatFormat:[[self connection] outgoingChatFormat]]; 
     47        NSString *prefix = [[NSString allocWithZone:nil] initWithFormat:@"TOPIC %@ :", [self name]]; 
     48        [[self connection] sendRawMessageWithComponents:prefix, msg, nil]; 
     49        [prefix release]; 
    5250} 
    5351 
     
    5654- (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding asAction:(BOOL) action { 
    5755        NSParameterAssert( message != nil ); 
    58         const char *msg = [MVIRCChatConnection _flattenedIRCStringForMessage:message withEncoding:encoding andChatFormat:[[self connection] outgoingChatFormat]]; 
    59         [[self connection] _sendMessage:msg toTarget:[self name] asAction:action]; 
     56        [[self connection] _sendMessage:message withEncoding:encoding toTarget:[self name] asAction:action]; 
    6057} 
    6158 
     
    211208        [super kickOutMemberUser:user forReason:reason]; 
    212209 
    213 /*      IrssiLock(); 
    214  
    215210        if( reason ) { 
    216                 const char *msg = [MVIRCChatConnection _flattenedIRCStringForMessage:reason withEncoding:[self encoding] andChatFormat:[[self connection] outgoingChatFormat]]; 
    217                 irc_send_cmdv( (IRC_SERVER_REC *) [[self connection] _irssiConnection], "KICK %s %s :%s", [[self connection] encodedBytesWithString:[self name]], [[self connection] encodedBytesWithString:[user nickname]], msg )
    218         } else irc_send_cmdv( (IRC_SERVER_REC *) [[self connection] _irssiConnection], "KICK %s %s", [[self connection] encodedBytesWithString:[self name]], [[self connection] encodedBytesWithString:[user nickname]] )
    219  
    220         IrssiUnlock(); */ 
     211                NSData *msg = [MVIRCChatConnection _flattenedIRCDataForMessage:reason withEncoding:[self encoding] andChatFormat:[[self connection] outgoingChatFormat]]; 
     212                NSString *prefix = [[NSString allocWithZone:nil] initWithFormat:@"KICK %@ %@ :", [self name], [user nickname]]
     213               [[self connection] sendRawMessageWithComponents:prefix, msg, nil]
     214                [prefix release]; 
     215        } else [[self connection] sendRawMessageWithFormat:@"KICK %@ %@", [self name], [user nickname]]; 
    221216} 
    222217 
  • branches/cocoa-networking/Chat Core/MVIRCChatUser.m

    r3075 r3080  
    4343- (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding asAction:(BOOL) action { 
    4444        NSParameterAssert( message != nil ); 
    45         const char *msg = [MVIRCChatConnection _flattenedIRCStringForMessage:message withEncoding:encoding andChatFormat:[[self connection] outgoingChatFormat]]; 
    46         [[self connection] _sendMessage:msg toTarget:[self nickname] asAction:action]; 
     45        NSData *msg = [MVIRCChatConnection _flattenedIRCDataForMessage:message withEncoding:encoding andChatFormat:[[self connection] outgoingChatFormat]]; 
     46        [[self connection] _sendMessage:message withEncoding:encoding toTarget:[self nickname] asAction:action]; 
    4747} 
    4848