This is STAppClient.m in view mode; [Download] [Up]
/* STAppClient.m written by Robert Vasvari 1/95 This class connects to the remote server, and implements basic error handling (if the server goes down it will automatically reconnect. */ #import "STDefines.h" #import "STAppClient.h" #import "STAppServer.h" @implementation STAppClient /* this is a sample method to connect to a fictitious server app. servernameProxy is an instance variable that represents a connection to a server. You app accesses the server like this: [[STAppClient servername] remoteMessage:arg]; + servername { if(!servernameProxy) { servernameProxy=[self connectToApp: [NSString stringWithCString:servername] usingProtocol:@protocol(servernameProtocol)]; } return [servernameProxy remoteServer]; } */ + connectToApp:(NSString *)anAppName usingProtocol:(Protocol *)aProtocol { id newClient=[[self alloc] init]; [newClient setProtocol:aProtocol]; [newClient setServerName:anAppName]; if([newClient getRemoteServer]) return newClient; else return nil; } - setProtocol:aProtocol { proto=aProtocol; return self; } - setServerName:(NSString *)anAppName { if(serverName) [serverName autorelease]; serverName=[anAppName retain]; return self; } - getRemoteServer { char buf[1024]; NSString *s; if(!serverName) { NXRunAlertPanel("Alert","Do not know who to connect to!", NULL,NULL,NULL); return self; } s=[NSString stringWithFormat:@"%@", serverName]; gethostname(buf,1024); /* this will start it if it isn't running */ if(NXPortFromName([serverName cString], NULL)!=PORT_NULL) { /* get the proxy (times out after a minute) */ remoteServer=[NXConnection connectToName: [s cString] onHost:buf]; /* To make sure the app is fully initialized you should send a message to the server that returns a value. That will block your app until the server is fully initialized: */ [(STAppServer *)remoteServer appName]; } else { NXRunAlertPanel("Alert","Cannot find %s", NULL,NULL,NULL, [serverName cString]); return nil; } [[remoteServer connectionForProxy] registerForInvalidationNotification:self]; [remoteServer setProtocolForProxy:proto]; return self; } - senderIsInvalid:sender { //printf("in senderIsValid\n"); /* if the server quits, the system frees the proxy */ remoteServer=nil; return self; } - remoteServer { /* make sure we have a connection */ if(!remoteServer) [self getRemoteServer]; return remoteServer; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.