This is PlayerReceiver.m in view mode; [Download] [Up]
#import "PlayerReceiver.h" #import "Player.h" #import <appkit/Window.h> #import <appkit/TextField.h> #import <appkit/Application.h> #import <appkit/Panel.h> #import <appkit/Matrix.h> #import <objc/NXStringTable.h> #import "PlayerListener.h" #import "PlayerSpeaker.h" #import <stdio.h> #define TIMEOUT 5000 @implementation PlayerReceiver /* see class notes 8-11 */ - appWillInit:sender; { pSpeaker = [[PlayerSpeaker alloc] init]; [pSpeaker setSendTimeout:TIMEOUT]; [pSpeaker setDelegate:NXApp]; [NXApp setAppSpeaker:pSpeaker]; return self; } - getMyName:sender; { char *myPlayerName = "PlayerA"; char *myHostName = "alfred.econ.lsa.umich.edu"; char *refereeHost = "alfred.econ.lsa.umich.edu"; char realHostname[65]; int speakerResult; port_t refereePort; int whichRow; whichRow = [nameButtons selectedRow]; switch (whichRow) { case 0: myPlayerName = "PlayerA"; break; case 1: myPlayerName = "PlayerB"; break; case 2: myPlayerName = NXCopyStringBuffer([myPlayerNameBox stringValue]); break; } printf("myPlayerName is %s.", myPlayerName); pListener = [[PlayerListener alloc] init]; [pListener setDelegate:NXApp]; [NXApp setAppListener:pListener]; [pListener checkInAs:myPlayerName]; [pListener setTimeout:TIMEOUT]; [pListener addPort]; [myWindow setTitle:myPlayerName]; [myNamePanel close]; whichRow = [refereeButtons selectedRow]; switch (whichRow) { case 0: refereeHost = "alfred.econ.lsa.umich.edu"; break; case 1: refereeHost = "petrarch.ccs.itd.umich.edu"; break; case 2: refereeHost = NXCopyStringBuffer([myRefereeHostBox stringValue]); break; } [myPlayer refereeHostIs:refereeHost]; gethostname(realHostname, 65); myHostName = NXCopyStringBuffer(realHostname); printf("getMyName: Referee host is %s. Player host is %s.\n", refereeHost, myHostName); refereePort = [self getPortFor:"Referee" atHost:refereeHost]; speakerResult = [[NXApp appSpeaker] remoteCheckInPlayer:myPlayerName atHost:myHostName]; if (speakerResult != 0) [self speakerError:"Referee"]; /* Should do some error checking here! */ return self; } //* //*We have to make sure to free up the speaker and listener we created above // * -free; { [pListener free]; [pSpeaker free]; [super free]; return self; } - remotePlayGameWith:(char *)opponentName atHost:(char *)opponentHost myPullCard:(int)mypull myPushCard:(int)mypush hisPullCard:(int)hispull hisPushCard:(int)hispush; { [myPlayer playGameWith:opponentName atHost:opponentHost myPullCard:mypull myPushCard:mypush hisPullCard:hispull hisPushCard:hispush]; return self; } - remotePlayRandomGameWith:(char *)opponentName atHost:(char *)opponentHost myPullCard:(int)mypull myPushCard:(int)mypush hisPullCard:(int)hispull hisPushCard:(int)hispush; { [myPlayer playRandomGameWith:opponentName atHost:opponentHost myPullCard:mypull myPushCard:mypush hisPullCard:hispull hisPushCard:hispush]; return self; } - remotePlayerReset; { [myPlayer playerReset]; return self; } - remoteComputePayoffs; { [myPlayer computePayoffs]; return self; } - remoteMySidePaymentIs:(int)sidePayment; { [myPlayer mySidePaymentIs:sidePayment]; return self; } - remoteMyChoiceIs:(int)choice; { [myPlayer myChoiceIs:choice]; return self; } - remoteStartPhaseTwo; { [myPlayer startPhaseTwo]; return self; } - remotePlayerNumberIs:(int)num; { [myPlayer playerNumberIs:num]; return self; } - remoteGameIsOver; { NXRunAlertPanel("Game is over...", "Thanks for playing.\n", "OK", 0, 0, NULL); exit(0); return self; } - remoteNudge; { [myPlayer nudge]; return self; } /*----------------------------------------------------------------------*/ /* The following is boilerplate that can be inserted in any application */ /*----------------------------------------------------------------------*/ - (port_t)getPortFor:(char *)appName atHost:(char *)appHost { port_t appPort; /* get port */ appPort = NXPortFromName(appName, appHost); if (appPort == PORT_NULL) { NXRunAlertPanel("Define...", "%s Port was not found.\n", "OK", 0, 0, appName); } [[NXApp appSpeaker] setSendPort:appPort]; return appPort; } - speakerError:(char *)receiverName { NXRunAlertPanel("Define...", "message to %s failed.\n", "OK", 0, 0, receiverName); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.