Foundation Tool as Daemon?

SD macosxdevlist at personal.fishh2o.com
Tue Jun 3 15:33:47 PDT 2008


Here's some code for using an NSTask, you'll have to clean it up probably:

		NSString *pathToTool = ...;

		NSTask *task = [[[NSTask alloc] init] autorelease];
		[task setLaunchPath:pathToTool];
		[task setArguments:[NSArray arrayWithObjects:
										pathToTool,
										@"arg1",
										@"arg2",
										nil]];

		NSPipe *writePipe = [NSPipe pipe];
		NSFileHandle *writeHandle = [writePipe fileHandleForWriting];
		[task setStandardInput:writePipe];

		NSPipe *readPipe = [NSPipe pipe];
		NSFileHandle *readHandle = [readPipe fileHandleForReading];
		[task setStandardOutput:readPipe];

		NSPipe *readErrorPipe = [NSPipe pipe];
		NSFileHandle *readErrorHandle = [readErrorPipe fileHandleForReading];
		[task setStandardError:readErrorPipe];

		[task launch];

		//need to write user and pass then post data
		//size then data
		NSString *userAndPass = [[proxyController userName] 
stringByAppendingFormat:@":%@",
									[proxyController password]];
		NSMutableData* postData = [NSMutableData data];

		//username and pass
		int32_t size = strlen([userAndPass UTF8String])*sizeof(char);
		[postData appendBytes:&size length:sizeof(int32_t)];
		[postData appendBytes:[userAndPass UTF8String] length:size];

		//post data
		if(postDictionary != nil)
		{
			NSString *postDictionaryStr = [postDictionary 
formatForHTTPUsingEncoding:NSUTF8StringEncoding];
			size = strlen([postDictionaryStr UTF8String])*sizeof(char);
			[postData appendBytes:&size length:sizeof(int32_t)];
			[postData appendBytes:[postDictionaryStr UTF8String] length:size];
		}

		[writeHandle writeData:postData];
		[task waitUntilExit];

		NSData* URLdata = [readHandle readDataToEndOfFile];
		NSData* errorData = [readErrorHandle readDataToEndOfFile];

		IFDEBUG(
				NSLog(@"URLdata = '%@'", URLdata);
				NSLog(@"errorData = '%@'", errorData);
			)
		if(debugInfo != nil)	[debugInfo appendFormat:@"\t URLdata 
= '%@'\n", URLdata];
		if(debugInfo != nil)	[debugInfo appendFormat:@"\t 
errorData = '%@'\n", errorData];
		if(debugInfo != nil)	[debugInfo appendFormat:@"\t 
URLHandle status = N/A\n"];
		if(debugInfo != nil)	[debugInfo appendFormat:@"\t httpCode N/A\n"];

		NSString *returnStr = [[[NSString alloc]
										initWithData:([errorData 
length] == 0 ? URLdata : errorData)
										encoding:NSUTF8StringEncoding]
									autorelease];
		if(debugInfo != nil)	[debugInfo appendFormat:@"\t 
returnStr = '%@'\n", returnStr];
		IFDEBUG(NSLog(@"returnStr = '%@'", returnStr);)

		return returnStr;



SD
-- 
==========================================
SD

WARNING: Programming may be habit forming.


More information about the MacOSX-dev mailing list