Last active
December 11, 2015 17:08
-
-
Save aaronpearce/4632341 to your computer and use it in GitHub Desktop.
dAmnObj-C Packet Parser Method
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
-(SYPacket*)initWithString:(NSString *)string { | |
if(self = [super init]) { | |
// set up basic alpha char set | |
NSCharacterSet *alphaCharSet = [NSCharacterSet alphanumericCharacterSet]; | |
// Retain raw packet string | |
self.raw = [string copy]; | |
// Set up scanner | |
NSScanner *scanner = [NSScanner scannerWithString:string]; | |
// make sure it scans everything! | |
[scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@""]]; | |
// scan for command | |
NSString *cmd; | |
[scanner scanCharactersFromSet:alphaCharSet intoString:&cmd]; | |
self.command = cmd; | |
// Check to see if its just a command packet | |
if(![scanner scanString:@" " intoString:nil]) return self; | |
// scan for parameters | |
NSString *param; | |
// scan for anything that isn't " \n\t" | |
[scanner scanCharactersFromSet:[[NSCharacterSet characterSetWithCharactersInString:@" \n\t"] invertedSet] | |
intoString:¶m]; | |
self.param = param; | |
// Scan for Body, if double newline, everything is body | |
if ([scanner scanString:@"\n\n" intoString:nil]) { | |
self.body = [self.raw substringFromIndex:[scanner scanLocation]]; | |
return self; | |
} | |
// If no new line, end of packet | |
if (![scanner scanString:@"\n" intoString:nil]) { | |
return self; | |
} | |
// Set up dictionary, key and val | |
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; | |
NSString *key; | |
NSString *val; | |
// Sort out the args list! | |
while (true) { | |
// if no key, break while loop. | |
if(![scanner scanCharactersFromSet:alphaCharSet intoString:&key]) break; | |
// Scan for = | |
[scanner scanString:@"=" intoString:nil]; | |
// Scan after = for the args value! scan for anything that isn't "\n" | |
[scanner scanCharactersFromSet:[[NSCharacterSet characterSetWithCharactersInString:@"\n"] invertedSet] | |
intoString:&val]; | |
// Add to dict | |
[dict setObject:val forKey:key]; | |
// Scan for new line | |
[scanner scanString:@"\n" intoString:nil]; | |
} | |
// Set args var to dict | |
self.args = dict; | |
if ([scanner scanString:@"\n" intoString:nil]) | |
self.body = [self.raw substringFromIndex:[scanner scanLocation]]; | |
} | |
// return | |
return self; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment