diff -r 5fe24180fc72 -r 3aac7ca07b0e project_files/HedgewarsMobile/Classes/GameSetup.m --- a/project_files/HedgewarsMobile/Classes/GameSetup.m Fri Sep 24 15:14:40 2010 -0400 +++ b/project_files/HedgewarsMobile/Classes/GameSetup.m Sat Sep 25 03:04:22 2010 +0200 @@ -26,7 +26,7 @@ #import "CommodityFunctions.h" #import "NSStringExtra.h" -#define BUFFER_SIZE 64 +#define BUFFER_SIZE 255 // like in original frontend @implementation GameSetup @synthesize systemSettings, gameConfig, savePath; @@ -255,7 +255,7 @@ uint8_t length = [string length]; [[NSString stringWithFormat:@"%c%@",length,string] appendToFile:savePath]; - SDLNet_TCP_Send(csd, &length , 1); + SDLNet_TCP_Send(csd, &length, 1); return SDLNet_TCP_Send(csd, [string UTF8String], length); } @@ -263,7 +263,7 @@ -(int) sendToEngineNoSave: (NSString *)string { uint8_t length = [string length]; - SDLNet_TCP_Send(csd, &length , 1); + SDLNet_TCP_Send(csd, &length, 1); return SDLNet_TCP_Send(csd, [string UTF8String], length); } @@ -274,9 +274,8 @@ IPaddress ip; int eProto; BOOL clientQuit; - char buffer[BUFFER_SIZE]; + uint8_t buffer[BUFFER_SIZE]; uint8_t msgSize; - uint16_t gameTicks; clientQuit = NO; csd = NULL; @@ -304,12 +303,14 @@ SDLNet_TCP_Close(sd); while (!clientQuit) { + NSString *msgToSave = nil; + NSOutputStream *os = nil; msgSize = 0; - memset(buffer, 0, BUFFER_SIZE); + memset(buffer, '\0', BUFFER_SIZE); if (SDLNet_TCP_Recv(csd, &msgSize, sizeof(uint8_t)) <= 0) - clientQuit = YES; + break; if (SDLNet_TCP_Recv(csd, buffer, msgSize) <=0) - clientQuit = YES; + break; switch (buffer[0]) { case 'C': @@ -360,9 +361,10 @@ clientQuit = YES; break; case 'e': - buffer[msgSize] = '\0'; - [[NSString stringWithUTF8String:buffer] appendToFile:savePath]; - sscanf(buffer, "%*s %d", &eProto); + msgToSave = [NSString stringWithFormat:@"%c%s",msgSize,buffer]; + [msgToSave appendToFile:self.savePath]; + + sscanf((char *)buffer, "%*s %d", &eProto); short int netProto = 0; char *versionStr; @@ -378,19 +380,28 @@ case 'i': switch (buffer[1]) { case 'r': - NSLog(@"Winning team: %s", &buffer[2]); + DLog(@"Winning team: %s", &buffer[2]); break; case 'k': - NSLog(@"Best Hedgehog: %s", &buffer[2]); + DLog(@"Best Hedgehog: %s", &buffer[2]); + break; + default: + // TODO: losta stats stuff break; } break; + case 'q': + // game ended, can remove the savefile + [[NSFileManager defaultManager] removeItemAtPath:self.savePath error:nil]; + break; default: - // empty packet or just statistics -- in either cases gameTicks is sent - gameTicks = SDLNet_Read16 (&buffer[msgSize - 2]); - DLog(@"engineProtocol - %d: received [%s]", gameTicks, buffer); - buffer[msgSize] = '\0'; - [[NSString stringWithUTF8String:buffer] appendToFile:savePath]; + // is it performant to reopen the stream every time? + os = [[NSOutputStream alloc] initToFileAtPath:self.savePath append:YES]; + [os open]; + [os write:&msgSize maxLength:1]; + [os write:buffer maxLength:msgSize]; + [os close]; + [os release]; break; } }