project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m
author koda
Tue, 23 Aug 2011 03:46:17 +0200
changeset 5662 99083392cd4f
parent 5370 a3f87be7b09a
child 6078 8c0cc07731e5
permissions -rw-r--r--
FREE AT LAST!!! SDL came around a (mostly) sane way for implementing rotation events, so we can scrap all the workaround code that has been added to workaround it!! Also this allows us to use proper (internal) multitasking handling and can simplify optional settings and other yet unexplored features. Yay!
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
4976
088d40d8aba2 Happy 2011 :)
koda
parents: 4924
diff changeset
     3
 * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     4
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     8
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    12
 * GNU General Public License for more details.
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    13
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    14
 * You should have received a copy of the GNU General Public License
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    15
 * along with this program; if not, write to the Free Software
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    17
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    18
 * File created on 10/01/2010.
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    19
 */
81db3c85784b headers ftw, also right project file
koda
parents: 3825
diff changeset
    20
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    21
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    22
#import "EngineProtocolNetwork.h"
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    23
#import "PascalImports.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    24
#import "CommodityFunctions.h"
3904
22e4d74240e5 finishing touches to save games handling (help label, dim on overlay, edit text only when table is editable)
koda
parents: 3902
diff changeset
    25
#import "OverlayViewController.h"
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    26
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
    27
#define BUFFER_SIZE 255     // like in original frontend
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    28
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    29
@implementation EngineProtocolNetwork
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    30
@synthesize delegate, stream, ipcPort, csd;
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3941
diff changeset
    31
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    32
-(id) init {
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    33
    if (self = [super init]) {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    34
        self.delegate = nil;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    35
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    36
        self.ipcPort = 0;
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    37
        self.csd = NULL;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    38
        self.stream = nil;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    39
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    40
    return self;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    41
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    42
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    43
-(id) initOnPort:(NSInteger) port {
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    44
    if (self = [self init])
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    45
        self.ipcPort = port;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    46
    return self;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    47
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    48
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    49
-(void) gameHasEndedWithStats:(NSArray *)stats {
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    50
    if (self.delegate != nil && [self.delegate respondsToSelector:@selector(gameHasEndedWithStats:)])
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    51
        [self.delegate gameHasEndedWithStats:stats];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    52
    else
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    53
        DLog(@"Error! delegate == nil");
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    54
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    55
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    56
-(void) dealloc {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    57
    self.delegate = nil;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    58
    releaseAndNil(stream);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    59
    [super dealloc];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    60
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    61
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    62
#pragma mark -
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    63
#pragma mark Spawner functions
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    64
-(void) spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary {
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    65
    self.stream = [[NSOutputStream alloc] initToFileAtPath:onSaveFile append:YES];
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
    66
    [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
    67
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
    68
    [NSThread detachNewThreadSelector:@selector(engineProtocol:)
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    69
                             toTarget:self
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    70
                           withObject:dictionary];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    71
}
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    72
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    73
-(void) spawnThread:(NSString *)onSaveFile {
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
    74
    [self spawnThread:onSaveFile withOptions:nil];
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    75
}
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
    76
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    77
#pragma mark -
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    78
#pragma mark Provider functions
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    79
// unpacks team data from the selected team.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    80
-(void) provideTeamData:(NSString *)teamName forHogs:(NSInteger) numberOfPlayingHogs withHealth:(NSInteger) initialHealth ofColor:(NSNumber *)teamColor {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    81
    /*
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    82
     addteam <32charsMD5hash> <color> <team name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    83
     addhh <level> <health> <hedgehog name>
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    84
     <level> is 0 for human, 1-5 for bots (5 is the most stupid)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    85
    */
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 *teamFile = [[NSString alloc] initWithFormat:@"%@/%@", TEAMS_DIRECTORY(), teamName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    88
    NSDictionary *teamData = [[NSDictionary alloc] initWithContentsOfFile:teamFile];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    89
    [teamFile release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    90
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    91
    NSString *teamHashColorAndName = [[NSString alloc] initWithFormat:@"eaddteam %@ %@ %@",
3660
bc125bea5849 complete settings page rework
koda
parents: 3642
diff changeset
    92
                                      [teamData objectForKey:@"hash"], [teamColor stringValue], [teamName stringByDeletingPathExtension]];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    93
    [self sendToEngine: teamHashColorAndName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    94
    [teamHashColorAndName release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    95
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    96
    NSString *grave = [[NSString alloc] initWithFormat:@"egrave %@", [teamData objectForKey:@"grave"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    97
    [self sendToEngine: grave];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    98
    [grave release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
    99
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   100
    NSString *fort = [[NSString alloc] initWithFormat:@"efort %@", [teamData objectForKey:@"fort"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   101
    [self sendToEngine: fort];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   102
    [fort 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 *voicepack = [[NSString alloc] initWithFormat:@"evoicepack %@", [teamData objectForKey:@"voicepack"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   105
    [self sendToEngine: voicepack];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   106
    [voicepack release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   107
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   108
    NSString *flag = [[NSString alloc] initWithFormat:@"eflag %@", [teamData objectForKey:@"flag"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   109
    [self sendToEngine: flag];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   110
    [flag release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   111
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   112
    NSArray *hogs = [teamData objectForKey:@"hedgehogs"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   113
    for (int i = 0; i < numberOfPlayingHogs; i++) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   114
        NSDictionary *hog = [hogs objectAtIndex:i];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   115
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   116
        NSString *hogLevelHealthAndName = [[NSString alloc] initWithFormat:@"eaddhh %@ %d %@",
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   117
                                           [hog objectForKey:@"level"], initialHealth, [hog objectForKey:@"hogname"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   118
        [self sendToEngine: hogLevelHealthAndName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   119
        [hogLevelHealthAndName release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   120
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   121
        NSString *hogHat = [[NSString alloc] initWithFormat:@"ehat %@", [hog objectForKey:@"hat"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   122
        [self sendToEngine: hogHat];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   123
        [hogHat release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   124
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   125
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   126
    [teamData release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   127
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   128
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   129
// unpacks ammostore data from the selected ammo.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   130
-(void) provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger) numberOfTeams {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   131
    NSString *weaponPath = [[NSString alloc] initWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),ammostoreName];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   132
    NSDictionary *ammoData = [[NSDictionary alloc] initWithContentsOfFile:weaponPath];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   133
    [weaponPath release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   134
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   135
    // 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
   136
    int diff = HW_getNumberOfWeapons() - [[ammoData objectForKey:@"ammostore_initialqt"] length];
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   137
    NSString *update = @"";
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   138
    while ([update length] < diff)
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   139
        update = [update stringByAppendingString:@"0"];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   140
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   141
    NSString *ammloadt = [[NSString alloc] initWithFormat:@"eammloadt %@%@", [ammoData objectForKey:@"ammostore_initialqt"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   142
    [self sendToEngine: ammloadt];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   143
    [ammloadt release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   144
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   145
    NSString *ammprob = [[NSString alloc] initWithFormat:@"eammprob %@%@", [ammoData objectForKey:@"ammostore_probability"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   146
    [self sendToEngine: ammprob];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   147
    [ammprob release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   148
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   149
    NSString *ammdelay = [[NSString alloc] initWithFormat:@"eammdelay %@%@", [ammoData objectForKey:@"ammostore_delay"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   150
    [self sendToEngine: ammdelay];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   151
    [ammdelay release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   152
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3617
diff changeset
   153
    NSString *ammreinf = [[NSString alloc] initWithFormat:@"eammreinf %@%@", [ammoData objectForKey:@"ammostore_crate"], update];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   154
    [self sendToEngine: ammreinf];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   155
    [ammreinf release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   156
3930
8b00b4f93242 remove a useless field from weaponfile format
koda
parents: 3926
diff changeset
   157
    // send this for each team so it applies the same ammostore to all teams
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   158
    NSString *ammstore = [[NSString alloc] initWithString:@"eammstore"];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   159
    for (int i = 0; i < numberOfTeams; i++)
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   160
        [self sendToEngine: ammstore];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   161
    [ammstore release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   162
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   163
    [ammoData release];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   164
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   165
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   166
// unpacks scheme data from the selected scheme.plist to a sequence of engine commands
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   167
-(NSInteger) provideScheme:(NSString *)schemeName {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   168
    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
   169
    NSDictionary *schemeDictionary = [[NSDictionary alloc] initWithContentsOfFile:schemePath];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   170
    [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
   171
    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
   172
    NSArray *gamemodArray = [schemeDictionary objectForKey:@"gamemod"];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   173
    int result = 0;
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   174
    int mask = 0x00000004;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   175
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
   176
    // 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
   177
    for (NSNumber *value in gamemodArray) {
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   178
        if ([value boolValue] == YES)
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   179
            result |= mask;
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   180
        mask <<= 1;
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   181
    }
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   182
    NSString *flags = [[NSString alloc] initWithFormat:@"e$gmflags %d",result];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   183
    [self sendToEngine:flags];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   184
    [flags release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   185
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
   186
    // basic game flags
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   187
    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
   188
    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
   189
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   190
    for (int 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
   191
        NSDictionary *dict = [basic objectAtIndex:i];
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   192
        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
   193
        NSInteger value = [[basicArray objectAtIndex:i] intValue];
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   194
        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
   195
            value = 9999;
4605
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   196
        if ([[dict objectForKey:@"times1000"] boolValue])
a5c2f09daaaa this should prevent that ever again
koda
parents: 4603
diff changeset
   197
            value = value * 1000;
4211
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   198
        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
   199
        [self sendToEngine:strToSend];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   200
        [strToSend release];
7dcbd236ca59 this time i got it right, i'm sure of it; TEST ANYWAYS
koda
parents: 4210
diff changeset
   201
    }
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
   202
    [basic release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   203
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
   204
    [schemeDictionary release];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   205
    return result;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   206
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   207
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   208
#pragma mark -
4547
b70004a576a3 move server connection stuff in its own class
koda
parents: 4540
diff changeset
   209
#pragma mark Network relevant code
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   210
-(void) dumpRawData:(const char *)buffer ofSize:(uint8_t) length {
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   211
    [self.stream write:&length maxLength:1];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   212
    [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
   213
}
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
   214
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   215
// 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
   216
-(int) sendToEngine:(NSString *)string {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   217
    uint8_t length = [string length];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   218
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   219
    [self dumpRawData:[string UTF8String] ofSize:length];
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   220
    SDLNet_TCP_Send(csd, &length, 1);
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   221
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   222
}
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   223
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   224
// 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
   225
-(int) sendToEngineNoSave:(NSString *)string {
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   226
    uint8_t length = [string length];
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   227
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   228
    SDLNet_TCP_Send(csd, &length, 1);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   229
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   230
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   231
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
   232
// 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
   233
-(void) engineProtocol:(id) object {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   234
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   235
    NSDictionary *gameConfig = (NSDictionary *)object;
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   236
    NSMutableArray *statsArray = nil;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   237
    TCPsocket sd;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   238
    IPaddress ip;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   239
    int eProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   240
    BOOL clientQuit;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   241
    char const buffer[BUFFER_SIZE];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   242
    uint8_t msgSize;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   243
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   244
    clientQuit = NO;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   245
    csd = NULL;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   246
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   247
    if (SDLNet_Init() < 0) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   248
        DLog(@"SDLNet_Init: %s", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   249
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   250
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   251
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   252
    // Resolving the host using NULL make network interface to listen
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   253
    if (SDLNet_ResolveHost(&ip, NULL, ipcPort) < 0 && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   254
        DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   255
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   256
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   257
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   258
    // 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
   259
    if (!(sd = SDLNet_TCP_Open(&ip)) && !clientQuit) {
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   260
        DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), ipcPort);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   261
        clientQuit = YES;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   262
    }
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   263
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   264
    DLog(@"Waiting for a client on port %d", ipcPort);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   265
    while (csd == NULL)
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   266
        csd = SDLNet_TCP_Accept(sd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   267
    SDLNet_TCP_Close(sd);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   268
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   269
    while (!clientQuit) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   270
        msgSize = 0;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   271
        memset((void *)buffer, '\0', BUFFER_SIZE);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   272
        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
   273
            break;
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   274
        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
   275
            break;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   276
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   277
        switch (buffer[0]) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   278
            case 'C':
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   279
                DLog(@"Sending game config...\n%@", gameConfig);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   280
5154
851f36579ed4 initial refactoring for interfacing the game engine from the ios frontend (game doesn't run yet)
koda
parents: 5002
diff changeset
   281
                /*if (isNetGame == YES)
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   282
                    [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
   283
                else*/
3893
568bfd083465 allow more flexibility between viewcontrollers, also added stub pages for saved games
koda
parents: 3891
diff changeset
   284
                    [self sendToEngineNoSave:@"TL"];
3891
f8f0d0ceb19c initial support for savegames
koda
parents: 3829
diff changeset
   285
                NSString *saveHeader = @"TS";
4754
a0fd8211c00f moar code cleanup and initial saving of stats
koda
parents: 4605
diff changeset
   286
                [self dumpRawData:[saveHeader UTF8String] ofSize:[saveHeader length]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   287
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
   288
                // 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
   289
                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
   290
                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
   291
                    [self sendToEngine:script];
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
   292
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   293
                // seed info
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   294
                [self sendToEngine:[gameConfig objectForKey:@"seed_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   295
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   296
                // dimension of the map
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   297
                [self sendToEngine:[gameConfig objectForKey:@"templatefilter_command"]];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   298
                [self sendToEngine:[gameConfig objectForKey:@"mapgen_command"]];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   299
                [self sendToEngine:[gameConfig objectForKey:@"mazesize_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   300
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   301
                // static land (if set)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   302
                NSString *staticMap = [gameConfig objectForKey:@"staticmap_command"];
3642
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   303
                if ([staticMap length] != 0)
fb39fecca350 support for static map added to iFrontend
koda
parents: 3634
diff changeset
   304
                    [self sendToEngine:staticMap];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   305
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   306
                // theme info
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   307
                [self sendToEngine:[gameConfig objectForKey:@"theme_command"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   308
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   309
                // scheme (returns initial health)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   310
                NSInteger health = [self provideScheme:[gameConfig objectForKey:@"scheme"]];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   311
4000
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   312
                // send an ammostore for each team
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   313
                NSArray *teamsConfig = [gameConfig objectForKey:@"teams_list"];
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   314
                [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
   315
ddc4a09889e7 engine: reorder GameFlags and update files, frontend and other stuff
koda
parents: 3996
diff changeset
   316
                // finally add hogs
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   317
                for (NSDictionary *teamData in teamsConfig) {
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   318
                    [self provideTeamData:[teamData objectForKey:@"team"]
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   319
                                  forHogs:[[teamData objectForKey:@"number"] intValue]
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   320
                               withHealth:health
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   321
                                  ofColor:[teamData objectForKey:@"color"]];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   322
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   323
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   324
            case '?':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   325
                DLog(@"Ping? Pong!");
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   326
                [self sendToEngine:@"!"];
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   327
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   328
            case 'E':
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   329
                DLog(@"ERROR - last console line: [%s]", &buffer[1]);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   330
                clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   331
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   332
            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
   333
                [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
   334
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   335
                sscanf((char *)buffer, "%*s %d", &eProto);
4603
d362ab6c7f53 damn. it.
koda
parents: 4574
diff changeset
   336
                int netProto;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   337
                char *versionStr;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   338
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   339
                HW_versionInfo(&netProto, &versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   340
                if (netProto == eProto) {
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   341
                    DLog(@"Setting protocol version %d (%s)", eProto, versionStr);
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   342
                } else {
4603
d362ab6c7f53 damn. it.
koda
parents: 4574
diff changeset
   343
                    DLog(@"ERROR - wrong protocol number: %d (expecting %d)", netProto, eProto);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   344
                    clientQuit = YES;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   345
                }
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   346
                break;
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   347
            case 'i':
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   348
                if (statsArray == nil) {
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   349
                    statsArray = [[NSMutableArray alloc] initWithCapacity:10 - 2];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   350
                    NSMutableArray *ranking = [[NSMutableArray alloc] initWithCapacity:4];
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   351
                    [statsArray insertObject:ranking atIndex:0];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   352
                    [ranking release];
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   353
                }
4769
42adc7c11980 put nicer messages and split args
koda
parents: 4760
diff changeset
   354
                NSString *tempStr = [NSString stringWithUTF8String:&buffer[2]];
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   355
                NSArray *info = [tempStr componentsSeparatedByString:@" "];
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   356
                NSString *arg = [info objectAtIndex:0];
4793
5ea3d182415e merge and fix my typos
koda
parents: 4769
diff changeset
   357
                int index = [arg length] + 3;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   358
                switch (buffer[1]) {
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   359
                    case 'r':           // winning team
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   360
                        [statsArray insertObject:[NSString stringWithUTF8String:&buffer[2]] atIndex:1];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   361
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   362
                    case 'D':           // best shot
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   363
                        [statsArray addObject:[NSString stringWithFormat:@"The best shot award won by %s (with %@ points)", &buffer[index], arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   364
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   365
                    case 'k':           // best hedgehog
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   366
                        [statsArray addObject:[NSString stringWithFormat:@"The best killer is %s with %@ kills in a turn", &buffer[index], arg]];
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   367
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   368
                    case 'K':           // number of hogs killed
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   369
                        [statsArray addObject:[NSString stringWithFormat:@"%@ hedgehog(s) were killed during this round", arg]];
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 'H':           // team health/graph
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   372
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   373
                    case 'T':           // local team stats
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   374
                        // still WIP in statsPage.cpp
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   375
                        break;
4856
dbc256913b35 implemented ranking in ios stats pages
koda
parents: 4793
diff changeset
   376
                    case 'P':           // teams ranking
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   377
                        [[statsArray objectAtIndex:0] addObject:tempStr];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   378
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   379
                    case 's':           // self damage
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   380
                        [statsArray addObject:[NSString stringWithFormat:@"%s thought it's good to shoot his own hedgehogs with %@ points", &buffer[index], arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   381
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   382
                    case 'S':           // friendly fire
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   383
                        [statsArray addObject:[NSString stringWithFormat:@"%s killed %@ of his own hedgehogs", &buffer[index], arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   384
                        break;
4760
224c31b3ce7d simplify stats handling
koda
parents: 4757
diff changeset
   385
                    case 'B':           // turn skipped
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   386
                        [statsArray addObject:[NSString stringWithFormat:@"%s was scared and skipped turn %@ times", &buffer[index], arg]];
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   387
                        break;
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   388
                    default:
4549
2e0447837a97 initial stats interpretation for ifrontend
koda
parents: 4547
diff changeset
   389
                        DLog(@"Unhandled stat message, see statsPage.cpp");
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   390
                        break;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   391
                }
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   392
                break;
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   393
            case 'q':
4924
616b618814b5 show dual head mode some love
koda
parents: 4861
diff changeset
   394
                // game ended, can remove the savefile and the trailing overlay (when dualhead)
5155
f2165724605c more refactoring, less warnings, less stuff kept around
koda
parents: 5154
diff changeset
   395
                [self gameHasEndedWithStats:statsArray];
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
   396
                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
   397
            case 'Q':
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
   398
                // game exited but not completed, nothing to do (just don't save the message)
3902
3aac7ca07b0e have Saves restart net when loaded, also resumes music
koda
parents: 3898
diff changeset
   399
                break;
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   400
            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
   401
                [self dumpRawData:buffer ofSize:msgSize];
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   402
                break;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   403
        }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   404
    }
4510
ce9b8206e681 add some connection facility to netserver
koda
parents: 4488
diff changeset
   405
    DLog(@"Engine exited, ending thread");
5156
641abe679bf0 work in progress yet again (can run some games now)
koda
parents: 5155
diff changeset
   406
    [self.stream close];
5175
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   407
    [self.stream release];
a3da220dbb3f finish overlay refactoring and some leak annihilation
koda
parents: 5174
diff changeset
   408
    [statsArray 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
   409
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   410
    // Close the client socket
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   411
    SDLNet_TCP_Close(csd);
3548
4d220ee7c75f server somewhat simplified and correct sporadic crasher
koda
parents: 3547
diff changeset
   412
    SDLNet_Quit();
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3670
diff changeset
   413
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   414
    [pool release];
4861
91f889289a47 (ios) perform a small change about how to close the game window, should hopefully save memory and avoid crashes (who am i kidding? that's the usual PR talk...)
koda
parents: 4856
diff changeset
   415
    // 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
   416
    // to clean up any resources it allocated during its execution.
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   417
    //[NSThread exit];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   418
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   419
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   420
@end