#include <Foundation/Foundation.h>
#include "protocol.h"
@interface Server : NSObject <ServerProtocol>
{
}
@end
@implementation Server
- sendString: (const char *)msg
{
printf("Receive from Client : %s\n", msg);
fflush(stdout);
return self;
}
- sendObject: (id)str
{
printf ("Name : %s\n", GSNameFromSelector(_cmd));
NSLog(@"%s : %@", GSClassNameFromObject(str), str);
fflush(stdout);
return @"OK";
}
- (void) getObject: (id *)str
{
static NSString *ret = @"Server message";
printf ("Name : %s\n", GSNameFromSelector(_cmd));
NSLog(@"%s : %@", GSClassNameFromObject(*str), *str);
*str = ret;
printf("Return (%s)\n", [*str cString]);
fflush(stdout);
}
- connectionBecameInvalid: notification
{
return self;
}
- (NSConnection*) connection: ancestor didConnect: newConn
{
printf("-- %s\n", GSNameFromSelector(_cmd));
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(connectionBecameInvalid:)
name: NSConnectionDidDieNotification
object: newConn];
[newConn setDelegate: self];
return newConn;
}
@end
int main(int argc, char *argv[])
{
id srv = [[Server alloc] init];
NSAutoreleasePool *arp = [NSAutoreleasePool new];
id pchk = [NSProtocolChecker protocolCheckerWithTarget: srv
protocol: @protocol(ServerProtocol)];
NSPortNameServer *ns = [NSSocketPortNameServer sharedInstance];
NSPort *port = [NSSocketPort port];
NSConnection *conn = [NSConnection connectionWithReceivePort: port sendPort: port];
[conn setRootObject: pchk];
[conn registerName: @"nsconnServer" withNameServer: ns];
[[NSNotificationCenter defaultCenter]
addObserver: srv
selector: @selector(connectionBecameInvalid:)
name: NSConnectionDidDieNotification
object: conn];
[conn setDelegate: srv];
printf("Running...\n");
[[NSRunLoop currentRunLoop] run];
[arp release];
return 0;
}