Last active
December 11, 2015 17:08
-
-
Save aaronpearce/4632348 to your computer and use it in GitHub Desktop.
dM2 Packet Parser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-(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