diff -r 3a8560c00f78 -r 48fc46a922fd cocoaTouch/GameSetup.m --- a/cocoaTouch/GameSetup.m Sat Jan 23 13:15:27 2010 +0000 +++ b/cocoaTouch/GameSetup.m Sat Jan 23 21:57:24 2010 +0000 @@ -15,20 +15,19 @@ @implementation GameSetup -@synthesize localeString, systemSettings; +@synthesize systemSettings; -(id) init { self = [super init]; - self.localeString = [[[NSLocale currentLocale] localeIdentifier] stringByAppendingString:@".txt"]; - self.systemSettings = nil; - engineProtocolStarted = NO; - ipcPort = 51432; + srandom(time(NULL)); + ipcPort = (random() % 64541) + 1024 ;//(arc4random() % ((unsigned)64541)) + 1024; + + NSString *filePath = [[SDLUIKitDelegate sharedAppDelegate] dataFilePath:@"settings.plist"]; + self.systemSettings = [[NSDictionary alloc] initWithContentsOfFile:filePath]; //should check it exists return self; } -(void) dealloc { - if (systemSettings) [self.systemSettings release]; - [self.localeString autorelease]; [super dealloc]; } @@ -36,12 +35,7 @@ #pragma mark Thread/Network relevant code -(void) startThread: (NSString *) selector { SEL usage = NSSelectorFromString(selector); - - // do not start the server thread because the port is already bound - if (NO == engineProtocolStarted) { - engineProtocolStarted = YES; - [NSThread detachNewThreadSelector:usage toTarget:self withObject:nil]; - } + [NSThread detachNewThreadSelector:usage toTarget:self withObject:nil]; } -(int) sendToEngine: (NSString *)string { @@ -52,33 +46,32 @@ } -(void) engineProtocol { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; IPaddress ip; int idx, eProto; - BOOL serverQuit, clientQuit; + BOOL clientQuit, serverQuit; char buffer[BUFFER_SIZE], string[BUFFER_SIZE]; Uint8 msgSize; Uint16 gameTicks; - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; if (SDLNet_Init() < 0) { - fprintf(stderr, "SDLNet_Init: %s\n", SDLNet_GetError()); + NSLog(@"SDLNet_Init: %s", SDLNet_GetError()); exit(EXIT_FAILURE); } /* Resolving the host using NULL make network interface to listen */ if (SDLNet_ResolveHost(&ip, NULL, ipcPort) < 0) { - fprintf(stderr, "SDLNet_ResolveHost: %s\n", SDLNet_GetError()); + NSLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError()); exit(EXIT_FAILURE); } /* Open a connection with the IP provided (listen on the host's port) */ if (!(sd = SDLNet_TCP_Open(&ip))) { - fprintf(stderr, "SDLNet_TCP_Open: %s\n", SDLNet_GetError()); + NSLog(@"SDLNet_TCP_Open: %s\n", SDLNet_GetError()); exit(EXIT_FAILURE); } - NSLog(@"engineProtocol - Waiting for a client"); - + NSLog(@"engineProtocol - Waiting for a client on port %d", ipcPort); serverQuit = NO; while (!serverQuit) { @@ -100,13 +93,13 @@ NSLog(@"engineProtocol - sending game config"); // send config data data - /*seed is arbitrary string - [16:12] unC0Rr: + /* + seed is arbitrary string addteam - [16:13] unC0Rr: addhh - [16:13] unC0Rr: - is 0 for human, 1-5 for bots (5 is the most stupid)*/ // local game + is 0 for human, 1-5 for bots (5 is the most stupid) + */ + // local game [self sendToEngine:@"TL"]; // seed info @@ -234,15 +227,15 @@ // missing case for exiting right away } } - NSLog(@"Client Exited"); + NSLog(@"Engine exited, closing server"); // wait a little to let the client close cleanly - sleep(2); + [NSThread sleepForTimeInterval:2]; // Close the client socket SDLNet_TCP_Close(csd); + serverQuit = YES; } - } - + SDLNet_TCP_Close(sd); SDLNet_Quit(); @@ -251,24 +244,23 @@ } #pragma mark - -#pragma mark Settings setup methods --(void) loadSettingsFromFile:(NSString *)fileName forKey:(NSString *)objName { - NSString *filePath = [[SDLUIKitDelegate sharedAppDelegate] dataFilePath:fileName]; +#pragma mark Setting methods +-(const char **)getSettings { + const char **gameArgs = (const char**) malloc(sizeof(char*) * 7); + NSString *ipcString = [[NSString alloc] initWithFormat:@"%d", ipcPort]; + NSString *localeString = [[NSString alloc] initWithFormat:@"%@.txt", [[NSLocale currentLocale] localeIdentifier]]; - if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { - NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:filePath]; - systemSettings = dict; - //[self setValue:dict forKey:objName]; - [dict release]; - } else { - //TODO create it - [NSException raise:@"File NOT found" format:@"The file %@ was not found at %@", fileName, filePath]; - } - -} - --(void) unloadSettings { - systemSettings = nil; + gameArgs[0] = [[systemSettings objectForKey:@"username"] UTF8String]; //UserNick + gameArgs[1] = [ipcString UTF8String]; //ipcPort + gameArgs[2] = [[systemSettings objectForKey:@"sounds"] UTF8String]; //isSoundEnabled + gameArgs[3] = [[systemSettings objectForKey:@"music"] UTF8String]; //isMusicEnabled + gameArgs[4] = [localeString UTF8String]; //cLocaleFName + gameArgs[5] = [[systemSettings objectForKey:@"volume"] UTF8String]; //cInitVolume + gameArgs[6] = [[systemSettings objectForKey:@"alternate"] UTF8String]; //cAltDamage + + [localeString release]; + [ipcString release]; + return gameArgs; }