Skip to content

Instantly share code, notes, and snippets.

@aaronpearce
Last active December 11, 2015 17:08
Show Gist options
  • Save aaronpearce/4632348 to your computer and use it in GitHub Desktop.
Save aaronpearce/4632348 to your computer and use it in GitHub Desktop.
dM2 Packet Parser
-(NSMutableDictionary *)parser:(NSString *)packet:(NSInteger)depth {
NSMutableArray *partsArr = [NSMutableArray arrayWithArray:[packet componentsSeparatedByString:@"\n\n"]]; // Split by \n\n
NSMutableArray *headArr = [NSMutableArray arrayWithArray:[[partsArr objectAtIndex:0] componentsSeparatedByString:@"\n"]]; // Split by \n
[partsArr removeObjectAtIndex:0];
NSMutableArray *cmdArr = [NSMutableArray arrayWithArray:[[headArr objectAtIndex:0] componentsSeparatedByString:@" "]];
[headArr removeObjectAtIndex:0];
NSString *cmd = [cmdArr objectAtIndex:0];
[cmdArr removeObjectAtIndex:0];
NSString *param = [cmdArr componentsJoinedByString:@" "];
NSMutableDictionary *args = [[[NSMutableDictionary alloc] init] retain];
for (NSInteger i=0; i < [headArr count]; i++) {
NSMutableArray *valArr = [NSMutableArray arrayWithArray:[[headArr objectAtIndex:i] componentsSeparatedByString:@"="]];
NSString *key = [valArr objectAtIndex:0];
[valArr removeObjectAtIndex:0];
NSString *value = [valArr componentsJoinedByString:@"="];
[args setValue:value forKey:key];
[key release];
[value release];
}
NSString *body = [partsArr componentsJoinedByString:@"\n\n"];
NSMutableArray *subArr = [[NSMutableArray alloc] init];
if ([partsArr count] >= 1) {
NSInteger j = [partsArr count]-1;
if(j == 1) {
[subArr addObject:[self parser:body :depth+1]];
} else {
for (j; j>= 0; j--) {
[subArr addObject:[self parser:[partsArr objectAtIndex:j]:depth+1]];
}
}
}
NSMutableDictionary *packetDict = [[NSMutableDictionary alloc] initWithCapacity:6];
[packetDict setValue:cmd forKey:@"cmd"];
[packetDict setValue:param forKey:@"param"];
[packetDict setValue:args forKey:@"args"];
[packetDict setValue:body forKey:@"body"];
[packetDict setValue:subArr forKey:@"sub"];
[packetDict setValue:packet forKey:@"raw"];
[subArr release];
[args release];
return [packetDict autorelease];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment