project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m
author dag10 <gottlieb.drew@gmail.com>
Wed, 16 Jan 2013 18:34:43 -0500
changeset 8393 85bd6c7b2641
parent 6908 896ed2afcfb8
child 10108 c68cf030eded
permissions -rw-r--r--
Can now change theme for static and mission maps. Fixed mission map descriptions that had commas which broke them. Now, you must escape commas in map descriptions. Made bgwidget repaint on animation tick to avoid buffer-not-clearing issue with widgets that change overtop the background leaving a ghost image of the widget's previous state. Generated map is now the default map in the mapconfig widget.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     1
/*
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
6700
e04da46ee43c the most important commit of the year
koda
parents: 6365
diff changeset
     3
 * Copyright (c) 2009-2012 Vittorio Giovara <vittorio.giovara@gmail.com>
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     4
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     8
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    12
 * GNU General Public License for more details.
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    13
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    14
 * You should have received a copy of the GNU General Public License
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    15
 * along with this program; if not, write to the Free Software
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    17
 */
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    18
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    19
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    20
#import "EngineProtocolNetwork.h"
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    21
6078
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5370
diff changeset
    22
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
    23
#define BUFFER_SIZE 255     // like in original frontend
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    24
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    25
@implementation EngineProtocolNetwork
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    26
@synthesize delegate, stream, csd, enginePort;
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    27
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    28
-(id) initWithPort:(NSInteger) port {
6908
896ed2afcfb8 ios: turn on more warning messages and start correcting them
koda
parents: 6870
diff changeset
    29
    if ((self = [super init])) {
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    30
        self.delegate = nil;
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    31
        self.csd = NULL;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    32
        self.stream = nil;
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    33
        self.enginePort = port;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    34
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    35
    return self;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    36
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    37
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    38
-(id) init {
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    39
    return [self initWithPort:[HWUtils randomPort]];
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    40
}
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    41
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    42
-(void) dealloc {
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
    43
    self.delegate = nil;
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    44
    releaseAndNil(stream);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    45
    [super dealloc];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    46
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    47
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    48
#pragma mark -
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    49
#pragma mark Spawner functions
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    50
-(void) spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary {
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    51
    self.stream = (onSaveFile) ? [[NSOutputStream alloc] initToFileAtPath:onSaveFile append:YES] : nil;
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    52
    [self.stream open];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    53
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
    54
    // +detachNewThreadSelector retain/release self automatically
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
    55
    [NSThread detachNewThreadSelector:@selector(engineProtocol:)
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
    56
                             toTarget:self
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
    57
                           withObject:dictionary];
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
    58
}
6265
a6944f94c19f aaand remove also ipcport from the class interface as well
koda
parents: 6263
diff changeset
    59
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    60
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    61
#pragma mark Provider functions
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    62
// unpacks team data from the selected team.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    63
-(void) provideTeamData:(NSString *)teamName forHogs:(NSInteger) numberOfPlayingHogs withHealth:(NSInteger) initialHealth ofColor:(NSNumber *)teamColor {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    64
    /*
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    65
     addteam <32charsMD5hash> <color> <team name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    66
     addhh <level> <health> <hedgehog name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    67
     <level> is 0 for human, 1-5 for bots (5 is the most stupid)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    68
    */
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    69
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    70
    NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@", TEAMS_DIRECTORY(), teamName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    71
    NSDictionary *teamData = [[NSDictionary alloc] initWithContentsOfFile:teamFile];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    72
    [teamFile release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    73
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    74
    NSString *teamHashColorAndName = [[NSString alloc] initWithFormat:@"eaddteam %@ %@ %@",
3660
bc125bea5849 complete settings page rework
koda
parents: 3642
diff changeset
    75
                                      [teamData objectForKey:@"hash"], [teamColor stringValue], [teamName stringByDeletingPathExtension]];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    76
    [self sendToEngine: teamHashColorAndName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    77
    [teamHashColorAndName release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    78
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    79
    NSString *grave = [[NSString alloc] initWithFormat:@"egrave %@", [teamData objectForKey:@"grave"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    80
    [self sendToEngine: grave];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    81
    [grave release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    82
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    83
    NSString *fort = [[NSString alloc] initWithFormat:@"efort %@", [teamData objectForKey:@"fort"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    84
    [self sendToEngine: fort];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    85
    [fort release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    86
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    87
    NSString *voicepack = [[NSString alloc] initWithFormat:@"evoicepack %@", [teamData objectForKey:@"voicepack"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    88
    [self sendToEngine: voicepack];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    89
    [voicepack release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    90
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    91
    NSString *flag = [[NSString alloc] initWithFormat:@"eflag %@", [teamData objectForKey:@"flag"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    92
    [self sendToEngine: flag];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    93
    [flag release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    94
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    95
    NSArray *hogs = [teamData objectForKey:@"hedgehogs"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    96
    for (int i = 0; i < numberOfPlayingHogs; i++) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    97
        NSDictionary *hog = [hogs objectAtIndex:i];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    98
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    99
        NSString *hogLevelHealthAndName = [[NSString alloc] initWithFormat:@"eaddhh %@ %d %@",
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   100
                                           [hog objectForKey:@"level"], initialHealth, [hog objectForKey:@"hogname"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   101
        [self sendToEngine: hogLevelHealthAndName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   102
        [hogLevelHealthAndName release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   103
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   104
        NSString *hogHat = [[NSString alloc] initWithFormat:@"ehat %@", [hog objectForKey:@"hat"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   105
        [self sendToEngine: hogHat];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   106
        [hogHat release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   107
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   108
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   109
    [teamData release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   110
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   111
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   112
// unpacks ammostore data from the selected ammo.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   113
-(void) provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger) numberOfTeams {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   114
    NSString *weaponPath = [[NSString alloc] initWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),ammostoreName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   115
    NSDictionary *ammoData = [[NSDictionary alloc] initWithContentsOfFile:weaponPath];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   116
    [weaponPath release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   117
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   118
    // if we're loading an older version of ammos fill the engine message with 0s
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   119
    int diff = HW_getNumberOfWeapons() - [[ammoData objectForKey:@"ammostore_initialqt"] length];
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   120
    NSString *update = @"";
6908
896ed2afcfb8 ios: turn on more warning messages and start correcting them
koda
parents: 6870
diff changeset
   121
    while ((int)[update length] < diff)
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   122
        update = [update stringByAppendingString:@"0"];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   123
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   124
    NSString *ammloadt = [[NSString alloc] initWithFormat:@"eammloadt %@%@", [ammoData objectForKey:@"ammostore_initialqt"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   125
    [self sendToEngine: ammloadt];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   126
    [ammloadt release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   127
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   128
    NSString *ammprob = [[NSString alloc] initWithFormat:@"eammprob %@%@", [ammoData objectForKey:@"ammostore_probability"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   129
    [self sendToEngine: ammprob];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   130
    [ammprob release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   131
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   132
    NSString *ammdelay = [[NSString alloc] initWithFormat:@"eammdelay %@%@", [ammoData objectForKey:@"ammostore_delay"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   133
    [self sendToEngine: ammdelay];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   134
    [ammdelay release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   135
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   136
    NSString *ammreinf = [[NSString alloc] initWithFormat:@"eammreinf %@%@", [ammoData objectForKey:@"ammostore_crate"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   137
    [self sendToEngine: ammreinf];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   138
    [ammreinf release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   139
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   140
    // send this for each team so it applies the same ammostore to all teams
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   141
    NSString *ammstore = [[NSString alloc] initWithString:@"eammstore"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   142
    for (int i = 0; i < numberOfTeams; i++)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   143
        [self sendToEngine: ammstore];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   144
    [ammstore release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   145
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   146
    [ammoData release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   147
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   148
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   149
// unpacks scheme data from the selected scheme.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   150
-(NSInteger) provideScheme:(NSString *)schemeName {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   151
    NSString *schemePath = [[NSString alloc] initWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),schemeName];
3781
2bfda544ae48 modified file format for schemes files (which is going to introduce a lot of pre-release bugs, i'm sure)
koda
parents: 3779
diff changeset
   152
    NSDictionary *schemeDictionary = [[NSDictionary alloc] initWithContentsOfFile:schemePath];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   153
    [schemePath release];
3781
2bfda544ae48 modified file format for schemes files (which is going to introduce a lot of pre-release bugs, i'm sure)
koda
parents: 3779
diff changeset
   154
    NSArray *basicArray = [schemeDictionary objectForKey:@"basic"];
2bfda544ae48 modified file format for schemes files (which is going to introduce a lot of pre-release bugs, i'm sure)
koda
parents: 3779
diff changeset
   155
    NSArray *gamemodArray = [schemeDictionary objectForKey:@"gamemod"];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   156
    int result = 0;
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   157
    int mask = 0x00000004;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   158
5185
7607a64e1853 remove the trailing _en from scheme data and use the macros available instead of creating a string every time
koda
parents: 5181
diff changeset
   159
    // pack the game modifiers in a single var and send it
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   160
    for (NSNumber *value in gamemodArray) {
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   161
        if ([value boolValue] == YES)
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   162
            result |= mask;
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   163
        mask <<= 1;
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   164
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   165
    NSString *flags = [[NSString alloc] initWithFormat:@"e$gmflags %d",result];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   166
    [self sendToEngine:flags];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   167
    [flags release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   168
5185
7607a64e1853 remove the trailing _en from scheme data and use the macros available instead of creating a string every time
koda
parents: 5181
diff changeset
   169
    // basic game flags
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   170
    result = [[basicArray objectAtIndex:0] intValue];
5185
7607a64e1853 remove the trailing _en from scheme data and use the macros available instead of creating a string every time
koda
parents: 5181
diff changeset
   171
    NSArray *basic = [[NSArray alloc] initWithContentsOfFile:BASICFLAGS_FILE()];
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   172
6908
896ed2afcfb8 ios: turn on more warning messages and start correcting them
koda
parents: 6870
diff changeset
   173
    for (NSUInteger i = 1; i < [basicArray count]; i++) {
5185
7607a64e1853 remove the trailing _en from scheme data and use the macros available instead of creating a string every time
koda
parents: 5181
diff changeset
   174
        NSDictionary *dict = [basic objectAtIndex:i];
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   175
        NSString *command = [dict objectForKey:@"command"];
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   176
        NSInteger value = [[basicArray objectAtIndex:i] intValue];
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   177
        if ([[dict objectForKey:@"checkOverMax"] boolValue] && value >= [[dict objectForKey:@"max"] intValue])
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   178
            value = 9999;
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   179
        if ([[dict objectForKey:@"times1000"] boolValue])
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   180
            value = value * 1000;
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   181
        NSString *strToSend = [[NSString alloc] initWithFormat:@"%@ %d",command,value];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   182
        [self sendToEngine:strToSend];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   183
        [strToSend release];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   184
    }
5185
7607a64e1853 remove the trailing _en from scheme data and use the macros available instead of creating a string every time
koda
parents: 5181
diff changeset
   185
    [basic release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   186
3781
2bfda544ae48 modified file format for schemes files (which is going to introduce a lot of pre-release bugs, i'm sure)
koda
parents: 3779
diff changeset
   187
    [schemeDictionary release];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   188
    return result;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   189
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   190
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   191
#pragma mark -
4547
b70004a576a3 move server connection stuff in its own class
koda
parents: 4540
diff changeset
   192
#pragma mark Network relevant code
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   193
-(void) dumpRawData:(const char *)buffer ofSize:(uint8_t) length {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   194
    [self.stream write:&length maxLength:1];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   195
    [self.stream write:(const uint8_t *)buffer maxLength:length];
3912
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   196
}
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   197
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   198
// wrapper that computes the length of the message and then sends the command string, saving the command on a file
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   199
-(int) sendToEngine:(NSString *)string {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   200
    uint8_t length = [string length];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   201
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   202
    [self dumpRawData:[string UTF8String] ofSize:length];
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   203
    SDLNet_TCP_Send(csd, &length, 1);
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   204
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   205
}
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   206
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   207
// wrapper that computes the length of the message and then sends the command string, skipping file writing
4512
c6aff8ceada0 more server stubs
koda
parents: 4510
diff changeset
   208
-(int) sendToEngineNoSave:(NSString *)string {
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   209
    uint8_t length = [string length];
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   210
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   211
    SDLNet_TCP_Send(csd, &length, 1);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   212
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   213
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   214
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
   215
// this is launched as thread and handles all IPC with engine
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   216
-(void) engineProtocol:(id) object {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   217
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   218
    NSDictionary *gameConfig = (NSDictionary *)object;
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   219
    NSMutableArray *statsArray = nil;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   220
    TCPsocket sd;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   221
    IPaddress ip;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   222
    int eProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   223
    BOOL clientQuit;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   224
    char const buffer[BUFFER_SIZE];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   225
    uint8_t msgSize;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   226
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   227
    clientQuit = NO;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   228
    csd = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   229
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   230
    if (SDLNet_Init() < 0) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   231
        DLog(@"SDLNet_Init: %s", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   232
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   233
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   234
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   235
    // Resolving the host using NULL make network interface to listen
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   236
    if (SDLNet_ResolveHost(&ip, NULL, self.enginePort) < 0 && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   237
        DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   238
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   239
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   240
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   241
    // Open a connection with the IP provided (listen on the host's port)
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   242
    if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   243
        DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), self.enginePort);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   244
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   245
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   246
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   247
    DLog(@"Waiting for a client on port %d", self.enginePort);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   248
    while (csd == NULL)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   249
        csd = SDLNet_TCP_Accept(sd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   250
    SDLNet_TCP_Close(sd);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   251
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   252
    while (!clientQuit) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   253
        msgSize = 0;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   254
        memset((void *)buffer, '\0', BUFFER_SIZE);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   255
        if (SDLNet_TCP_Recv(csd, &msgSize, sizeof(uint8_t)) <= 0)
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   256
            break;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   257
        if (SDLNet_TCP_Recv(csd, (void *)buffer, msgSize) <= 0)
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   258
            break;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   259
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   260
        switch (buffer[0]) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   261
            case 'C':
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   262
                DLog(@"Sending game config...\n%@", gameConfig);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   263
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
   264
                /*if (isNetGame == YES)
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   265
                    [self sendToEngineNoSave:@"TN"];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
   266
                else*/
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   267
                    [self sendToEngineNoSave:@"TL"];
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   268
                NSString *saveHeader = @"TS";
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   269
                [self dumpRawData:[saveHeader UTF8String] ofSize:[saveHeader length]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   270
5370
a3f87be7b09a ios: disble logging, stop music correctly in preferences, move script command before seed, try using reatin instead of if
koda
parents: 5185
diff changeset
   271
                // lua script (if set)
a3f87be7b09a ios: disble logging, stop music correctly in preferences, move script command before seed, try using reatin instead of if
koda
parents: 5185
diff changeset
   272
                NSString *script = [gameConfig objectForKey:@"mission_command"];
a3f87be7b09a ios: disble logging, stop music correctly in preferences, move script command before seed, try using reatin instead of if
koda
parents: 5185
diff changeset
   273
                if ([script length] != 0)
a3f87be7b09a ios: disble logging, stop music correctly in preferences, move script command before seed, try using reatin instead of if
koda
parents: 5185
diff changeset
   274
                    [self sendToEngine:script];
6084
e692c0348e74 make the missions/trainings start
koda
parents: 6083
diff changeset
   275
                // missions/tranings only need the script configuration set
e692c0348e74 make the missions/trainings start
koda
parents: 6083
diff changeset
   276
                if ([gameConfig count] == 1)
e692c0348e74 make the missions/trainings start
koda
parents: 6083
diff changeset
   277
                    break;
5370
a3f87be7b09a ios: disble logging, stop music correctly in preferences, move script command before seed, try using reatin instead of if
koda
parents: 5185
diff changeset
   278
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   279
                // seed info
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   280
                [self sendToEngine:[gameConfig objectForKey:@"seed_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   281
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   282
                // dimension of the map
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   283
                [self sendToEngine:[gameConfig objectForKey:@"templatefilter_command"]];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   284
                [self sendToEngine:[gameConfig objectForKey:@"mapgen_command"]];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   285
                [self sendToEngine:[gameConfig objectForKey:@"mazesize_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   286
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   287
                // static land (if set)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   288
                NSString *staticMap = [gameConfig objectForKey:@"staticmap_command"];
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   289
                if ([staticMap length] != 0)
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   290
                    [self sendToEngine:staticMap];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   291
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   292
                // theme info
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   293
                [self sendToEngine:[gameConfig objectForKey:@"theme_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   294
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   295
                // scheme (returns initial health)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   296
                NSInteger health = [self provideScheme:[gameConfig objectForKey:@"scheme"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   297
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   298
                // send an ammostore for each team
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   299
                NSArray *teamsConfig = [gameConfig objectForKey:@"teams_list"];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   300
                [self provideAmmoData:[gameConfig objectForKey:@"weapon"] forPlayingTeams:[teamsConfig count]];
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   301
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   302
                // finally add hogs
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   303
                for (NSDictionary *teamData in teamsConfig) {
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   304
                    [self provideTeamData:[teamData objectForKey:@"team"]
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   305
                                  forHogs:[[teamData objectForKey:@"number"] intValue]
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   306
                               withHealth:health
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   307
                                  ofColor:[teamData objectForKey:@"color"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   308
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   309
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   310
            case '?':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   311
                DLog(@"Ping? Pong!");
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   312
                [self sendToEngine:@"!"];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   313
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   314
            case 'E':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   315
                DLog(@"ERROR - last console line: [%s]", &buffer[1]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   316
                clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   317
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   318
            case 'e':
3912
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   319
                [self dumpRawData:buffer ofSize:msgSize];
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   320
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   321
                sscanf((char *)buffer, "%*s %d", &eProto);
4603
d362ab6c7f53 damn. it.
koda
parents: 4574
diff changeset
   322
                int netProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   323
                char *versionStr;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   324
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   325
                HW_versionInfo(&netProto, &versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   326
                if (netProto == eProto) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   327
                    DLog(@"Setting protocol version %d (%s)", eProto, versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   328
                } else {
4603
d362ab6c7f53 damn. it.
koda
parents: 4574
diff changeset
   329
                    DLog(@"ERROR - wrong protocol number: %d (expecting %d)", netProto, eProto);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   330
                    clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   331
                }
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   332
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   333
            case 'i':
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   334
                if (statsArray == nil) {
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   335
                    statsArray = [[NSMutableArray alloc] initWithCapacity:10 - 2];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   336
                    NSMutableArray *ranking = [[NSMutableArray alloc] initWithCapacity:4];
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   337
                    [statsArray insertObject:ranking atIndex:0];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   338
                    [ranking release];
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   339
                }
4769
42adc7c11980 put nicer messages and split args
koda
parents: 4760
diff changeset
   340
                NSString *tempStr = [NSString stringWithUTF8String:&buffer[2]];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   341
                NSArray *info = [tempStr componentsSeparatedByString:@" "];
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   342
                NSString *arg = [info objectAtIndex:0];
4793
5ea3d182415e merge and fix my typos
koda
parents: 4769
diff changeset
   343
                int index = [arg length] + 3;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   344
                switch (buffer[1]) {
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   345
                    case 'r':           // winning team
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   346
                        [statsArray insertObject:[NSString stringWithUTF8String:&buffer[2]] atIndex:1];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   347
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   348
                    case 'D':           // best shot
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   349
                        [statsArray addObject:[NSString stringWithFormat:@"The best shot award won by %s (with %@ points)", &buffer[index], arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   350
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   351
                    case 'k':           // best hedgehog
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   352
                        [statsArray addObject:[NSString stringWithFormat:@"The best killer is %s with %@ kill(s) in a turn", &buffer[index], arg]];
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   353
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   354
                    case 'K':           // number of hogs killed
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   355
                        [statsArray addObject:[NSString stringWithFormat:@"%@ hedgehog(s) were killed during this round", arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   356
                        break;
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   357
                    case 'H':           // team health/graph
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   358
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   359
                    case 'T':           // local team stats
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   360
                        // still WIP in statsPage.cpp
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   361
                        break;
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   362
                    case 'P':           // teams ranking
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   363
                        [[statsArray objectAtIndex:0] addObject:tempStr];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   364
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   365
                    case 's':           // self damage
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   366
                        [statsArray addObject:[NSString stringWithFormat:@"%s thought it's good to shoot his own hedgehogs with %@ points", &buffer[index], arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   367
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   368
                    case 'S':           // friendly fire
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   369
                        [statsArray addObject:[NSString stringWithFormat:@"%s killed %@ of his own hedgehogs", &buffer[index], arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   370
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   371
                    case 'B':           // turn skipped
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   372
                        [statsArray addObject:[NSString stringWithFormat:@"%s was scared and skipped turn %@ times", &buffer[index], arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   373
                        break;
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   374
                    default:
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   375
                        DLog(@"Unhandled stat message, see statsPage.cpp");
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   376
                        break;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   377
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   378
                break;
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   379
            case 'q':
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   380
                // game ended and match finished, statsArray is full of delicious statistics
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   381
                if (self.delegate != nil && [self.delegate respondsToSelector:@selector(gameEndedWithStatistics:)])
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   382
                    [self.delegate gameEndedWithStatistics:statsArray];
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   383
                [statsArray release];
6265
a6944f94c19f aaand remove also ipcport from the class interface as well
koda
parents: 6263
diff changeset
   384
                [HWUtils setGameStatus:gsEnded];
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   385
                // closing connection here would trigger a "IPC connection lost" error, so we have to wait until recv fails
4861
91f889289a47 (ios) perform a small change about how to close the game window, should hopefully save memory and avoid crashes (who am i kidding? that's the usual PR talk...)
koda
parents: 4856
diff changeset
   386
                break;
91f889289a47 (ios) perform a small change about how to close the game window, should hopefully save memory and avoid crashes (who am i kidding? that's the usual PR talk...)
koda
parents: 4856
diff changeset
   387
            case 'Q':
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   388
                // game exited but not completed, skip this message in the savefile
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   389
                [HWUtils setGameStatus:gsInterrupted];
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   390
                // same here, don't set clientQuit to YES
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   391
                break;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   392
            default:
3912
e11df2de6af2 have engine try for a second position when map loading fails (in this way it's possible to move Missions data to any path)
koda
parents: 3911
diff changeset
   393
                [self dumpRawData:buffer ofSize:msgSize];
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   394
                break;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   395
        }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   396
    }
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   397
    DLog(@"Engine exited, ending thread");
6353
d8f62c805619 restore displaying statistics at the end of a game and restore warning lower views that they are going to appear
koda
parents: 6337
diff changeset
   398
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   399
    [self.stream close];
5175
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   400
    [self.stream release];
4861
91f889289a47 (ios) perform a small change about how to close the game window, should hopefully save memory and avoid crashes (who am i kidding? that's the usual PR talk...)
koda
parents: 4856
diff changeset
   401
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   402
    // Close the client socket
6822
206db098f8c5 ios headers cleanup, with tweaks to +randomPort and grenade timer handling in overlay
koda
parents: 6700
diff changeset
   403
    [HWUtils freePort:self.enginePort];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   404
    SDLNet_TCP_Close(csd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   405
    SDLNet_Quit();
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   406
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   407
    [pool release];
4861
91f889289a47 (ios) perform a small change about how to close the game window, should hopefully save memory and avoid crashes (who am i kidding? that's the usual PR talk...)
koda
parents: 4856
diff changeset
   408
    // Invoking this method should be avoided as it does not give your thread a chance
91f889289a47 (ios) perform a small change about how to close the game window, should hopefully save memory and avoid crashes (who am i kidding? that's the usual PR talk...)
koda
parents: 4856
diff changeset
   409
    // to clean up any resources it allocated during its execution.
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   410
    //[NSThread exit];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   411
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   412
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   413
@end