Changeset 3080
- Timestamp:
- 12/24/05 23:28:57 (3 years ago)
- Files:
-
- branches/cocoa-networking/Chat Core/MVChatConnection.h (modified) (1 diff)
- branches/cocoa-networking/Chat Core/MVChatConnection.m (modified) (2 diffs)
- branches/cocoa-networking/Chat Core/MVIRCChatConnection.h (modified) (1 diff)
- branches/cocoa-networking/Chat Core/MVIRCChatConnection.m (modified) (14 diffs)
- branches/cocoa-networking/Chat Core/MVIRCChatRoom.m (modified) (3 diffs)
- branches/cocoa-networking/Chat Core/MVIRCChatUser.m (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/cocoa-networking/Chat Core/MVChatConnection.h
r3072 r3080 211 211 #pragma mark - 212 212 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; 215 215 - (void) sendRawMessageWithFormat:(NSString *) format, ...; 216 - (void) sendRawMessageWithComponents:(id) firstComponent, ...; 216 217 217 218 #pragma mark - branches/cocoa-networking/Chat Core/MVChatConnection.m
r3072 r3080 498 498 #pragma mark - 499 499 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 { 518 501 [self sendRawMessage:raw immediately:NO]; 519 502 } 520 503 521 - (void) sendRawMessage:( NSString *) raw immediately:(BOOL) now {504 - (void) sendRawMessage:(id) raw immediately:(BOOL) now { 522 505 // subclass this method 523 506 [self doesNotRecognizeSelector:_cmd]; … … 531 514 532 515 NSString *command = [[NSString allocWithZone:nil] initWithFormat:format arguments:ap]; 516 517 va_end( ap ); 518 533 519 [self sendRawMessage:command immediately:NO]; 534 520 [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 * ) ); 535 543 536 544 va_end( ap ); 545 546 [self sendRawMessage:data immediately:NO]; 547 [data release]; 537 548 } 538 549 branches/cocoa-networking/Chat Core/MVIRCChatConnection.h
r3079 r3080 29 29 - (void) _handleCommand:(id) command parameters:(NSArray *) parameters fromSender:(NSString *) sender username:(NSString *) user host:(NSString *) host; 30 30 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; 33 33 34 34 - (void) _processErrorCode:(int) errorCode withContext:(char *) context; 35 35 36 36 - (void) _updateKnownUser:(MVChatUser *) user withNewNickname:(NSString *) nickname; 37 38 - (oneway void) _sendMessage:(const char *) msg toTarget:(NSString *) target asAction:(BOOL) action;39 37 @end 40 38 branches/cocoa-networking/Chat Core/MVIRCChatConnection.m
r3079 r3080 1054 1054 1055 1055 @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 1095 1056 + (NSArray *) defaultServerPorts { 1096 1057 return [NSArray arrayWithObjects:[NSNumber numberWithUnsignedShort:6667],[NSNumber numberWithUnsignedShort:6660],[NSNumber numberWithUnsignedShort:6669],[NSNumber numberWithUnsignedShort:7000],[NSNumber numberWithUnsignedShort:994], nil]; … … 1101 1062 - (id) init { 1102 1063 if( ( self = [super init] ) ) { 1103 _proxyUsername = nil;1104 _proxyPassword = nil;1105 1064 _chatConnection = [[AsyncSocket allocWithZone:nil] initWithDelegate:self]; 1106 1065 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 1107 1073 _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(); */1133 1074 } 1134 1075 … … 1147 1088 [_proxyPassword release]; 1148 1089 _proxyPassword = nil; 1149 1150 // [self _setIrssiConnection:NULL];1151 // [self _setIrssiConnectSettings:NULL];1152 1153 // extern unsigned int connectionCount;1154 // connectionCount--;1155 1090 1156 1091 [super dealloc]; … … 1192 1127 [self _willConnect]; // call early so other code has a chance to change our info 1193 1128 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]; 1197 1131 1198 1132 /* IrssiLock(); … … 1248 1182 if( [self status] == MVChatConnectionConnectedStatus ) { 1249 1183 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"]; 1253 1187 } 1254 1188 … … 1276 1210 NSParameterAssert( [nickname length] > 0 ); 1277 1211 1212 if( [nickname isEqualToString:[self nickname]] ) 1213 return; 1214 1278 1215 id old = _nickname; 1279 1216 _nickname = [nickname copyWithZone:nil]; 1280 1217 [old release]; 1281 1218 1282 if( ! _currentNickname ) 1219 if( ! _currentNickname || ! [self isConnected] ) { 1220 id old = _currentNickname; 1283 1221 _currentNickname = [_nickname retain]; 1284 1285 if( [self isConnected] && ! [nickname isEqualToString:[self nickname]] ) 1222 [old release]; 1223 } 1224 1225 if( [self isConnected] ) 1286 1226 [self sendRawMessageWithFormat:@"NICK %@", nickname]; 1287 1227 } … … 1413 1353 #pragma mark - 1414 1354 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 { 1416 1369 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 1422 1386 [data appendBytes:"\x0D\x0A" length:2]; 1423 1387 1424 1388 [_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]; 1425 1393 [data release]; 1426 1427 [[NSNotificationCenter defaultCenter] postNotificationName:MVChatConnectionGotRawMessageNotification object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:raw, @"message", [NSNumber numberWithBool:YES], @"outbound", nil]];1428 1394 } 1429 1395 … … 1507 1473 NSParameterAssert( [[user nickname] length] > 0 ); 1508 1474 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(); */1513 1475 } 1514 1476 … … 1517 1479 NSParameterAssert( [[user nickname] length] > 0 ); 1518 1480 1519 /* IrssiLock();1520 notifylist_remove( [self encodedBytesWithString:[NSString stringWithFormat:@"%@!*@*", [user nickname]]] );1521 IrssiUnlock(); */1522 1481 } 1523 1482 … … 1547 1506 1548 1507 _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]; 1555 1511 } else { 1556 1512 [[self localUser] _setStatus:MVChatUserAvailableStatus]; 1557 1513 [self sendRawMessage:@"AWAY"]; 1558 1514 } 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;1572 1515 } 1573 1516 @end … … 1807 1750 signals_remove_module( MODULE_NAME ); 1808 1751 } 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 { 1811 1754 NSString *cformat = nil; 1812 1755 … … 1824 1767 } 1825 1768 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 /* 1917 1773 #pragma mark - 1918 1774 … … 1946 1802 [self _setIrssiConnection:NULL]; 1947 1803 [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();1973 1804 } 1974 1805 … … 2078 1909 [user release]; 2079 1910 } 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();2093 1911 } */ 2094 1912 @end branches/cocoa-networking/Chat Core/MVIRCChatRoom.m
r3075 r3080 44 44 - (void) setTopic:(NSAttributedString *) topic { 45 45 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]; 52 50 } 53 51 … … 56 54 - (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding asAction:(BOOL) action { 57 55 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]; 60 57 } 61 58 … … 211 208 [super kickOutMemberUser:user forReason:reason]; 212 209 213 /* IrssiLock();214 215 210 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]]; 221 216 } 222 217 branches/cocoa-networking/Chat Core/MVIRCChatUser.m
r3075 r3080 43 43 - (void) sendMessage:(NSAttributedString *) message withEncoding:(NSStringEncoding) encoding asAction:(BOOL) action { 44 44 NSParameterAssert( message != nil ); 45 const char *msg = [MVIRCChatConnection _flattenedIRCStringForMessage:message withEncoding:encoding andChatFormat:[[self connection] outgoingChatFormat]];46 [[self connection] _sendMessage:m sg 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]; 47 47 } 48 48
