project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m
author Wuzzy <almikes@aol.com>
Sat, 30 Sep 2017 23:52:08 +0200
changeset 12627 07fdda8c13a2
parent 11577 28afdaa159cb
child 12877 00215a7ec5f5
permissions -rw-r--r--
TrophyRace: Fix game never eliminating any hogs after a hog skipped or ran out of time Warning: This commit _might_ invalidate past records, but I'm not sure if this is actually the case. Note that only the eliminiation part of the script is touched, not the actual race logic. Even if records are actually broken by this, I and sheepluva have decided that it's more imporant to fix this very, VERY stupid and old bug than to preserve records.
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
10108
c68cf030eded update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents: 6908
diff changeset
    16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
3829
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
11148
064a53861759 - Refactoring in order to remove some warning related to using of int instead of NSInteger
antonc27 <antonc27@mail.ru>
parents: 11137
diff changeset
    99
        NSString *hogLevelHealthAndName = [[NSString alloc] initWithFormat:@"eaddhh %@ %ld %@",
064a53861759 - Refactoring in order to remove some warning related to using of int instead of NSInteger
antonc27 <antonc27@mail.ru>
parents: 11137
diff changeset
   100
                                           [hog objectForKey:@"level"], (long)initialHealth, [hog objectForKey:@"hogname"]];
3547
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 {
11244
57891137ffef - Fix for sending to engine non-english characters
antonc27 <antonc27@mail.ru>
parents: 11235
diff changeset
   200
    uint8_t length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
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 {
11244
57891137ffef - Fix for sending to engine non-english characters
antonc27 <antonc27@mail.ru>
parents: 11235
diff changeset
   209
    uint8_t length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
3891
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 {
11137
14f50dde3e8c - Using of @autoreleasepool is better
Anton Malmygin <antonc27@mail.ru>
parents: 11107
diff changeset
   217
    @autoreleasepool {
14f50dde3e8c - Using of @autoreleasepool is better
Anton Malmygin <antonc27@mail.ru>
parents: 11107
diff changeset
   218
    
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   219
    NSDictionary *gameConfig = (NSDictionary *)object;
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   220
    NSMutableArray *statsArray = nil;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   221
    TCPsocket sd;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   222
    IPaddress ip;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   223
    int eProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   224
    BOOL clientQuit;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   225
    char const buffer[BUFFER_SIZE];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   226
    uint8_t msgSize;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   227
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   228
    clientQuit = NO;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   229
    csd = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   230
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   231
    if (SDLNet_Init() < 0) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   232
        DLog(@"SDLNet_Init: %s", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   233
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   234
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   235
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   236
    // Resolving the host using NULL make network interface to listen
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   237
    if (SDLNet_ResolveHost(&ip, NULL, self.enginePort) < 0 && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   238
        DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   239
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   240
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   241
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   242
    // 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
   243
    if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
11107
553899c1ff78 - Small warning fix
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   244
        DLog(@"SDLNet_TCP_Open: %s %d\n", SDLNet_GetError(), self.enginePort);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   245
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   246
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   247
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   248
    DLog(@"Waiting for a client on port %d", self.enginePort);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   249
    while (csd == NULL)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   250
        csd = SDLNet_TCP_Accept(sd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   251
    SDLNet_TCP_Close(sd);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   252
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   253
    while (!clientQuit) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   254
        msgSize = 0;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   255
        memset((void *)buffer, '\0', BUFFER_SIZE);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   256
        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
   257
            break;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   258
        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
   259
            break;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   260
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   261
        switch (buffer[0]) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   262
            case 'C':
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   263
                DLog(@"Sending game config...\n%@", gameConfig);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   264
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
   265
                /*if (isNetGame == YES)
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   266
                    [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
   267
                else*/
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   268
                    [self sendToEngineNoSave:@"TL"];
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   269
                NSString *saveHeader = @"TS";
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   270
                [self dumpRawData:[saveHeader UTF8String] ofSize:[saveHeader length]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   271
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
   272
                // 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
   273
                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
   274
                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
   275
                    [self sendToEngine:script];
11560
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11245
diff changeset
   276
                
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   277
                // seed info
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   278
                [self sendToEngine:[gameConfig objectForKey:@"seed_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   279
11577
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   280
                // missions/tranings/campaign only need the script configuration set and seed
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   281
                TGameType currentGameType = [HWUtils gameType];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11560
diff changeset
   282
                if (currentGameType == gtMission || currentGameType == gtCampaign)
11560
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11245
diff changeset
   283
                    break;
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11245
diff changeset
   284
                
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   285
                // dimension of the map
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   286
                [self sendToEngine:[gameConfig objectForKey:@"templatefilter_command"]];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   287
                [self sendToEngine:[gameConfig objectForKey:@"mapgen_command"]];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   288
                [self sendToEngine:[gameConfig objectForKey:@"mazesize_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   289
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   290
                // static land (if set)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   291
                NSString *staticMap = [gameConfig objectForKey:@"staticmap_command"];
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   292
                if ([staticMap length] != 0)
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   293
                    [self sendToEngine:staticMap];
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
                // theme info
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   296
                [self sendToEngine:[gameConfig objectForKey:@"theme_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   297
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   298
                // scheme (returns initial health)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   299
                NSInteger health = [self provideScheme:[gameConfig objectForKey:@"scheme"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   300
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   301
                // send an ammostore for each team
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   302
                NSArray *teamsConfig = [gameConfig objectForKey:@"teams_list"];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   303
                [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
   304
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   305
                // finally add hogs
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   306
                for (NSDictionary *teamData in teamsConfig) {
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   307
                    [self provideTeamData:[teamData objectForKey:@"team"]
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   308
                                  forHogs:[[teamData objectForKey:@"number"] intValue]
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   309
                               withHealth:health
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   310
                                  ofColor:[teamData objectForKey:@"color"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   311
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   312
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   313
            case '?':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   314
                DLog(@"Ping? Pong!");
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   315
                [self sendToEngine:@"!"];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   316
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   317
            case 'E':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   318
                DLog(@"ERROR - last console line: [%s]", &buffer[1]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   319
                clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   320
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   321
            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
   322
                [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
   323
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   324
                sscanf((char *)buffer, "%*s %d", &eProto);
4603
d362ab6c7f53 damn. it.
koda
parents: 4574
diff changeset
   325
                int netProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   326
                char *versionStr;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   327
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   328
                HW_versionInfo(&netProto, &versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   329
                if (netProto == eProto) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   330
                    DLog(@"Setting protocol version %d (%s)", eProto, versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   331
                } else {
4603
d362ab6c7f53 damn. it.
koda
parents: 4574
diff changeset
   332
                    DLog(@"ERROR - wrong protocol number: %d (expecting %d)", netProto, eProto);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   333
                    clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   334
                }
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   335
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   336
            case 'i':
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   337
                if (statsArray == nil) {
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   338
                    statsArray = [[NSMutableArray alloc] initWithCapacity:10 - 2];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   339
                    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
   340
                    [statsArray insertObject:ranking atIndex:0];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   341
                    [ranking release];
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   342
                }
4769
42adc7c11980 put nicer messages and split args
koda
parents: 4760
diff changeset
   343
                NSString *tempStr = [NSString stringWithUTF8String:&buffer[2]];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   344
                NSArray *info = [tempStr componentsSeparatedByString:@" "];
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   345
                NSString *arg = [info objectAtIndex:0];
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   346
                int index = [arg lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 3;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   347
                switch (buffer[1]) {
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   348
                    case 'r':           // winning team
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   349
                        [statsArray insertObject:[NSString stringWithUTF8String:&buffer[2]] atIndex:1];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   350
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   351
                    case 'D':           // best shot
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   352
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   353
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   354
                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"The best shot award won by %@ (with %@ points)", nil), hogName, arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   355
                        break;
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   356
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   357
                    case 'k':           // best hedgehog
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   358
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   359
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   360
                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"The best killer is %@ with %@ kill(s) in a turn", nil), hogName, arg]];
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   361
                        break;
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   362
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   363
                    case 'K':           // number of hogs killed
11235
bb3e57426a07 - Localization for missed strings in StatsPage (for both eng and rus)
antonc27 <antonc27@mail.ru>
parents: 11148
diff changeset
   364
                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"%@ hedgehog(s) were killed during this round", nil), arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   365
                        break;
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   366
                    case 'H':           // team health/graph
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 'T':           // local team stats
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   369
                        // still WIP in statsPage.cpp
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   370
                        break;
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   371
                    case 'P':           // teams ranking
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   372
                        [[statsArray objectAtIndex:0] addObject:tempStr];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   373
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   374
                    case 's':           // self damage
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   375
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   376
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   377
                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"%@ thought it's good to shoot his own hedgehogs with %@ points", nil), hogName, arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   378
                        break;
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   379
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   380
                    case 'S':           // friendly fire
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   381
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   382
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   383
                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"%@ killed %@ of his own hedgehogs", nil), hogName, arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   384
                        break;
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   385
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   386
                    case 'B':           // turn skipped
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   387
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   388
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   389
                        [statsArray addObject:[NSString stringWithFormat:NSLocalizedString(@"%@ was scared and skipped turn %@ times", nil), hogName, arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   390
                        break;
11245
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11244
diff changeset
   391
                    }
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   392
                    default:
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   393
                        DLog(@"Unhandled stat message, see statsPage.cpp");
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   394
                        break;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   395
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   396
                break;
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   397
            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
   398
                // 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
   399
                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
   400
                    [self.delegate gameEndedWithStatistics:statsArray];
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   401
                [statsArray release];
6265
a6944f94c19f aaand remove also ipcport from the class interface as well
koda
parents: 6263
diff changeset
   402
                [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
   403
                // 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
   404
                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
   405
            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
   406
                // 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
   407
                [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
   408
                // same here, don't set clientQuit to YES
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   409
                break;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   410
            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
   411
                [self dumpRawData:buffer ofSize:msgSize];
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   412
                break;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   413
        }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   414
    }
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   415
    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
   416
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   417
    [self.stream close];
5175
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   418
    [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
   419
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   420
    // Close the client socket
6822
206db098f8c5 ios headers cleanup, with tweaks to +randomPort and grenade timer handling in overlay
koda
parents: 6700
diff changeset
   421
    [HWUtils freePort:self.enginePort];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   422
    SDLNet_TCP_Close(csd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   423
    SDLNet_Quit();
11137
14f50dde3e8c - Using of @autoreleasepool is better
Anton Malmygin <antonc27@mail.ru>
parents: 11107
diff changeset
   424
    
14f50dde3e8c - Using of @autoreleasepool is better
Anton Malmygin <antonc27@mail.ru>
parents: 11107
diff changeset
   425
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   426
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
   427
    // 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
   428
    // to clean up any resources it allocated during its execution.
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   429
    //[NSThread exit];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   430
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   431
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   432
@end