// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Project: The Cheat
//
-// File: MyDocument.m
+// File: SessionController.m
// Created: Sun Sep 07 2003
//
// Copyright: 2003 Chaz McGarvey. All rights reserved.
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#import "MyDocument.h"
+#import "SessionController.h"
#import "AppController.h"
void TCPlaySound( NSString *name );
-@implementation MyDocument
+@implementation SessionController
- (id)init
{
- if ( self = [super init] )
+ if ( self = [super initWithWindowNibName:@"Session"] )
{
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
return self;
}
-- (NSString *)windowNibName
+/*- (NSString *)windowNibName
{
return @"MyDocument";
}
[super windowControllerDidLoadNib:controller];
[self initialInterfaceSetup];
-}
+}*/
+- (void)windowDidLoad
+{
+ [cheatWindow setTitle:[NSString stringWithFormat:@"The Cheat %i", ++TCGlobalSessionCount]];
+
+ [self initialInterfaceSetup];
+}
-- (void)close
+- (void)windowWillClose:(NSNotification *)aNotification
{
// closing the window will automatically disconnect the client from the server,
// but if the application is quitting, the client may not get a chance to exit.
[statusTextTimer invalidate];
[statusTextTimer release], statusTextTimer = nil;
- [super close];
+ // we keep track of ourselves so we have to release ourself.
+ [self release];
}
- (void)setStatusDisconnected
{
+ if ( status == STATUS_DISCONNECTED ) return;
lastStatus = status;
status = STATUS_DISCONNECTED;
[searchRadioMatrix setEnabled:NO];
[searchButton setEnabled:NO];
[clearSearchButton setEnabled:NO];
- [self setStatusText:@"Not Connected" duration:0];
+ [statusText addStatus:@"Not Connected" duration:CM_STATUS_FOREVER];
[statusText setToolTip:@""];
[statusBar stopAnimation:self];
[addressTable setEnabled:NO];
- (void)setStatusConnected
{
+ if ( status == STATUS_CONNECTED ) return;
lastStatus = status;
status = STATUS_CONNECTED;
[self updateSearchBoxes];
[self updateSearchButton];
[clearSearchButton setEnabled:NO];
- [self setStatusText:@"Connected" duration:0];
+ [statusText addStatus:@"Connected" duration:CM_STATUS_FOREVER];
[statusText setToolTip:@""];
[statusBar stopAnimation:self];
[addressTable setEnabled:NO];
- (void)setStatusCheating
{
+ if ( status == STATUS_CHEATING ) return;
lastStatus = status;
status = STATUS_CHEATING;
[self updateSearchBoxes];
[self updateSearchButton];
[clearSearchButton setEnabled:YES];
- if ( searchResultsAmount < maxSearchResultsAmount )
+ if ( searchResultsAmount <= searchResultsAmountDisplayed )
{
if ( searchResultsAmount == 1 )
{
- [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0 color:[NSColor colorWithCalibratedRed:0.0f green:0.5f blue:0.0f alpha:1.0f]];
+ [statusText addStatus:@"One Result" color:[NSColor colorWithCalibratedRed:0.0f green:0.5f blue:0.0f alpha:1.0f] duration:CM_STATUS_FOREVER];
}
else if ( searchResultsAmount == 0 )
{
- [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0 color:[NSColor colorWithCalibratedRed:0.5f green:0.0f blue:0.0f alpha:1.0f]];
+ [statusText addStatus:@"No Results" color:[NSColor colorWithCalibratedRed:0.5f green:0.0f blue:0.0f alpha:1.0f] duration:CM_STATUS_FOREVER];
}
else
{
- [self setStatusText:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:0];
+ [statusText addStatus:[NSString stringWithFormat:@"Results: %i", searchResultsAmount] duration:CM_STATUS_FOREVER];
}
[statusText setToolTip:@""];
}
else
{
- [self setStatusText:[NSString stringWithFormat:@"Results: >%i", maxSearchResultsAmount] duration:0];
+ [statusText addStatus:[NSString stringWithFormat:@"Results: >%i", searchResultsAmountDisplayed] duration:CM_STATUS_FOREVER];
[statusText setToolTip:[NSString stringWithFormat:@"Results: %i", searchResultsAmount]];
}
[statusBar stopAnimation:self];
- (void)setStatusSearching
{
+ if ( status == STATUS_SEARCHING ) return;
lastStatus = status;
status = STATUS_SEARCHING;
[searchRadioMatrix setEnabled:NO];
[searchButton setEnabled:NO];
[clearSearchButton setEnabled:NO];
- [self setStatusText:@"Searching..." duration:0];
+ [statusText addStatus:@"Searching..." duration:CM_STATUS_FOREVER];
[statusText setToolTip:@""];
[statusBar startAnimation:self];
[addressTable setEnabled:NO];
- (void)setStatusChanging
{
+ if ( status == STATUS_CHANGING ) return;
lastStatus = status;
status = STATUS_CHANGING;
- (void)setStatusChangingLater
{
+ if ( status == STATUS_CHANGING_LATER ) return;
lastStatus = status;
status = STATUS_CHANGING_LATER;
[searchRadioMatrix setEnabled:NO];
[searchButton setEnabled:NO];
[clearSearchButton setEnabled:NO];
- [self setStatusText:@"Changing Later..." duration:0];
+ [statusText addStatus:@"Changing Later..." duration:CM_STATUS_FOREVER];
[statusText setToolTip:@""];
[statusBar startAnimation:self];
[addressTable setEnabled:NO];
- (void)setStatusChangingContinuously
{
+ if ( status == STATUS_CHANGING_CONTINUOUSLY ) return;
lastStatus = status;
status = STATUS_CHANGING_CONTINUOUSLY;
[searchRadioMatrix setEnabled:NO];
[searchButton setEnabled:NO];
[clearSearchButton setEnabled:NO];
- [self setStatusText:@"Repeating Change..." duration:0];
+ [statusText addStatus:@"Repeating Change..." duration:CM_STATUS_FOREVER];
[statusText setToolTip:@""];
[statusBar startAnimation:self];
[addressTable setEnabled:NO];
- (void)setStatusUndoing
{
+ if ( status == STATUS_UNDOING ) return;
lastStatus = status;
status = STATUS_UNDOING;
[searchRadioMatrix setEnabled:NO];
[searchButton setEnabled:NO];
[clearSearchButton setEnabled:NO];
- [self setStatusText:@"Undoing..." duration:0];
+ [statusText addStatus:@"Undoing..." duration:CM_STATUS_FOREVER];
[statusBar startAnimation:self];
[addressTable setEnabled:NO];
[changeButton setTitle:@"Change..."];
- (void)setStatusRedoing
{
+ if ( status == STATUS_REDOING ) return;
lastStatus = status;
status = STATUS_REDOING;
[searchRadioMatrix setEnabled:NO];
[searchButton setEnabled:NO];
[clearSearchButton setEnabled:NO];
- [self setStatusText:@"Redoing..." duration:0];
+ [statusText addStatus:@"Redoing..." duration:CM_STATUS_FOREVER];
[statusText setToolTip:@""];
[statusBar startAnimation:self];
[addressTable setEnabled:NO];
[[serverMenu itemAtIndex:0] setTitle:@"Disconnect"];
}
-- (void)setStatusToLast
+/*- (void)setStatusToLast
{
switch ( lastStatus )
{
[self setStatusRedoing];
break;
}
-}
+}*/
+/*
- (void)setStatusText:(NSString *)msg duration:(NSTimeInterval)seconds
{
[self setStatusText:msg duration:seconds color:[NSColor blackColor]];
[savedStatusText release], savedStatusText = nil;
[statusTextTimer invalidate];
[statusTextTimer release], statusTextTimer = nil;
-}
+}*/
- (void)connectToLocal
if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
{
- NSLog( @"sendProcessListRequest failed on socket %i", sockfd );
+ CMLog( @"sendProcessListRequest failed on socket %i", sockfd );
}
}
if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
{
- NSLog( @"sendClearSearch failed on socket %i", sockfd );
+ CMLog( @"sendClearSearch failed on socket %i", sockfd );
}
}
if ( (buffer = (char *)malloc( length )) == NULL )
{
- NSLog( @"sendSearch:size: failed" );
+ CMLog( @"sendSearch:size: failed" );
}
ptr = buffer;
if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
{
- NSLog( @"sendSearch:size: failed" );
+ CMLog( @"sendSearch:size: failed" );
}
free( buffer );
if ( (buffer = (char *)malloc( length )) == NULL )
{
- NSLog( @"sendChange:size: failed" );
+ CMLog( @"sendChange:size: failed" );
}
ptr = buffer;
if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
{
- NSLog( @"sendChange:size: failed" );
+ CMLog( @"sendChange:size: failed" );
}
free( buffer );
if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
{
- NSLog( @"sendPauseTarget failed" );
+ CMLog( @"sendPauseTarget failed" );
}
}
if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
{
- NSLog( @"sendUndoRequest failed" );
+ CMLog( @"sendUndoRequest failed" );
}
}
if ( SendBuffer( sockfd, (char *)(&header), &length ) == -1 || length != sizeof(header) )
{
- NSLog( @"sendRedoRequest failed" );
+ CMLog( @"sendRedoRequest failed" );
}
}
if ( (buffer = (char *)malloc( length )) == NULL )
{
- NSLog( @"sendSetTargetPID: failed" );
+ CMLog( @"sendSetTargetPID: failed" );
}
ptr = buffer;
if ( SendBuffer( sockfd, buffer, &lengthAfter ) == -1 || lengthAfter != length )
{
- NSLog( @"sendSetTargetPID: failed" );
+ CMLog( @"sendSetTargetPID: failed" );
}
free( buffer );
TCPlaySound( @"Basso" );
}
- [self setStatusToLast];
+ [self setStatusCheating];
//[self setStatusText:@"Search Finished" duration:1.5];
[cheatWindow makeFirstResponder:searchTextField];
}
[self destroyResults];
COPY_FROM_BUFFER( &searchResultsAmount, ptr, sizeof(searchResultsAmount) );
- COPY_FROM_BUFFER( &maxSearchResultsAmount, ptr, sizeof(maxSearchResultsAmount) );
+ COPY_FROM_BUFFER( &searchResultsAmountDisplayed, ptr, sizeof(searchResultsAmountDisplayed) );
- if ( searchResultsAmount > 0 )
+ if ( searchResultsAmountDisplayed > 0 )
{
- int memSize = TCAddressSize*maxSearchResultsAmount;
+ int memSize = TCAddressSize * searchResultsAmountDisplayed;
+ // TCAddressSize*maxSearchResultsAmount;
if ( (searchResults = (TCaddress *)malloc( memSize )) == NULL )
{
- NSLog( @"receivedVariableList failed: malloc failed" );
+ CMLog( @"receivedVariableList failed: malloc failed" );
searchResultsAmount = 0;
+ searchResultsAmountDisplayed = 0;
return;
}
+ CMLog( @"CLIENT setting display amount to %i", searchResultsAmountDisplayed );
COPY_FROM_BUFFER( searchResults, ptr, memSize );
}
- (void)receivedChangeFinished
{
- [self setStatusToLast];
-
- if ( status == STATUS_CHANGING_CONTINUOUSLY )
- {
- [self setStatusText:@"Change Occured" duration:1.5];
- }
- else
+ if ( status != STATUS_CHANGING_CONTINUOUSLY )
{
TCPlaySound( @"Tink" );
+ [self setStatusCheating];
}
}
- (void)receivedUndoFinished
{
- [self setStatusToLast];
+ [self setStatusCheating];
}
- (void)receivedRedoFinished
{
- [self setStatusToLast];
+ [self setStatusCheating];
}
- (void)receivedUndoRedoStatus:(NSData *)data
COPY_FROM_BUFFER( &undoCount, ptr, sizeof(undoCount) );
COPY_FROM_BUFFER( &redoCount, ptr, sizeof(redoCount) );
- NSLog( @"UNDO: %i, REDO: %i", undoCount, redoCount );
+ CMLog( @"UNDO: %i, REDO: %i", undoCount, redoCount );
}
- (void)receivedAppLaunched:(NSData *)data
[self sendSetTargetPID:targetPID];
// alert the user.
- [self handleErrorMessage:@"The application that was being cheated has quit." fatal:NO];
+ TCPlaySound( @"Frog" );
+ //[self handleErrorMessage:@"The application that was being cheated has quit." fatal:NO];
+ [statusText addStatus:@"Target Quit"];
[self setStatusConnected];
}
// copy the number of results to return.
COPY_TO_BUFFER( ptr, &TCGlobalHitsDisplayed, sizeof(TCGlobalHitsDisplayed) );
- NSLog( @"type: %i, size: %i", type, size );
+ CMLog( @"type: %i, size: %i", type, size );
// switch to cheating mode if this is the first search.
if ( status == STATUS_CONNECTED )
[self sendChange:data size:dataSize];
free( data );
-
- [self setStatusChanging];
}
{
[self clearSearch];
+ [statusText addStatus:@"Search Cleared" duration:1.5];
[self setStatusConnected];
- [self setStatusText:@"Search Cleared" duration:1.5];
[self sendClearSearch];
}
targetPID = [sender tag];
[self sendSetTargetPID:targetPID];
-
- [self setStatusText:[NSString stringWithFormat:@"PID: %i", targetPID] duration:0];
+
+ [statusText addStatus:[NSString stringWithFormat:@"PID: %i", targetPID] duration:CM_STATUS_FOREVER];
}
{
[changeSheet orderOut:sender];
[NSApp endSheet:changeSheet returnCode:1];
+ if ( [recurringChangeButton state] == NSOnState )
+ {
+ [self setStatusChangingContinuously];
+ }
+ else
+ {
+ [self setStatusChanging];
+ }
//[NSApp stopModal];
}
- (void)destroyResults
{
- if ( searchResultsAmount > 0 )
+ if ( searchResultsAmountDisplayed > 0 )
{
free( searchResults );
searchResultsAmount = 0;
+ searchResultsAmountDisplayed = 0;
}
}
- (void)handleErrorMessage:(NSString *)msg fatal:(BOOL)fatal
{
- NSLog( @"error received" );
+ CMLog( @"error received" );
// close the change sheet if it's open.
if ( [cheatWindow attachedSheet] )
{
- (int)numberOfRowsInTableView:(NSTableView *)table
{
- return (searchResultsAmount <= maxSearchResultsAmount) ? searchResultsAmount : maxSearchResultsAmount;
+ return searchResultsAmountDisplayed;
}
- (id)tableView:(NSTableView *)table objectValueForTableColumn:(NSTableColumn *)column row:(int)row
int tag = [serverList count] - 1;
NSMenuItem *item;
- NSLog( @"server found" );
+ CMLog( @"server found" );
if ( [serverMenu itemWithTitle:name] == nil )
{