@@ -164,11 +164,14 @@ - (NSComparisonResult)serverNameCompare:(NSString *)string;
164164
165165
166166@interface MMChannel : NSObject {
167+ channel_T *channel;
168+ int which;
167169 CFSocketRef socket;
168170 CFRunLoopSourceRef runLoopSource;
169171}
170172
171- - (id )initWithChannel : (channel_T *)channel ;
173+ - (id )initWithChannel : (channel_T *)c which : (int )w ;
174+ - (void )read ;
172175@end
173176
174177
@@ -241,7 +244,6 @@ - (id)init
241244 connectionNameDict = [[NSMutableDictionary alloc ] init ];
242245 clientProxyDict = [[NSMutableDictionary alloc ] init ];
243246 serverReplyDict = [[NSMutableDictionary alloc ] init ];
244- channelDict = [[NSMutableDictionary alloc ] init ];
245247
246248 NSBundle *mainBundle = [NSBundle mainBundle ];
247249 NSString *path = [mainBundle pathForResource: @" Colors" ofType: @" plist" ];
@@ -273,7 +275,6 @@ - (void)dealloc
273275 gui_mch_free_font (oldWideFont); oldWideFont = NOFONT;
274276 [blinkTimer release ]; blinkTimer = nil ;
275277 [alternateServerName release ]; alternateServerName = nil ;
276- [channelDict release ]; channelDict = nil ;
277278 [serverReplyDict release ]; serverReplyDict = nil ;
278279 [clientProxyDict release ]; clientProxyDict = nil ;
279280 [connectionNameDict release ]; connectionNameDict = nil ;
@@ -1684,18 +1685,17 @@ - (void)setImState:(BOOL)activated
16841685 [self flushQueue: YES ];
16851686}
16861687
1687- - (void )addChannel : (channel_T *)channel
1688+ - (void * )addChannel : (channel_T *)channel which : ( int ) which
16881689{
1689- NSValue *key = [NSValue valueWithPointer: channel];
16901690 MMChannel *mmChannel =
1691- [[[ MMChannel alloc ] initWithChannel: channel] autorelease ];
1692- [channelDict setObject: mmChannel forKey: key] ;
1691+ [[MMChannel alloc ] initWithChannel: channel which: which ];
1692+ return (__bridge void *)mmChannel ;
16931693}
16941694
1695- - (void )removeChannel : (channel_T *)channel
1695+ - (void )removeChannel : (void *)cookie
16961696{
1697- NSValue *key = [ NSValue valueWithPointer: channel] ;
1698- [channelDict removeObjectForKey: key ];
1697+ MMChannel *mmChannel = (__bridge MMChannel *)cookie ;
1698+ [mmChannel release ];
16991699}
17001700
17011701#ifdef FEAT_BEVAL
@@ -3428,20 +3428,22 @@ static void socketReadCallback(CFSocketRef s,
34283428 const void *data,
34293429 void *info)
34303430{
3431- #ifdef FEAT_CHANNEL
3432- channel_read ((channel_T *)info, FALSE , " socketReadCallback" );
3433- #endif
3431+ MMChannel *mmChannel = (__bridge MMChannel *)info;
3432+ [mmChannel read ];
34343433}
34353434
3436- - (id )initWithChannel : (channel_T *)channel
3435+ - (id )initWithChannel : (channel_T *)c which : ( int ) w
34373436{
34383437 self = [super init ];
34393438 if (!self) return nil ;
34403439
3440+ channel = c;
3441+ which = w;
3442+
34413443 // Tell CFRunLoop that we are interested in channel socket input.
3442- CFSocketContext ctx = {0 , channel , NULL , NULL , NULL };
3444+ CFSocketContext ctx = {0 , (__bridge void *)self , NULL , NULL , NULL };
34433445 socket = CFSocketCreateWithNative (kCFAllocatorDefault ,
3444- channel->ch_sock ,
3446+ channel->ch_pfd [which]. ch_fd ,
34453447 kCFSocketReadCallBack ,
34463448 &socketReadCallback,
34473449 &ctx);
@@ -3455,4 +3457,11 @@ - (id)initWithChannel:(channel_T *)channel
34553457 return self;
34563458}
34573459
3460+ - (void )read
3461+ {
3462+ #ifdef FEAT_CHANNEL
3463+ channel_read (channel, which, " MMChannel_read" );
3464+ #endif
3465+ }
3466+
34583467@end
0 commit comments