Problem Tutorial: This is the Message
Hello,
I read the tutorial "This is the Message" (http://www.macresearch.org/cocoa-scientists-part-xxix-message) and I'm trying implement client socket in my iphone simulator.
I run server in my mac (code downloaded, without changes) and run iphone client. However I don't find service (netServiceBrowser:didFindService: method not call).
Could anybody send me client xcode project for iphone about implementation this tutorial or find my error please?
Excuse me my horrible english. Thanks.
#import "ClientController.h"
#import "MTMessageBroker.h"
#import "MTMessage.h"
#import "AsyncSocket.h"
@interface ClientController ()
@property (readwrite, retain) NSNetServiceBrowser *browser;
@property (readwrite, retain) NSMutableArray *services;
@property (readwrite, assign) BOOL isConnected;
@property (readwrite, retain) NSNetService *connectedService;
@property (readwrite, retain) MTMessageBroker *messageBroker;
@end
@implementation ClientController
@synthesize browser;
@synthesize services;
@synthesize isConnected;
@synthesize connectedService;
@synthesize socket;
@synthesize messageBroker;
-(void)awakeFromNib {
services = [NSMutableArray new];
self.browser = [[NSNetServiceBrowser new] autorelease];
self.browser.delegate = self;
self.isConnected = NO;
[self search:nil];
}
-(void)dealloc {
self.connectedService = nil;
self.browser = nil;
self.socket = nil;
self.messageBroker.delegate = nil;
self.messageBroker = nil;
[services release];
[super dealloc];
}
-(IBAction)search:(id)sender {
[self.browser searchForServicesOfType:@"_cocoaforscientists._tcp." inDomain:@""];
NSLog(@"Searching: %@",services);
}
-(IBAction)connect:(id)sender {
NSNetService *remoteService = [services objectAtIndex:0];
remoteService.delegate = self;
[remoteService resolveWithTimeout:30];
NSLog(@"Connect");
}
-(IBAction)send:(id)sender {
NSData *data = [textView.text dataUsingEncoding:NSUTF8StringEncoding];
MTMessage *newMessage = [[[MTMessage alloc] init] autorelease];
newMessage.tag = 100;
newMessage.dataContent = data;
[self.messageBroker sendMessage:newMessage];
}
#pragma mark AsyncSocket Delegate Methods
-(void)onSocketDidDisconnect:(AsyncSocket *)sock {
NSLog(@"Socket disconnected");
}
-(BOOL)onSocketWillConnect:(AsyncSocket *)sock {
if ( messageBroker == nil ) {
[sock retain];
return YES;
}
return NO;
}
-(void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port {
MTMessageBroker *newBroker = [[[MTMessageBroker alloc] initWithAsyncSocket:socket] autorelease];
[sock release];
newBroker.delegate = self;
self.messageBroker = newBroker;
self.isConnected = YES;
NSLog(@"Did connect");
}
#pragma mark Net Service Browser Delegate Methods
-(void)netServiceBrowser:(NSNetServiceBrowser *)aBrowser didFindService:(NSNetService *)aService moreComing:(BOOL)more {
[services addObject:aService];
NSLog(@"Did find service:%@",[aService name]);
}
-(void)netServiceBrowser:(NSNetServiceBrowser *)aBrowser didRemoveService:(NSNetService *)aService moreComing:(BOOL)more {
[services removeObject:aService];
if ( aService == self.connectedService ) self.isConnected = NO;
}
-(void)netServiceDidResolveAddress:(NSNetService *)service {
NSError *error;
self.connectedService = service;
self.socket = [[[AsyncSocket alloc] initWithDelegate:self] autorelease];
[self.socket connectToAddress:service.addresses.lastObject error:&error];
}
-(void)netService:(NSNetService *)service didNotResolve:(NSDictionary *)errorDict {
NSLog(@"Could not resolve: %@", errorDict);
}
@end



