]> Dogcows Code - chaz/thecheat/blobdiff - AppController.m
update contact information and project URL
[chaz/thecheat] / AppController.m
index acd33b8639403a3ad4441792114865613c969ae5..1a787a2f563ca520fdd99e77e2b5d1e4ebad24cb 100644 (file)
@@ -1,76 +1,61 @@
 
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Project:   The Cheat
-//
-// File:      AppController.m
-// Created:   Wed Aug 13 2003
-//
-// Copyright: 2003 Chaz McGarvey.  All rights reserved.
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/*
+ * The Cheat - The legendary universal game trainer for Mac OS X.
+ * http://www.brokenzipper.com/trac/wiki/TheCheat
+ *
+ * Copyright (c) 2003-2011, Charles McGarvey et al.
+ *
+ * Distributable under the terms and conditions of the 2-clause BSD
+ * license; see the file COPYING for the legal text of the license.
+ */
 
 #import "AppController.h"
 
-#include "cheat_shared.h"
-
+#import "CheatDocument.h"
 #import "AboutBoxController.h"
+#import "HelpController.h"
 #import "PreferenceController.h"
-#import "NetTrafficController.h"
-
-#import "CheatListener.h"
-#import "CheatServer.h"
 
-#import "ServerHolder.h"
+@implementation AppController
 
-#import <Chaz/CMUpdateCheck.h>
 
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+#pragma mark Initialization
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-@implementation AppController
 
 + (void)initialize
 {
-       NSMutableDictionary             *defaults = [NSMutableDictionary dictionary];
-       char                                    temp[104];
+       NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
        
-       // change the socket path to reside in the home directory of the current user
-       strncpy( temp, [NSHomeDirectory() lossyCString], 103 );
-       strncat( temp, TCDefaultListenPath, 103 - strlen(TCDefaultListenPath) );
-       strncpy( TCDefaultListenPath, temp, 103 );
-
-       [defaults setObject:[NSNumber numberWithBool:TCGlobalPlaySounds] forKey:TCPlaySoundsPref];
-       [defaults setObject:[NSNumber numberWithBool:TCGlobalWindowsOnTop] forKey:TCWindowsOnTopPref];
-       [defaults setObject:[NSNumber numberWithBool:TCGlobalUpdateCheck] forKey:TCUpdateCheckPref];
-       [defaults setObject:[NSNumber numberWithBool:TCGlobalAllowRemote] forKey:TCAllowRemotePref];
-       [defaults setObject:[NSNumber numberWithInt:TCGlobalListenPort] forKey:TCListenPortPref];
-       [defaults setObject:[NSString stringWithFormat:@"%@'s Computer", NSFullUserName()] forKey:TCBroadcastNamePref];
-       [defaults setObject:[NSNumber numberWithInt:TCGlobalHitsDisplayed] forKey:TCHitsDisplayedPref];
-
+       TCFirstLaunchPref = [[NSString stringWithFormat:@"TC%@%@Pref", ChazAppName(), ChazAppVersion()] retain];
+       NSString *broadcastName = [NSString stringWithFormat:@"%@'s Computer", NSFullUserName()];
+       
+       // register user defaults
+       [defaults setObject:[NSNumber numberWithBool:NO] forKey:TCFirstLaunchPref];
+       [defaults setObject:[NSNumber numberWithBool:NO] forKey:TCWindowsOnTopPref];
+       [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCUpdateCheckPref];
+       [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCDisplayValuesPref];
+       [defaults setObject:[NSNumber numberWithFloat:1.0] forKey:TCValueUpdatePref];
+       [defaults setObject:[NSNumber numberWithInt:1000] forKey:TCHitsDisplayedPref];
+       [defaults setObject:[NSNumber numberWithBool:NO] forKey:TCRunServerPref];
+       [defaults setObject:broadcastName forKey:TCBroadcastNamePref];
+       [defaults setObject:[NSNumber numberWithInt:TCDefaultListenPort] forKey:TCListenPortPref];
+       [defaults setObject:[NSNumber numberWithFloat:gFadeAnimationDuration] forKey:TCFadeAnimationPref];
+       [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCAskForSavePref];
+       [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCSwitchVariablesPref];
+       [defaults setObject:[NSNumber numberWithBool:YES] forKey:TCAutoStartEditingVarsPref];
+
+       // register it
        [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
-
-       TCGlobalPlaySounds = [[NSUserDefaults standardUserDefaults] boolForKey:TCPlaySoundsPref];
-       TCGlobalWindowsOnTop = [[NSUserDefaults standardUserDefaults] boolForKey:TCWindowsOnTopPref];
-       TCGlobalUpdateCheck = [[NSUserDefaults standardUserDefaults] boolForKey:TCUpdateCheckPref];
-       TCGlobalAllowRemote = [[NSUserDefaults standardUserDefaults] boolForKey:TCAllowRemotePref];
-       TCGlobalListenPort = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref];
-       TCGlobalHitsDisplayed = [[NSUserDefaults standardUserDefaults] integerForKey:TCHitsDisplayedPref];
+       
+       // set globals
+       gFadeAnimationDuration = [[NSUserDefaults standardUserDefaults] floatForKey:TCFadeAnimationPref];
 }
 
 - (id)init
 {
-       if ( self = [super init] )
-       {
-               servers = [[NSMutableArray alloc] init];
-
-               // start the server with saved settings
-               [self listenOnPort:TCGlobalListenPort remote:TCGlobalAllowRemote];
-               if ( TCGlobalAllowRemote ) [self broadcastWithName:TCGlobalBroadcastName];
-               
-               // set up the network browser
-               browser = [[NSNetServiceBrowser alloc] init];
-               [browser setDelegate:self];
-               [browser searchForServicesOfType:@"_cheat._tcp." inDomain:@"local."];
-               
-               serverList = [[NSMutableArray alloc] init];
-               
+       if ( self = [super init] ) {
                [self setDelegate:self];
        }
 
 }
 
 
-- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
+- (void)dealloc
 {
-       if ( TCGlobalUpdateCheck )
-       {
-               [CMUpdateCheck checkWithURL:@"http://www.brokenzipper.com/software.plist" verbose:NO];
-       }
+       ChazLog( @"AppController deallocated!!" );
+       [self stopCheatServer];
+       [super dealloc];
 }
 
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+#pragma mark NSApplication Delegate
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-- (void)listenOnPort:(int)port remote:(BOOL)remote
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
 {
-       if ( connection )
-       {
-               [self stopListener];
-
-               waitingToListen = YES;
-               connectionPort = port;
-               connectionRemote = remote;
+    [NSApp activateIgnoringOtherApps:YES];
+        
+       // check if this is the first launch
+       if ( ![[NSUserDefaults standardUserDefaults] boolForKey:TCFirstLaunchPref] ) {
+               // FIRST LAUNCH
+               [self showAboutBoxWindow:self];
+               [[NSUserDefaults standardUserDefaults] setBool:YES forKey:TCFirstLaunchPref];
        }
-       else
-       {
-               connection = [[CheatListener listenerWithDelegate:self port:port remote:remote] retain];
-               connectionPort = port;
-               connectionRemote = remote;
+       
+       // if should check for updates on launch
+       if ( [[NSUserDefaults standardUserDefaults] boolForKey:TCUpdateCheckPref] ) {
+               ChazCheckForUpdate( TCUpdateCheckURL, NO );
        }
-}
-
-- (void)stopListener
-{
-       if ( connection )
-       {
-               close( sockfd );
-               [connection release], connection = nil;
+       
+       // automatically start the cheat server if the pref is set
+       if ( [[NSUserDefaults standardUserDefaults] boolForKey:TCRunServerPref] ) {
+               if ( ![self startCheatServer] ) {
+                       // inform the user that the server won't start
+                       NSRunAlertPanel( @"The Cheat could not start the server.",
+                                                        @"The cheat server failed to start.  Check the server settings and start it manually.",
+                                                        @"OK", nil, nil );
+                       // open server prefs
+                       [self showPreferenceWindow:self];
+                       [_preferenceController chooseServer:self];
+               }
        }
 }
 
 
-- (void)broadcastWithName:(NSString *)name
-{
-       [self stopBroadcast];
-               
-       service = [[NSNetService alloc] initWithDomain:@"local." type:@"_cheat._tcp." name:name port:TCGlobalListenPort];
-       [service setDelegate:self];
-       [service publish];
-}
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+#pragma mark Interface Actions
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-- (void)stopBroadcast
+
+- (IBAction)newSearchWindow:(id)sender
 {
-       [service stop], service = nil;
+       NSDocumentController    *controller = [NSDocumentController sharedDocumentController];
+       CheatDocument                   *doc = [controller makeUntitledDocumentOfType:@"Cheat Document"];
+       if ( !doc ) {
+               ChazLog( @"nil document" );
+       }
+       [doc setMode:TCSearchMode];
+       [controller addDocument:doc];
+       [doc makeWindowControllers];
+       [doc showWindows];
 }
 
-
-- (IBAction)showAboutBoxWindow:(id)sender
+- (IBAction)newBlankCheatWindow:(id)sender
 {
-       if ( !aboutBoxController )
-       {
-               aboutBoxController = [[AboutBoxController alloc] init];
+       NSDocumentController    *controller = [NSDocumentController sharedDocumentController];
+       CheatDocument                   *doc = [controller makeUntitledDocumentOfType:@"Cheat Document"];
+       if ( !doc ) {
+               ChazLog( @"nil document" );
        }
-       
-       [aboutBoxController showWindow:self];
+       [doc setMode:TCCheatMode];
+       [controller addDocument:doc];
+       [doc makeWindowControllers];
+       [doc showWindows];
 }
 
-- (IBAction)showPreferenceWindow:(id)sender
+- (IBAction)showAboutBoxWindow:(id)sender
 {
-       if ( !preferenceController )
-       {
-               preferenceController = [[PreferenceController alloc] initWithDelegate:self];
+       if ( !_aboutBoxController ) {
+               _aboutBoxController = [[AboutBoxController alloc] init];
        }
-
-       [preferenceController showWindow:self];
+       [_aboutBoxController showWindow:self];
 }
 
-- (IBAction)showNetTrafficWindow:(id)sender
+- (IBAction)showPreferenceWindow:(id)sender
 {
-       if ( !netTrafficController )
-       {
-               netTrafficController = [[NetTrafficController alloc] initWithDelegate:self];
+       if ( !_preferenceController ) {
+               _preferenceController = [[PreferenceController alloc] init];
        }
-
-       [netTrafficController showWindow:self];
+       [_preferenceController showWindow:self];
 }
 
 
 - (IBAction)launchHelpFile:(id)sender
 {
-       //[[NSWorkspace sharedWorkspace] openFile:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"html"] withApplication:@"Safari"];
-       [[NSWorkspace sharedWorkspace] openURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Read Me" ofType:@"rtf"]]];
+       if ( !_helpController ) {
+               _helpController = [[HelpController alloc] init];
+       }
+       [_helpController showWindow:self];
 }
 
 - (IBAction)launchEmailMenu:(id)sender
 
 - (IBAction)checkForUpdate:(id)sender
 {
-       [CMUpdateCheck checkWithURL:@"http://www.brokenzipper.com/software.plist"];
-}
-
-
-- (NSArray *)serverList
-{
-       return serverList;
-}
-
-
-- (void)dealloc
-{
-       [[NSNotificationCenter defaultCenter] removeObserver:self];
-
-       [self stopListener];
-       [self stopBroadcast];
-
-       [servers release];
-       
-       [browser release];
-       [serverList release];
-
-       [super dealloc];
+       ChazCheckForUpdate( TCUpdateCheckURL, YES );
 }
 
 
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%   PreferenceControlling
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+#pragma mark CheatServer Stuff
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-- (void)preferenceSetWindowsOnTop:(BOOL)windowsOnTop
+- (CheatServer *)cheatServer
 {
-       if ( TCGlobalWindowsOnTop != windowsOnTop )
-       {
-               [[NSNotificationCenter defaultCenter] postNotificationName:@"TCWindowsOnTopChanged" object:[NSNumber numberWithBool:windowsOnTop]];
+       if ( !_server ) {
+               _server = [[CheatServer alloc] initWithDelegate:self];
        }
+       return _server;
 }
 
-- (void)preferenceSetAllowRemote:(BOOL)allow listenPort:(int)port broadcastName:(NSString *)name
+- (BOOL)startCheatServer
 {
-       if ( TCGlobalAllowRemote != allow || TCGlobalListenPort != port )
-       {
-               [self listenOnPort:port remote:allow];
-       }
-       if ( allow )
-       {
-               if ( !TCGlobalAllowRemote || ![TCGlobalBroadcastName isEqualToString:name] )
-               {
-                       [self broadcastWithName:name];
-               }
-       }
-       else
-       {
-               [self stopBroadcast];
-       }
-       [netTrafficController serverSetAllowRemote:allow listenPort:port broadcastName:name];
-       //[netTrafficController allowRemoteChanged:allow];
-       //[netTrafficController listenPortChanged:port];
-       //[netTrafficController broadcastNameChanged:name];
-}
-
-/*
-- (void)preferenceAllowRemoteChanged:(BOOL)allow
-{
-       [self listenOnPort:TCGlobalListenPort remote:allow];
+       ChazLog( @"cheat server starting..." );
        
-       if ( allow )
-       {
-               [self broadcastWithName:TCGlobalBroadcastName];
+       // start the server with saved settings
+       int port = [[NSUserDefaults standardUserDefaults] integerForKey:TCListenPortPref];
+       NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:TCBroadcastNamePref];
+       if ( [name isEqualToString:@""] ) {
+               name = nil;
        }
-       else
-       {
-               [self stopBroadcast];
-       }
-
-       [netTrafficController allowRemoteChanged:allow];
-}
-
-- (void)preferenceListenPortChanged:(int)port
-{
-       [self listenOnPort:port remote:TCGlobalAllowRemote];
-       [self broadcastWithName:TCGlobalBroadcastName];
-
-       [netTrafficController listenPortChanged:port];
-}
-
-- (void)preferenceBroadcastNameChanged:(NSString *)name
-{
-       [self broadcastWithName:name];
-
-       [netTrafficController broadcastNameChanged:name];
-}
-*/
-
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%   NetTrafficControlling
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-
-- (int)netTrafficConnectionCount
-{
-       return [servers count];
-}
-
-- (NSArray *)netTrafficConnectionList
-{
-       return servers;
-}
-
-- (void)netTrafficKillConnection:(int)index
-{
-       NSLog( @"kill connection" );
-
-       close( [[servers objectAtIndex:index] sockfd] );
-}
-
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%   ListenerDelegate
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-
-- (void)listenerListeningWithSocket:(int)sock
-{
-       sockfd = sock;
-
-       TCGlobalListening = YES;
-       [[NSNotificationCenter defaultCenter] postNotificationName:@"TCListenerStarted" object:nil];
-}
-
-- (void)listenerDisconnected
-{
-       if ( waitingToListen )
-       {
-               waitingToListen = NO;
-               connection = [[CheatListener listenerWithDelegate:self port:connectionPort remote:connectionRemote] retain];
-       }
-       else
-       {
-               [self stopListener];
-       }
-
-       TCGlobalListening = NO;
-       [[NSNotificationCenter defaultCenter] postNotificationName:@"TCListenerStopped" object:nil];
-}
-
-- (void)listenerError:(NSString *)error message:(NSString *)message
-{
-       NSRunCriticalAlertPanel( error, message, @"OK", nil, nil );
-}
-
-- (void)listenerReceivedNewConnection:(int)sock
-{
-       [servers addObject:[ServerHolder holderWithConnection:[CheatServer serverWithDelegate:self socket:sock] socket:sock]];
-}
-
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%   ServerDelegate
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-
-- (void)server:(CheatServer *)server connectedWithSocket:(int)sock
-{
-       int                             i, top = [servers count];
-
-       for ( i = 0; i < top; i++ )
-       {
-               if ( [(ServerHolder *)[servers objectAtIndex:i] sockfd] == sock )
-               {
-                       [(ServerHolder *)[servers objectAtIndex:i] setServer:server];
-                       break;
-               }
-       }
-
-       [netTrafficController connectionListChanged];
-}
-
-- (void)serverDisconnected:(CheatServer *)server
-{
-       int                             i, top = [servers count];
-
-       for ( i = 0; i < top; i++ )
-       {
-               if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server )
-               {
-                       [servers removeObjectAtIndex:i];
-                       break;
-               }
-       }
-
-       [netTrafficController connectionListChanged];
-}
-
-- (void)server:(CheatServer *)server changedAddress:(NSString *)address
-{
-       int                             i, top = [servers count];
-
-       for ( i = 0; i < top; i++ )
-       {
-               if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server )
-               {
-                       [(ServerHolder *)[servers objectAtIndex:i] setAddress:address];
-                       break;
-               }
+       
+       // stop the cheat server if it's running
+       [self stopCheatServer];
+       
+       // start the server
+       if ( [[self cheatServer] listenOnPort:port broadcast:name] ) {
+               [[NSNotificationCenter defaultCenter] postNotificationName:TCServerStartedNote object:[self cheatServer]];
+               return YES;
        }
-
-       [netTrafficController connectionListChanged];
+       return NO;
 }
 
-- (void)server:(CheatServer *)server changedAction:(NSString *)action
+- (void)stopCheatServer
 {
-       int                             i, top = [servers count];
-
-       for ( i = 0; i < top; i++ )
-       {
-               if ( [(ServerHolder *)[servers objectAtIndex:i] server] == server )
-               {
-                       [(ServerHolder *)[servers objectAtIndex:i] setAction:action];
-                       break;
-               }
+       if ( _server ) {
+               [_server stop];
+               [[NSNotificationCenter defaultCenter] postNotificationName:TCServerStoppedNote object:[self cheatServer]];
        }
-
-       [netTrafficController connectionListChanged];
 }
 
-- (NSArray *)serverProcessList
-{
-       return [[NSWorkspace sharedWorkspace] launchedApplications];
-}
 
-- (pid_t)serverFirstProcess
-{
-       return (pid_t)[[[[[NSWorkspace sharedWorkspace] launchedApplications] objectAtIndex:0] objectForKey:@"NSApplicationProcessIdentifier"] intValue];
-}
-
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%   NetService Delegate
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-
-- (void)netServiceWillPublish:(NSNetService *)sender
-{
-       NSLog( @"service will publish" );
-       [sender resolve];
-}
-
-- (void)netService:(NSNetService *)sender didNotPublish:(NSDictionary *)errorDict
-{
-       NSLog( @"service did not publish" );
-       
-       if ( [[errorDict objectForKey:@"NSNetServicesErrorCode"] intValue] == NSNetServicesCollisionError )
-       {
-               [self broadcastWithName:[NSString stringWithFormat:@"%@ %i", [sender name], TCGlobalAlternateBroadcastNameCount++]];
-       }
-       else
-       {
-               NSRunCriticalAlertPanel( @"Network Error", @"Server couldn't broadcast.  Local can't be cheated by remote computers.", @"OK", nil, nil );
-       }
-}
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+#pragma mark CheatServerDelegate
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-- (void)netServiceDidStop:(NSNetService *)sender
+- (void)serverDisconnectedUnexpectedly:(CheatServer *)theServer
 {
-       NSLog( @"service stopped" );
-       [sender release];
+       ChazLog( @"server disconnected unexpectedly." );
+       [self stopCheatServer];
 }
 
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%   NSNetServiceBrowser Delegate
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-
-- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didFindService:(NSNetService *)aService moreComing:(BOOL)more
+- (void)server:(CheatServer *)theServer failedToBroadcastName:(NSString *)theName
 {
-       // a server has broadcast; not much use until it's resolved.
-       [aService setDelegate:self];
-       [aService resolve];
+       NSBeginInformationalAlertSheet( @"The cheat server can not broadcast.",  @"OK", nil, nil, [_preferenceController window], nil, NULL, NULL, NULL,
+                                                                       @"The Cheat can't broadcast as \"%@\" because that name is in use by another server.  The server will continue running with broadcasting disabled.", theName );
 }
 
-- (void)netServiceDidResolveAddress:(NSNetService *)aService
-{      
-       int                                     i, top = [serverList count];
-       
-       // ignore if this is the local server.
-       if ( TCGlobalAllowRemote && [[aService name] isEqualToString:TCGlobalBroadcastName] )
-       {
-               return;
-       }
-       
-       // ignore if the server name is already in the list.
-       for ( i = 0; i < top; i++ )
-       {
-               if ( [[aService name] isEqualToString:[(NSNetService *)[serverList objectAtIndex:i] name]] )
-               {
-                       return;
-               }
-       }
-       
-       [serverList addObject:aService];
-       NSLog( @"server added: %i", [serverList count] );
-       
-       [[NSNotificationCenter defaultCenter] postNotificationName:@"TCServerFound" object:aService];
-}
-
-- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didRemoveService:(NSNetService *)aService moreComing:(BOOL)more
+- (void)serverChildrenChanged:(CheatServer *)theServer
 {
-       int                                     i, top = [serverList count];
-       
-       for ( i = 0; i < top; i++ )
-       {
-               if ( [[aService name] isEqualToString:[(NSNetService *)[serverList objectAtIndex:i] name]] )
-               {
-                       [serverList removeObjectAtIndex:i];
-                       NSLog( @"server deleted: %i", [serverList count] );
-                       break;
-               }
-       }
-       
-       [[NSNotificationCenter defaultCenter] postNotificationName:@"TCServerLost" object:aService];
+       [[NSNotificationCenter defaultCenter] postNotificationName:TCServerConnectionsChangedNote object:theServer];
 }
 
 
-@end
\ No newline at end of file
+@end
This page took 0.02876 seconds and 4 git commands to generate.