-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Project: The Cheat
-//
-// File: CheatServer.h
-// Created: Sun Sep 07 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 <Cocoa/Cocoa.h>
-#import <Chaz/Chaz.h>
+#import "ChazLog.h"
-#import "ServerDelegate.h"
+#import "MySocket.h"
-#include <mach/vm_map.h>
-#include <mach/mach_traps.h>
+#import "ServerChild.h"
-#include <malloc/malloc.h>
-#include <sys/types.h>
-#include <sys/ptrace.h>
-#include <sys/wait.h>
-#include <unistd.h>
+@interface CheatServer : NSObject
+{
+ MySocket *_socket; // the socket that listens for connections
+ NSNetService *_netService; // for rendezvous broadcasting
+
+ int _port; // port the socket is listening on
+ NSString *_name; // name the service is being broadcast as
+
+ NSMutableArray *_children; // the server spawns
+
+ id _delegate;
+}
-#include "cheat_types.h"
-#include "cheat_net.h"
+// initialization
+- (id)initWithDelegate:(id)delegate;
+// starting and stopping the server
+// it will automatically be stopped on dealloc.
+// pass nil for name to not broadcast.
+- (BOOL)listenOnPort:(int)port broadcast:(NSString *)name;
+- (void)stop;
-@class SearchResults;
+// accessing children
+// children are spawned by the server to handle remote sessions.
+// they are instances of the ServerChild class.
+- (int)childCount;
+- (NSArray *)children;
+- (void)removeChildAtIndex:(unsigned)index;
+// accessors
+- (BOOL)isListening;
+- (NSString *)host;
+- (int)port;
+- (NSString *)broadcast;
-@interface CheatServer : NSObject
-{
- id rootProxy;
- int sockfd;
+- (id)delegate;
+- (void)setDelegate:(id)delegate;
- pid_t processID;
- vm_map_t processTask;
+@end
- BOOL processPaused;
- NSMutableArray *searchResults;
- NSMutableArray *searchResultsUndone;
- int searchResultsAmountDisplayed;
-}
+@interface NSObject ( CheatServerDelegate )
-+ (NSConnection *)serverWithDelegate:(id)delegate socket:(int)sock;
-+ (void)serverThread:(NSArray *)array;
-
-- (id)initWithRootProxy:(id)proxy;
-
-- (void)handleSocket:(int)sock;
-- (void)run;
-
-- (void)setAddress:(NSString *)address;
-- (void)setAction:(NSString *)action;
-
-- (void)firstSearchString8bit:(char const *)value size:(int)vsize;
-- (void)firstSearchIntegerChar:(int8_t)value;
-- (void)firstSearchIntegerShort:(int16_t)value;
-- (void)firstSearchIntegerLong:(int32_t)value;
-- (void)firstSearchDecimalFloat:(float)value;
-- (void)firstSearchDecimalDouble:(double)value;
-
-- (void)searchString8bit:(char const *)value size:(int)vsize;
-- (void)searchIntegerChar:(int8_t)value;
-- (void)searchIntegerShort:(int16_t)value;
-- (void)searchIntegerLong:(int32_t)value;
-- (void)searchDecimalFloat:(float)value;
-- (void)searchDecimalDouble:(double)value;
-
-- (void)changeString8bit:(char const *)value size:(int)vsize addresses:(TCaddress *)addresses count:(int)count;
-- (void)changeIntegerChar:(int8_t)value addresses:(TCaddress *)addresses count:(int)count;
-- (void)changeIntegerShort:(int16_t)value addresses:(TCaddress *)addresses count:(int)count;
-- (void)changeIntegerLong:(int32_t)value addresses:(TCaddress *)addresses count:(int)count;
-- (void)changeDecimalFloat:(float)value addresses:(TCaddress *)addresses count:(int)count;
-- (void)changeDecimalDouble:(double)value addresses:(TCaddress *)addresses count:(int)count;
-
-- (void)sendProcessList;
-- (void)sendSearchFinished;
-- (void)sendVariableList:(TCaddress const *)data amount:(int)amount;
-- (void)sendChangeFinished;
-- (void)sendError:(NSString *)msg fatal:(BOOL)fatal;
-- (void)sendVariableValue:(u_int32_t)index;
-- (void)sendUndoFinished;
-- (void)sendRedoFinished;
-- (void)sendUndoRedoStatus;
-- (void)sendAppLaunched:(NSDictionary *)appInfo;
-- (void)sendAppQuit:(NSDictionary *)appInfo;
-- (void)sendTargetAppQuit;
-- (void)sendPauseFinished:(BOOL)paused;
-
-- (void)handleClearSearch;
-- (void)handleSearch:(char const *)data size:(int)dataSize;
-- (void)handleChange:(char const *)data size:(int)dataSize;
-- (void)handlePauseTarget;
-- (void)handleUndo;
-- (void)handleRedo;
-- (void)handleSetTargetPID:(char const *)data size:(int)size;
-
-- (void)unpause;
-- (void)setPID:(pid_t)pid;
+// when the server dies while running... would this ever happen? I doubt it.
+- (void)serverDisconnectedUnexpectedly:(CheatServer *)theServer;
-@end
+// broadcast failed, this is much more likely to happen.
+// note that the server will continue running.
+- (void)server:(CheatServer *)theServer failedToBroadcastName:(NSString *)theName;
+// a connection was made or lost with the server...
+- (void)serverChildrenChanged:(CheatServer *)theServer;
+
+@end