The code to vend the object to the network is quite simple: you get the defaultConnection object:
NSConnection *conn = [NSConnection defaultConnection];then you tell the connection which object you want to vend:
[conn setRootObject: reader];and finally, you register it on the network with a certain name:
if (![conn registerName:@"FileReader"]) { NSLog (@"Could not register us as FileReader"); exit (1); }the name is quite important - the client needs to know the name of the server to establish a connection with it and access the vended object (which is the FileReader object in this case).
So, here is the full code for the server:
#include <Foundation/Foundation.h> /* This object does the job of fetching a file from the hard disk */ @interface FileReader : NSObject - (NSString *)getFile: (NSString *)fileName; @end @implementation FileReader - (NSString *)getFile: (NSString *)fileName { return [NSString stringWithContentsOfFile: fileName]; } @end int main (void) { NSAutoreleasePool *pool; FileReader *reader; NSConnection *conn; pool = [NSAutoreleasePool new]; /* Create our FileReader object */ reader = [FileReader new]; /* Get the default connection */ conn = [NSConnection defaultConnection]; /* Make the reader available to other processes */ [conn setRootObject: reader]; /* Register it with name `FileReader' */ if (![conn registerName:@"FileReader"]) { NSLog (@"Could not register us as FileReader"); exit (1); } NSLog (@"Server registered - waiting for connections..."); /* Now enter the run loop waiting forever for clients */ [[NSRunLoop currentRunLoop] run]; return 0; }