home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OpenStep 4.2J (Developer)
/
os42jdev.iso
/
NextDeveloper
/
Examples
/
Foundation
/
TCPTransport
/
TCPTransport_main.m
< prev
Wrap
Text File
|
1996-04-17
|
5KB
|
172 lines
/*
* You may freely copy, distribute and reuse the code in this example.
* NeXT Software, Inc. disclaims any warranty of any kind, expressed or implied,
* as to its fitness for any particular use. This disclaimer applies to all
* source files in this example.
*/
// Test program for TCPPort
//
// On hosts moe, larry, and curly
// larry:
// TCPTransport
//
// curly:
// TCPTransport larry
//
// moe:
// TCPTransport larry
//
//
// If 3 hosts aren't available, on one host try:
// shell1> TCPTransport
//
// shell2> TCPTransport -l 10001
//
// shell3> TCPTransport -l 10002
//
// Other options:
// -l <port-number> listen on this port instead of the default (10000)
// -s <port-number> send to this port instead of to the default (10000)
// -v verbose - print log message from TCPPort
// -V very verbose - print log messages from DO and TCPPort
#import <Foundation/Foundation.h>
#import "TCPPort.h"
#import "RemoteTest.h"
@interface NSConnection (NSConnectionLogging)
+ (void)_toggleLogging;
@end
@interface TCPPort (TCPPortLogging)
+ (void)_toggleLogging;
@end
#define DefaultTCPPortNumber 10000
void main() {
NSAutoreleasePool *pool= [[NSAutoreleasePool alloc] init]; // first thing
NSArray *args = [[NSProcessInfo processInfo] arguments];
unsigned int i, len = [args count];
RemoteTest *testObject;
RemoteTest *otherObject;
NSConnection *conn;
TCPPort *listener, *sender;
NSString *serverName;
NSString *hostName;
unsigned short listenPort, sendPort;
BOOL original, verbosePorts, verboseEverything;
original = YES;
verbosePorts = NO;
verboseEverything = NO;
listenPort = DefaultTCPPortNumber;
sendPort = DefaultTCPPortNumber;
hostName = nil;
serverName = nil;
for (i = 1; i < len; i++) {
if ([[args objectAtIndex:i] isEqual:@"-l"])
listenPort = [[args objectAtIndex:++i] intValue];
else if ([[args objectAtIndex:i] isEqual:@"-s"])
sendPort = [[args objectAtIndex:++i] intValue];
else if ([[args objectAtIndex:i] isEqual:@"-v"])
verbosePorts = YES;
else if ([[args objectAtIndex:i] isEqual:@"-V"])
verboseEverything = YES;
else {
serverName = [args objectAtIndex:i];
original = NO;
}
}
if (verbosePorts || verboseEverything) [TCPPort _toggleLogging];
if (verboseEverything) [NSConnection _toggleLogging];
listener = [[TCPPort alloc] initWithNumber:listenPort];
if (listener == nil) {
NSLog(@"couldn't create a listener!");
[pool release];
exit(1);
}
NSLog(@"listening on TCP port: %@", [listener description]);
conn = [NSConnection connectionWithReceivePort:listener sendPort:listener];
if (conn == nil) {
NSLog(@"couldn't create a connection!");
[pool release];
exit(1);
}
if (original) {
testObject = [[RemoteTest alloc] init];
NSLog(@"Setting root object");
[conn setRootObject:testObject];
[testObject release]; // let conn own it
}
else {
if (serverName == nil) serverName = [[NSHost currentHost] name];
sender = [listener connectToNumber:sendPort host:serverName];
if (sender == nil) {
NSLog(@"couldn't create a sender (%@ %d)!", serverName, sendPort);
[pool release];
exit(1);
}
NSLog(@"connecting to: %@", [sender description]);
conn = [NSConnection connectionWithReceivePort:listener
sendPort:sender];
if (conn == nil) {
NSLog(@"couldn't create a connection!");
[pool release];
exit(1);
}
NSLog(@"Fetching root object from host %@", serverName);
testObject = (RemoteTest *)[conn rootProxy];
if (!testObject) {
NSLog(@"couldn't get root proxy!");
[pool release];
exit(1);
}
NSLog(@"Remote host: %@", [[testObject host] name]);
NSLog(@"Remote date: %@", [[testObject date] description]);
NSLog(@"Sending hello message to host %@", serverName);
hostName = [[NSHost currentHost] name];
[testObject log:
[NSString stringWithFormat:@"Hello from %@!", hostName]];
NSLog(@"Fetching other object from host %@", serverName);
otherObject = (RemoteTest *)[testObject otherObject];
if (otherObject == nil) NSLog(@"Other object is nil");
else {
NSLog(@"Other object host: %@", [[otherObject host] name]);
NSLog(@"Other object date: %@", [[otherObject date] description]);
NSLog(@"Sending hello message to host %@",
[[otherObject host] name]);
[otherObject log:
[NSString stringWithFormat:@"Hello from %@!", hostName]];
}
NSLog(@"Setting other object on host %@ to my object", serverName);
[testObject setOtherObject:[[[RemoteTest alloc] init] autorelease]];
}
/* become a server */
NSLog(@"Starting run loop");
[[NSRunLoop currentRunLoop] run];
NSLog(@"exiting server!");
[pool release];
exit(0);
}