problem with distributed objects
problem with distributed objects
- Subject: problem with distributed objects
- From: Eric Smith <email@hidden>
- Date: Mon, 15 Feb 2010 08:51:20 -0800
OK, I'm back.
I have some distributed object code that used to work just great (back in the Tiger days, I think), and now does not. I see the error: "[NSPortCoder sendBeforeTime:sendReplyPort:] timed out", when I try to get the rootProxy from a connection. I see this mentioned here and there on various mailing lists, but haven't seen any solution.
I need to provide a DO across a network. The simple code Apple provides in the DO programming guide does work on a single machine:
vend it
/* Assume serverObject has a valid value of an object to be vended. */
NSConnection *theConnection;
theConnection = [NSConnection defaultConnection];
[theConnection setRootObject:serverObject];
if ([theConnection registerName:@"server"] == NO) {
/* Handle error. */
}
get it
id theProxy;
theProxy = [[NSConnection
rootProxyForConnectionWithRegisteredName:@"server"
host:nil] retain];
[theProxy setProtocolForProxy:@protocol(ServerProtocol)];
But if one initializes the connection with an NSSocketPort, which is required if one wants to talk beyond a single machine, the registerName message fails. So, I whip out the code that used to work. The few relevant parts listed below:
vend it:
conduitPort = [[NSSocketPort alloc] init];
myConduit = [[ServerConduit alloc] init];
conduitConnection = [[NSConnection alloc] initWithReceivePort:conduitPort sendPort:nil];
[conduitConnection setRootObject:myConduit];
get it:
- (void)netServiceDidResolveAddress:(NSNetService *)netService{
struct sockaddr *address;
NSConnection* theConnection;
NSSocketPort* thePort;
NSSocketPort* socket;
printf("\resolved address\n");
socket = [[NSSocketPort alloc] init];
if([[netService addresses] count] > 0){
address = (struct sockaddr *)[[[netService addresses] objectAtIndex:0] bytes];
thePort = [[NSSocketPort alloc] initRemoteWithProtocolFamily:address->sa_family socketType:SOCK_STREAM protocol:0 address:[[netService addresses] objectAtIndex:0]];
theConnection = [[NSConnection alloc] initWithReceivePort:nil sendPort:thePort];
[thePort release];
id theProxy = [theConnection rootProxy];
}else{
NSLog(@"Could not find an address for the service.");
}
}
When I call rootProxy, I get the time out error. Does anyone have a dirt-simple sample app I can look at that vends, and gets, a DO over a network on 10.5 or later?!
Thanks for the help,
Eric
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden