// // IOSExtension.m // IOSExtension // // Created by Tom Krcha on 11/3/11. // Copyright 2011 Krcha. All rights reserved. // #import "FlashRuntimeExtensions.h" FREObject sum(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){ double number1; FREGetObjectAsDouble(argv[0], &number1); double number2; FREGetObjectAsDouble(argv[1], &number2); double sum = number1 + number2; NSLog(@"%f+%f=%f",number1,number2,sum); FREObject sumToReturn = nil; FRENewObjectFromDouble(sum, &sumToReturn); return sumToReturn; } FREObject subtract(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){ int32_t int1; FREGetObjectAsInt32(argv[0], &int1); int32_t int2; FREGetObjectAsInt32(argv[1], &int2); int32_t sum = int1 - int2; NSLog(@"%d-%d=%d",int1,int2,sum); FREObject sumToReturn = nil; FRENewObjectFromInt32(sum, &sumToReturn); return sumToReturn; } FREObject multiply(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){ uint32_t uint1; FREGetObjectAsUint32(argv[0], &uint1); uint32_t uint2; FREGetObjectAsUint32(argv[1], &uint2); uint32_t sum = uint1*uint2; NSLog(@"%d*%d=%d",uint1,uint2,sum); FREObject sumToReturn = nil; FRENewObjectFromUint32(sum, &sumToReturn); return sumToReturn; } FREObject concatenate(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){ // To be filled uint32_t string1Length; const uint8_t *string1; FREGetObjectAsUTF8(argv[0], &string1Length, &string1); uint32_t string2Length; const uint8_t *string2; FREGetObjectAsUTF8(argv[1], &string2Length, &string2); // Convert C strings to Obj-C strings NSString *string1ObjC = [NSString stringWithUTF8String:(char*)string1]; NSString *string2ObjC = [NSString stringWithUTF8String:(char*)string2]; // Concat strings NSString *returnString = [string1ObjC stringByAppendingString:string2ObjC]; // Convert Obj-C string to C UTF8String const char *str = [returnString UTF8String]; // Prepare for AS3 FREObject retStr; FRENewObjectFromUTF8(strlen(str)+1, (const uint8_t*)str, &retStr); // Return data back to ActionScript return retStr; } FREObject opposite(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){ uint32_t boolean; FREGetObjectAsBool(argv[0], &boolean); uint32_t oppositeValue = !boolean; FREObject retBool = nil; FRENewObjectFromBool(oppositeValue, &retBool); return retBool; } //------------------------------------ // // Required Methods. // //------------------------------------ // ContextInitializer() // // The context initializer is called when the runtime creates the extension context instance. void ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) { *numFunctionsToTest = 5; FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * 5); func[0].name = (const uint8_t*) "sum"; func[0].functionData = NULL; func[0].function = ∑ func[1].name = (const uint8_t*) "subtract"; func[1].functionData = NULL; func[1].function = &subtract; func[2].name = (const uint8_t*) "multiply"; func[2].functionData = NULL; func[2].function = &multiply; func[3].name = (const uint8_t*) "concatenate"; func[3].functionData = NULL; func[3].function = &concatenate; func[4].name = (const uint8_t*) "opposite"; func[4].functionData = NULL; func[4].function = &opposite; *functionsToSet = func; // Init our Obj-C extension //extension = [[IOSExtension alloc] init]; //[extension release]; } // ContextFinalizer() // // The context finalizer is called when the extension's ActionScript code // calls the ExtensionContext instance's dispose() method. // If the AIR runtime garbage collector disposes of the ExtensionContext instance, the runtime also calls // ContextFinalizer(). void ContextFinalizer(FREContext ctx) { NSLog(@"Entering ContextFinalizer()"); // Nothing to clean up. NSLog(@"Exiting ContextFinalizer()"); // dealloc our Obj-C extension instance //[extension dealloc]; return; } // ExtInitializer() // // The extension initializer is called the first time the ActionScript side of the extension // calls ExtensionContext.createExtensionContext() for any context. void ADBEExtInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet,FREContextFinalizer* ctxFinalizerToSet) { NSLog(@"Entering ExtInitializer()"); *extDataToSet = NULL; *ctxInitializerToSet = &ContextInitializer; *ctxFinalizerToSet = &ContextFinalizer; NSLog(@"Exiting ExtInitializer()"); } // ExtFinalizer() // // The extension finalizer is called when the runtime unloads the extension. However, it is not always called. void ADBEExtFinalizer(void* extData) { NSLog(@"Entering ExtFinalizer()"); // Nothing to clean up. NSLog(@"Exiting ExtFinalizer()"); return; }