project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m
author nemo
Tue, 30 Apr 2019 09:36:13 -0400
changeset 14859 8d65728c4ed0
parent 12872 00215a7ec5f5
permissions -rw-r--r--
Backed out changeset 13589d529899 So, we only disabled this on the release branch in r29d614a5c9eb due to having discovered it JUST before release. We should fix it properly in default...
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
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
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
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
    38
- (id)init {
6870
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
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    42
#pragma mark -
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    43
#pragma mark Spawner functions
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
    44
- (void)spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary {
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
    45
    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
    46
    [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
    47
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
    48
    // +detachNewThreadSelector retain/release self automatically
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
    49
    [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
    50
                             toTarget:self
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
    51
                           withObject:dictionary];
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
    52
}
6265
a6944f94c19f aaand remove also ipcport from the class interface as well
koda
parents: 6263
diff changeset
    53
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    54
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    55
#pragma mark Provider functions
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    56
// unpacks team data from the selected team.plist to a sequence of engine commands
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
    57
- (void)provideTeamData:(NSString *)teamName forHogs:(NSInteger)numberOfPlayingHogs withHealth:(NSInteger)initialHealth ofColor:(NSNumber *)teamColor {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    58
    /*
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    59
     addteam <32charsMD5hash> <color> <team name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    60
     addhh <level> <health> <hedgehog name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    61
     <level> is 0 for human, 1-5 for bots (5 is the most stupid)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    62
    */
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    63
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    64
    NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@", TEAMS_DIRECTORY(), teamName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    65
    NSDictionary *teamData = [[NSDictionary alloc] initWithContentsOfFile:teamFile];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    66
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    67
    NSString *teamHashColorAndName = [[NSString alloc] initWithFormat:@"eaddteam %@ %@ %@",
3660
bc125bea5849 complete settings page rework
koda
parents: 3642
diff changeset
    68
                                      [teamData objectForKey:@"hash"], [teamColor stringValue], [teamName stringByDeletingPathExtension]];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    69
    [self sendToEngine: teamHashColorAndName];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    70
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    71
    NSString *grave = [[NSString alloc] initWithFormat:@"egrave %@", [teamData objectForKey:@"grave"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    72
    [self sendToEngine: grave];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    73
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    74
    NSString *fort = [[NSString alloc] initWithFormat:@"efort %@", [teamData objectForKey:@"fort"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    75
    [self sendToEngine: fort];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    76
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    77
    NSString *voicepack = [[NSString alloc] initWithFormat:@"evoicepack %@", [teamData objectForKey:@"voicepack"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    78
    [self sendToEngine: voicepack];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    79
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    80
    NSString *flag = [[NSString alloc] initWithFormat:@"eflag %@", [teamData objectForKey:@"flag"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    81
    [self sendToEngine: flag];
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
    NSArray *hogs = [teamData objectForKey:@"hedgehogs"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    84
    for (int i = 0; i < numberOfPlayingHogs; i++) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    85
        NSDictionary *hog = [hogs objectAtIndex:i];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    86
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
    87
        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
    88
                                           [hog objectForKey:@"level"], (long)initialHealth, [hog objectForKey:@"hogname"]];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    89
        [self sendToEngine: hogLevelHealthAndName];
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 *hogHat = [[NSString alloc] initWithFormat:@"ehat %@", [hog objectForKey:@"hat"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    92
        [self sendToEngine: hogHat];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    93
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    94
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    95
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    96
// unpacks ammostore data from the selected ammo.plist to a sequence of engine commands
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
    97
- (void)provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger)numberOfTeams {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    98
    NSString *weaponPath = [[NSString alloc] initWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),ammostoreName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    99
    NSDictionary *ammoData = [[NSDictionary alloc] initWithContentsOfFile:weaponPath];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   100
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   101
    // 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
   102
    int diff = HW_getNumberOfWeapons() - [[ammoData objectForKey:@"ammostore_initialqt"] length];
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   103
    NSString *update = @"";
6908
896ed2afcfb8 ios: turn on more warning messages and start correcting them
koda
parents: 6870
diff changeset
   104
    while ((int)[update length] < diff)
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   105
        update = [update stringByAppendingString:@"0"];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   106
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   107
    NSString *ammloadt = [[NSString alloc] initWithFormat:@"eammloadt %@%@", [ammoData objectForKey:@"ammostore_initialqt"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   108
    [self sendToEngine: ammloadt];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   109
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   110
    NSString *ammprob = [[NSString alloc] initWithFormat:@"eammprob %@%@", [ammoData objectForKey:@"ammostore_probability"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   111
    [self sendToEngine: ammprob];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   112
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   113
    NSString *ammdelay = [[NSString alloc] initWithFormat:@"eammdelay %@%@", [ammoData objectForKey:@"ammostore_delay"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   114
    [self sendToEngine: ammdelay];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   115
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   116
    NSString *ammreinf = [[NSString alloc] initWithFormat:@"eammreinf %@%@", [ammoData objectForKey:@"ammostore_crate"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   117
    [self sendToEngine: ammreinf];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   118
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   119
    // send this for each team so it applies the same ammostore to all teams
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   120
    NSString *ammstore = [[NSString alloc] initWithString:@"eammstore"];
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   121
    for (int i = 0; i < numberOfTeams; i++) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   122
        [self sendToEngine: ammstore];
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   123
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   124
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   125
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   126
// unpacks scheme data from the selected scheme.plist to a sequence of engine commands
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   127
- (NSInteger)provideScheme:(NSString *)schemeName {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   128
    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
   129
    NSDictionary *schemeDictionary = [[NSDictionary alloc] initWithContentsOfFile:schemePath];
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   130
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
   131
    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
   132
    NSArray *gamemodArray = [schemeDictionary objectForKey:@"gamemod"];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   133
    int result = 0;
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   134
    int mask = 0x00000004;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   135
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
   136
    // 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
   137
    for (NSNumber *value in gamemodArray) {
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   138
        if ([value boolValue] == YES)
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   139
            result |= mask;
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   140
        mask <<= 1;
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   141
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   142
    NSString *flags = [[NSString alloc] initWithFormat:@"e$gmflags %d",result];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   143
    [self sendToEngine:flags];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   144
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
   145
    // basic game flags
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   146
    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
   147
    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
   148
6908
896ed2afcfb8 ios: turn on more warning messages and start correcting them
koda
parents: 6870
diff changeset
   149
    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
   150
        NSDictionary *dict = [basic objectAtIndex:i];
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   151
        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
   152
        NSInteger value = [[basicArray objectAtIndex:i] intValue];
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   153
        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
   154
            value = 9999;
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   155
        if ([[dict objectForKey:@"times1000"] boolValue])
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   156
            value = value * 1000;
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   157
        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
   158
        [self sendToEngine:strToSend];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   159
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   160
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   161
    return result;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   162
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   163
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   164
#pragma mark -
4547
b70004a576a3 move server connection stuff in its own class
koda
parents: 4540
diff changeset
   165
#pragma mark Network relevant code
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   166
- (void)dumpRawData:(const char *)buffer ofSize:(uint8_t) length {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   167
    [self.stream write:&length maxLength:1];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   168
    [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
   169
}
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
   170
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   171
// 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
   172
-(int) sendToEngine:(NSString *)string {
11240
57891137ffef - Fix for sending to engine non-english characters
antonc27 <antonc27@mail.ru>
parents: 11231
diff changeset
   173
    uint8_t length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   174
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   175
    [self dumpRawData:[string UTF8String] ofSize:length];
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   176
    SDLNet_TCP_Send(csd, &length, 1);
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   177
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   178
}
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   179
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   180
// 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
   181
-(int) sendToEngineNoSave:(NSString *)string {
11240
57891137ffef - Fix for sending to engine non-english characters
antonc27 <antonc27@mail.ru>
parents: 11231
diff changeset
   182
    uint8_t length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   183
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   184
    SDLNet_TCP_Send(csd, &length, 1);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   185
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   186
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   187
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
   188
// this is launched as thread and handles all IPC with engine
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   189
- (void)engineProtocol:(id)object {
11137
14f50dde3e8c - Using of @autoreleasepool is better
Anton Malmygin <antonc27@mail.ru>
parents: 11107
diff changeset
   190
    @autoreleasepool {
14f50dde3e8c - Using of @autoreleasepool is better
Anton Malmygin <antonc27@mail.ru>
parents: 11107
diff changeset
   191
    
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   192
    NSDictionary *gameConfig = (NSDictionary *)object;
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   193
    NSMutableArray *statsArray = nil;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   194
    TCPsocket sd;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   195
    IPaddress ip;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   196
    int eProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   197
    BOOL clientQuit;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   198
    char const buffer[BUFFER_SIZE];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   199
    uint8_t msgSize;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   200
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   201
    clientQuit = NO;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   202
    csd = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   203
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   204
    if (SDLNet_Init() < 0) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   205
        DLog(@"SDLNet_Init: %s", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   206
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   207
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   208
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   209
    // Resolving the host using NULL make network interface to listen
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   210
    if (SDLNet_ResolveHost(&ip, NULL, self.enginePort) < 0 && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   211
        DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   212
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   213
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   214
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   215
    // 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
   216
    if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
11107
553899c1ff78 - Small warning fix
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   217
        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
   218
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   219
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   220
6321
5a0416e5a6de further engine interaction refactoring
koda
parents: 6301
diff changeset
   221
    DLog(@"Waiting for a client on port %d", self.enginePort);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   222
    while (csd == NULL)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   223
        csd = SDLNet_TCP_Accept(sd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   224
    SDLNet_TCP_Close(sd);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   225
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   226
    while (!clientQuit) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   227
        msgSize = 0;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   228
        memset((void *)buffer, '\0', BUFFER_SIZE);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   229
        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
   230
            break;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   231
        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
   232
            break;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   233
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   234
        switch (buffer[0]) {
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   235
            case 'C': {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   236
                DLog(@"Sending game config...\n%@", gameConfig);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   237
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
   238
                /*if (isNetGame == YES)
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   239
                    [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
   240
                else*/
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   241
                    [self sendToEngineNoSave:@"TL"];
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   242
                NSString *saveHeader = @"TS";
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   243
                [self dumpRawData:[saveHeader UTF8String] ofSize:[saveHeader length]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   244
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
   245
                // 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
   246
                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
   247
                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
   248
                    [self sendToEngine:script];
11555
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11241
diff changeset
   249
                
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   250
                // seed info
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   251
                [self sendToEngine:[gameConfig objectForKey:@"seed_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   252
11572
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11555
diff changeset
   253
                // 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: 11555
diff changeset
   254
                TGameType currentGameType = [HWUtils gameType];
28afdaa159cb - Campaign for iOS: Finally can launch campaign's mission game from list!
antonc27 <antonc27@mail.ru>
parents: 11555
diff changeset
   255
                if (currentGameType == gtMission || currentGameType == gtCampaign)
11555
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11241
diff changeset
   256
                    break;
b96080df19d0 - Send also some seed when loading missions on iOS (same behavior as on desktop)
antonc27 <antonc27@mail.ru>
parents: 11241
diff changeset
   257
                
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   258
                // dimension of the map
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   259
                [self sendToEngine:[gameConfig objectForKey:@"templatefilter_command"]];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   260
                [self sendToEngine:[gameConfig objectForKey:@"mapgen_command"]];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   261
                [self sendToEngine:[gameConfig objectForKey:@"mazesize_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   262
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   263
                // static land (if set)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   264
                NSString *staticMap = [gameConfig objectForKey:@"staticmap_command"];
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   265
                if ([staticMap length] != 0)
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   266
                    [self sendToEngine:staticMap];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   267
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   268
                // theme info
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   269
                [self sendToEngine:[gameConfig objectForKey:@"theme_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   270
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   271
                // scheme (returns initial health)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   272
                NSInteger health = [self provideScheme:[gameConfig objectForKey:@"scheme"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   273
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   274
                // send an ammostore for each team
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   275
                NSArray *teamsConfig = [gameConfig objectForKey:@"teams_list"];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   276
                [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
   277
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   278
                // finally add hogs
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   279
                for (NSDictionary *teamData in teamsConfig) {
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   280
                    [self provideTeamData:[teamData objectForKey:@"team"]
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   281
                                  forHogs:[[teamData objectForKey:@"number"] intValue]
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   282
                               withHealth:health
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   283
                                  ofColor:[teamData objectForKey:@"color"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   284
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   285
                break;
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   286
            }
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   287
            case '?': {
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   288
                DLog(@"Ping? Pong!");
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   289
                [self sendToEngine:@"!"];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   290
                break;
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   291
            }
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   292
            case 'E': {
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   293
                DLog(@"ERROR - last console line: [%s]", &buffer[1]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   294
                clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   295
                break;
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   296
            }
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   297
            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
   298
                [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
   299
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   300
                sscanf((char *)buffer, "%*s %d", &eProto);
4603
d362ab6c7f53 damn. it.
koda
parents: 4574
diff changeset
   301
                int netProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   302
                char *versionStr;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   303
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   304
                HW_versionInfo(&netProto, &versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   305
                if (netProto == eProto) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   306
                    DLog(@"Setting protocol version %d (%s)", eProto, versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   307
                } else {
4603
d362ab6c7f53 damn. it.
koda
parents: 4574
diff changeset
   308
                    DLog(@"ERROR - wrong protocol number: %d (expecting %d)", netProto, eProto);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   309
                    clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   310
                }
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   311
                break;
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   312
            }
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   313
            case 'i': {
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   314
                if (statsArray == nil) {
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   315
                    statsArray = [[NSMutableArray alloc] initWithCapacity:10 - 2];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   316
                    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
   317
                    [statsArray insertObject:ranking atIndex:0];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   318
                }
4769
42adc7c11980 put nicer messages and split args
koda
parents: 4760
diff changeset
   319
                NSString *tempStr = [NSString stringWithUTF8String:&buffer[2]];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   320
                NSArray *info = [tempStr componentsSeparatedByString:@" "];
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   321
                NSString *arg = [info objectAtIndex:0];
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   322
                int index = [arg lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 3;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   323
                switch (buffer[1]) {
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   324
                    case 'r': {           // winning team
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   325
                        [statsArray insertObject:[NSString stringWithUTF8String:&buffer[2]] atIndex:1];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   326
                        break;
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   327
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   328
                    case 'D':           // best shot
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   329
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   330
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   331
                        [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
   332
                        break;
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   333
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   334
                    case 'k':           // best hedgehog
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   335
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   336
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   337
                        [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
   338
                        break;
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   339
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   340
                    case 'K':           // number of hogs killed
11231
bb3e57426a07 - Localization for missed strings in StatsPage (for both eng and rus)
antonc27 <antonc27@mail.ru>
parents: 11148
diff changeset
   341
                        [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
   342
                        break;
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   343
                    case 'H':           // team health/graph
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   344
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   345
                    case 'T':           // local team stats
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   346
                        // still WIP in statsPage.cpp
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   347
                        break;
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   348
                    case 'P':           // teams ranking
6870
f72cac290325 ios: refactor the code of the after-game statistics display using delegates
koda
parents: 6832
diff changeset
   349
                        [[statsArray objectAtIndex:0] addObject:tempStr];
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 's':           // self damage
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   352
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   353
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   354
                        [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
   355
                        break;
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   356
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   357
                    case 'S':           // friendly fire
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   358
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   359
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   360
                        [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
   361
                        break;
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   362
                    }
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   363
                    case 'B':           // turn skipped
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   364
                    {
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   365
                        NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   366
                        [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
   367
                        break;
11241
e7bae160b73b - Fix for formatting non-english characters, received from engine
antonc27 <antonc27@mail.ru>
parents: 11240
diff changeset
   368
                    }
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   369
                    default:
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   370
                        DLog(@"Unhandled stat message, see statsPage.cpp");
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   371
                        break;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   372
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   373
                break;
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   374
            }
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   375
            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
   376
                // 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
   377
                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
   378
                    [self.delegate gameEndedWithStatistics:statsArray];
6265
a6944f94c19f aaand remove also ipcport from the class interface as well
koda
parents: 6263
diff changeset
   379
                [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
   380
                // 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
   381
                break;
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   382
            }
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   383
            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
   384
                // 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
   385
                [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
   386
                // same here, don't set clientQuit to YES
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   387
                break;
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 11572
diff changeset
   388
            }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   389
            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
   390
                [self dumpRawData:buffer ofSize:msgSize];
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   391
                break;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   392
        }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   393
    }
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   394
    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
   395
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   396
    [self.stream close];
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
   397
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   398
    // Close the client socket
6822
206db098f8c5 ios headers cleanup, with tweaks to +randomPort and grenade timer handling in overlay
koda
parents: 6700
diff changeset
   399
    [HWUtils freePort:self.enginePort];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   400
    SDLNet_TCP_Close(csd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   401
    SDLNet_Quit();
11137
14f50dde3e8c - Using of @autoreleasepool is better
Anton Malmygin <antonc27@mail.ru>
parents: 11107
diff changeset
   402
    
14f50dde3e8c - Using of @autoreleasepool is better
Anton Malmygin <antonc27@mail.ru>
parents: 11107
diff changeset
   403
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   404
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
   405
    // 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
   406
    // to clean up any resources it allocated during its execution.
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   407
    //[NSThread exit];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   408
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   409
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   410
@end