This is ClientController.m in view mode; [Download] [Up]
// // $Id: ClientController.m,v 1.11 1997/10/31 04:51:38 nygard Exp $ // // // This file is a part of Empire, a game of exploration and conquest. // Copyright (C) 1996 Steve Nygard // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // // You may contact the author by: // e-mail: nygard@telusplanet.net // #import "Empire.h" RCSID ("$Id: ClientController.m,v 1.11 1997/10/31 04:51:38 nygard Exp $"); #import "ClientController.h" #import "Brain.h" #import "DistributedGameManager.h" #import "NewGameController.h" //====================================================================== // Provides control over the connection to the server. It also has // to show the client player selection panel, and create the client // game manager. //====================================================================== @implementation ClientController - (void) awakeFromNib { [clientWindow setTitle:[NSString stringWithFormat:@"Client %c %@", 208, [[NSHost currentHost] name]]]; empireServer = nil; } //---------------------------------------------------------------------- - initWithBrain:(Brain *)theBrain { NSString *nibFile; BOOL loaded; [super init]; nibFile = @"ClientWindow.nib"; loaded = [NSBundle loadNibNamed:nibFile owner:self]; if (loaded == NO) { NSLog (@"Could not load %@.", nibFile); [super dealloc]; return nil; } brain = [theBrain retain]; return self; } //---------------------------------------------------------------------- - (void) dealloc { SNRelease (brain); [super dealloc]; } //---------------------------------------------------------------------- - (void) showPanel { [clientWindow makeKeyAndOrderFront:self]; } //---------------------------------------------------------------------- - (void) connectAction:sender { NSProtocolChecker *protocolChecker; // Note: When disconnected, the empireServer remains set... and probably shouldn't. NSAssert (empireServer == nil, @"Already connected."); // Note: The host should end up as @"*"... empireServer = [[NSConnection rootProxyForConnectionWithRegisteredName:SERVER_PORT_NAME host:[serverHostTextfield stringValue]] retain]; NSAssert (empireServer != nil, @"Connection failed."); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (connectionDidDie:) name:NSConnectionDidDieNotification object:[empireServer connectionForProxy]]; [statusTextfield setStringValue:@"Connected."]; serverConnection = [[empireServer connectionForProxy] retain]; NSAssert (serverConnection != nil, @"serverConnection is nil."); [empireServer setProtocolForProxy:@protocol (EmpireServerConnectionProtocol)]; protocolChecker = [NSProtocolChecker protocolCheckerWithTarget:self protocol:@protocol (EmpireClientConnectionProtocol)]; NSAssert (protocolChecker != nil, @"A protocol checker could not be allocated.\n"); NS_DURING { //[empireServer showText:@"Hello server, said the client."]; [empireServer client:protocolChecker onHost:[[NSHost currentHost] name]]; [empireServer ping]; } NS_HANDLER { EHAND; } NS_ENDHANDLER; } //---------------------------------------------------------------------- - (void) disconnectAction:sender { NSAssert (serverConnection != nil, @"Client not connected."); [empireServer aboutToDisconnect:self]; [serverConnection invalidate]; SNRelease (serverConnection); SNRelease (empireServer); //[statusTextfield setStringValue:@"Not connected."]; } //---------------------------------------------------------------------- - (void) showText:(NSString *)format, ... { NSMutableString *message; NSRange selected; va_list ap; va_start(ap, format); message = [[[NSMutableString alloc] initWithFormat:format arguments:ap] autorelease]; [message appendString:@"\n"]; va_end(ap); [messageText selectAll:nil]; selected = [messageText selectedRange]; selected.location = selected.length; selected.length = 0; [messageText setSelectedRange:selected]; [messageText replaceCharactersInRange:selected withString:message]; [messageText scrollRangeToVisible:selected]; } //---------------------------------------------------------------------- - (void) ping { [self showText:@"We were pinged..."]; } //---------------------------------------------------------------------- - (void) aboutToDisconnect:sender { [[sender connectionForProxy] invalidate]; } //---------------------------------------------------------------------- - (void) connectionDidDie:(NSNotification *)notification { [statusTextfield setStringValue:@"Not connected."]; [[NSNotificationCenter defaultCenter] removeObserver:self name:nil object:[notification object]]; } //---------------------------------------------------------------------- - (void) choosePlayer:(Player)number forMap:(Map *)worldMap master:masterGameManager { DistributedGameManager *gameManager; NewGameController *newGameController; [masterGameManager setProtocolForProxy:@protocol (EmpireGameManagerProtocol)]; gameManager = [[[DistributedGameManager alloc] init] autorelease]; [gameManager startGameWithMap:worldMap master:masterGameManager]; newGameController = [brain newGameController]; [newGameController choosePlayer:number forGameManager:gameManager]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.