Hello Devs, I'd like some feedback on my design here as I'm building an API that I hope will be of use to the community, and some of the finer nuances of Cocoa still escape me.
I'm building a class called TDSConnection which is part of a object graph providing connectivity to the Tabular Data Stream format in objective-c. (TDS is the Microsoft SQL protocol). What I've got is some interesting threading and synchronization issues. The one that I'm trying to check for correctness currently is thus: I have a method -[TDSConnection open] which should open two NSStreams (input and output), block until both are open or erred then perform the TDS packets for login. The method of doing this for me looks like this: - (void)open { [self close]; [NSStream getStreamsToHost:host port:port inputStream:&inputStream outputStream:&outputStream]; [inputStream setDelegate:self]; [outputStream setDelegate:self]; [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [inputStreamCondition lock]; [outputStreamCondition lock]; [inputStream open]; [outputStream open]; [inputStreamCondition wait]; [outputStreamCondition wait]; } - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { if (stream == inputStream) { [self handleInputStreamEvent:eventCode]; } else if (stream == outputStream) { [self handleOutputStreamEvent:eventCode]; } else { NSLog(@"Recieved a stream event for instance %@ which was not the input or output stream", stream); } } - (void)handleInputStreamEvent:(NSStreamEvent)eventCode { switch (eventCode) { case NSStreamEventOpenCompleted: [inputStreamCondition signal]; break; default: break; } } - (void)handleOutputStreamEvent:(NSStreamEvent)eventCode { switch (eventCode) { case NSStreamEventOpenCompleted: [outputStreamCondition signal]; break; default: break; } } As can be seen, I am using a NSCondition to block the main thread until I receive both NSStreamEventOpenCompleted events. I have a feeling that this code smells a bit, and was wondering if someone who's done some networking programming has recommendations. Grateful as always, Richard _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com