diff --git a/source/gameanalytics/GameAnalyticsExtern.cpp b/source/gameanalytics/GameAnalyticsExtern.cpp index 86989e7..c6694b5 100644 --- a/source/gameanalytics/GameAnalyticsExtern.cpp +++ b/source/gameanalytics/GameAnalyticsExtern.cpp @@ -1,8 +1,9 @@ -#if GA_SHARED_LIB +#include "GameAnalyticsExtern.h" + +#ifdef GA_SHARED_LIB #include "GameAnalytics/GameAnalytics.h" #include "GAUtilities.h" -#include "GameAnalyticsExtern.h" gameanalytics::StringVector makeStringVector(const char** arr, int size) { @@ -23,24 +24,14 @@ gameanalytics::StringVector makeStringVector(const char** arr, int size) return {}; } -GAErrorCode copyStringBuffer(std::string const& s, char* out, int* size) +void gameAnalytics_freeString(const char* ptr) { - if(size && (*size > 0)) - { - if(out && (*size >= s.size())) - { - std::memcpy(out, s.data(), s.size()); - } - else - { - return EGABufferError; - } - - *size = static_cast(s.size()); - return EGANoError; - } + std::free((void*)ptr); +} - return EGAFailure; +const char* gameAnalytics_allocString(std::string const& s) +{ + return strndup(s.c_str(), s.size()); } void gameAnalytics_configureAvailableCustomDimensions01(const char **customDimensions, int size) @@ -129,7 +120,7 @@ void gameAnalytics_addBusinessEvent(const char *currency, double amount, const c gameanalytics::GameAnalytics::addBusinessEvent(currency, (int)amount, itemType, itemId, cartType, fields, mergeFields); } -void gameAnalytics_addResourceEvent(int flowType, const char *currency, double amount, const char *itemType, const char *itemId, const char *fields, GAStatus mergeFields) +void gameAnalytics_addResourceEvent(GAResourceFlowType flowType, const char *currency, double amount, const char *itemType, const char *itemId, const char *fields, GAStatus mergeFields) { gameanalytics::GameAnalytics::addResourceEvent((gameanalytics::EGAResourceFlowType)flowType, currency, (float)amount, itemType, itemId, fields, mergeFields); } @@ -234,16 +225,28 @@ void gameAnalytics_onQuit() gameanalytics::GameAnalytics::onQuit(); } -GAErrorCode gameAnalytics_getRemoteConfigsValueAsString(const char *key, char* out, int* size) +const char* gameAnalytics_getUserId() +{ + std::string returnValue = gameanalytics::GameAnalytics::getUserId(); + return gameAnalytics_allocString(returnValue); +} + +const char* gameAnalytics_getExternalUserId() +{ + std::string returnValue = gameanalytics::GameAnalytics::getExternalUserId(); + return gameAnalytics_allocString(returnValue); +} + +const char* gameAnalytics_getRemoteConfigsValueAsString(const char *key) { std::string returnValue = gameanalytics::GameAnalytics::getRemoteConfigsValueAsString(key); - return copyStringBuffer(returnValue, out, size); + return gameAnalytics_allocString(returnValue); } -GAErrorCode gameAnalytics_getRemoteConfigsValueAsStringWithDefaultValue(const char *key, const char *defaultValue, char* out, int* size) +const char* gameAnalytics_getRemoteConfigsValueAsStringWithDefaultValue(const char *key, const char *defaultValue) { std::string returnValue = gameanalytics::GameAnalytics::getRemoteConfigsValueAsString(key, defaultValue); - return copyStringBuffer(returnValue, out, size); + return gameAnalytics_allocString(returnValue); } GAStatus gameAnalytics_isRemoteConfigsReady() @@ -251,28 +254,28 @@ GAStatus gameAnalytics_isRemoteConfigsReady() return gameanalytics::GameAnalytics::isRemoteConfigsReady() ? EGAEnabled : EGADisabled; } -GAErrorCode gameAnalytics_getRemoteConfigsContentAsString(char* out, int* size) +const char* gameAnalytics_getRemoteConfigsContentAsString() { std::string returnValue = gameanalytics::GameAnalytics::getRemoteConfigsContentAsString(); - return copyStringBuffer(returnValue, out, size); + return gameAnalytics_allocString(returnValue); } -GAErrorCode gameAnalytics_getRemoteConfigsValueAsJson(const char* key, char* out, int* size) +const char* gameAnalytics_getRemoteConfigsValueAsJson(const char* key) { std::string returnValue = gameanalytics::GameAnalytics::getRemoteConfigsValueAsJson(key); - return copyStringBuffer(returnValue, out, size); + return gameAnalytics_allocString(returnValue); } -GAErrorCode gameAnalytics_getABTestingId(char* out, int* size) +const char* gameAnalytics_getABTestingId() { std::string returnValue = gameanalytics::GameAnalytics::getABTestingId(); - return copyStringBuffer(returnValue, out, size); + return gameAnalytics_allocString(returnValue); } -GAErrorCode gameAnalytics_getABTestingVariantId(char* out, int* size) +const char* gameAnalytics_getABTestingVariantId(char* out) { std::string returnValue = gameanalytics::GameAnalytics::getABTestingVariantId(); - return copyStringBuffer(returnValue, out, size); + return gameAnalytics_allocString(returnValue); } long long gameAnalytics_getElapsedSessionTime() diff --git a/source/gameanalytics/GameAnalyticsExtern.h b/source/gameanalytics/GameAnalyticsExtern.h index 0d60af7..3352c53 100644 --- a/source/gameanalytics/GameAnalyticsExtern.h +++ b/source/gameanalytics/GameAnalyticsExtern.h @@ -6,14 +6,18 @@ extern "C" { #endif -#if GA_SHARED_LIB +#ifdef GA_SHARED_LIB #if defined(_WIN32) - #define GA_EXPORT __declspec(dllexport) + #define GA_API __declspec(dllexport) #else - #define GA_EXPORT __attribute__((visibility("default"))) + #define GA_API __attribute__((visibility("default"))) #endif #else - #define GA_EXPORT + #if defined (_WIN32) + #define GA_API __declspec(dllimport) + #else + #define GA_API + #endif #endif enum GAErrorCode @@ -29,82 +33,109 @@ enum GAStatus: char EGAEnabled }; +enum GAResourceFlowType +{ + EGASource = 1, + EGASink = 2 +}; + +enum GAProgressionStatus +{ + EGAStart = 1, + EGAComplete = 2, + EGAFail = 3 +}; + +enum GAErrorSeverity +{ + EGADebug = 1, + EGAInfo = 2, + EGAWarning = 3, + EGAError = 4, + EGACritical = 5 +}; + typedef float(*GAFpsTracker)(void); -GA_EXPORT void gameAnalytics_configureAvailableCustomDimensions01(const char **customDimensions, int size); -GA_EXPORT void gameAnalytics_configureAvailableCustomDimensions02(const char **customDimensions, int size); -GA_EXPORT void gameAnalytics_configureAvailableCustomDimensions03(const char **customDimensions, int size); -GA_EXPORT void gameAnalytics_configureAvailableResourceCurrencies(const char **resourceCurrencies, int size); -GA_EXPORT void gameAnalytics_configureAvailableResourceItemTypes(const char **resourceItemTypes, int size); -GA_EXPORT void gameAnalytics_configureBuild(const char *build); -GA_EXPORT void gameAnalytics_configureWritablePath(const char *writablePath); -GA_EXPORT void gameAnalytics_configureDeviceModel(const char *deviceModel); -GA_EXPORT void gameAnalytics_configureDeviceManufacturer(const char *deviceManufacturer); +GA_API void gameAnalytics_freeString(const char* ptr); + +GA_API void gameAnalytics_configureAvailableCustomDimensions01(const char **customDimensions, int size); +GA_API void gameAnalytics_configureAvailableCustomDimensions02(const char **customDimensions, int size); +GA_API void gameAnalytics_configureAvailableCustomDimensions03(const char **customDimensions, int size); +GA_API void gameAnalytics_configureAvailableResourceCurrencies(const char **resourceCurrencies, int size); +GA_API void gameAnalytics_configureAvailableResourceItemTypes(const char **resourceItemTypes, int size); +GA_API void gameAnalytics_configureBuild(const char *build); +GA_API void gameAnalytics_configureWritablePath(const char *writablePath); +GA_API void gameAnalytics_configureDeviceModel(const char *deviceModel); +GA_API void gameAnalytics_configureDeviceManufacturer(const char *deviceManufacturer); // the version of SDK code used in an engine. Used for sdk_version field. // !! if set then it will override the SdkWrapperVersion. // example "unity 4.6.9" -GA_EXPORT void gameAnalytics_configureSdkGameEngineVersion(const char *sdkGameEngineVersion); +GA_API void gameAnalytics_configureSdkGameEngineVersion(const char *sdkGameEngineVersion); // the version of the game engine (if used and version is available) -GA_EXPORT void gameAnalytics_configureGameEngineVersion(const char *engineVersion); +GA_API void gameAnalytics_configureGameEngineVersion(const char *engineVersion); -GA_EXPORT void gameAnalytics_configureUserId(const char *uId); +GA_API void gameAnalytics_configureUserId(const char *uId); -GA_EXPORT void gameAnalytics_configureExternalUserId(const char* extId); +GA_API void gameAnalytics_configureExternalUserId(const char* extId); // initialize - starting SDK (need configuration before starting) -GA_EXPORT void gameAnalytics_initialize(const char *gameKey, const char *gameSecret); +GA_API void gameAnalytics_initialize(const char *gameKey, const char *gameSecret); // add events -GA_EXPORT void gameAnalytics_addBusinessEvent(const char *currency, double amount, const char *itemType, const char *itemId, const char *cartType, const char *customFields, GAStatus mergeFields); -GA_EXPORT void gameAnalytics_addResourceEvent(int flowType, const char *currency, double amount, const char *itemType, const char *itemId, const char *customFields, GAStatus mergeFields); -GA_EXPORT void gameAnalytics_addProgressionEvent(int progressionStatus, const char *progression01, const char *progression02, const char *progression03, const char *customFields, GAStatus mergeFields); -GA_EXPORT void gameAnalytics_addProgressionEventWithScore(int progressionStatus, const char *progression01, const char *progression02, const char *progression03, int score, const char *customFields, GAStatus mergeFields); -GA_EXPORT void gameAnalytics_addDesignEvent(const char *eventId, const char *customFields, GAStatus mergeFields); -GA_EXPORT void gameAnalytics_addDesignEventWithValue(const char *eventId, double value, const char *customFields, GAStatus mergeFields); -GA_EXPORT void gameAnalytics_addErrorEvent(int severity, const char *message, const char *customFields, GAStatus mergeFields); +GA_API void gameAnalytics_addBusinessEvent(const char *currency, double amount, const char *itemType, const char *itemId, const char *cartType, const char *customFields, GAStatus mergeFields); +GA_API void gameAnalytics_addResourceEvent(GAResourceFlowType flowType, const char *currency, double amount, const char *itemType, const char *itemId, const char *customFields, GAStatus mergeFields); +GA_API void gameAnalytics_addProgressionEvent(GAProgressionStatus progressionStatus, const char *progression01, const char *progression02, const char *progression03, const char *customFields, GAStatus mergeFields); +GA_API void gameAnalytics_addProgressionEventWithScore(GAProgressionStatus progressionStatus, const char *progression01, const char *progression02, const char *progression03, int score, const char *customFields, GAStatus mergeFields); +GA_API void gameAnalytics_addDesignEvent(const char *eventId, const char *customFields, GAStatus mergeFields); +GA_API void gameAnalytics_addDesignEventWithValue(const char *eventId, double value, const char *customFields, GAStatus mergeFields); +GA_API void gameAnalytics_addErrorEvent(GAErrorSeverity severity, const char *message, const char *customFields, GAStatus mergeFields); // set calls can be changed at any time (pre- and post-initialize) // some calls only work after a configure is called (setCustomDimension) -GA_EXPORT void gameAnalytics_setEnabledInfoLog(GAStatus flag); -GA_EXPORT void gameAnalytics_setEnabledVerboseLog(GAStatus flag); -GA_EXPORT void gameAnalytics_setEnabledManualSessionHandling(GAStatus flag); -GA_EXPORT void gameAnalytics_setEnabledErrorReporting(GAStatus flag); -GA_EXPORT void gameAnalytics_setEnabledEventSubmission(GAStatus flag); -GA_EXPORT void gameAnalytics_setCustomDimension01(const char *dimension01); -GA_EXPORT void gameAnalytics_setCustomDimension02(const char *dimension02); -GA_EXPORT void gameAnalytics_setCustomDimension03(const char *dimension03); +GA_API void gameAnalytics_setEnabledInfoLog(GAStatus flag); +GA_API void gameAnalytics_setEnabledVerboseLog(GAStatus flag); +GA_API void gameAnalytics_setEnabledManualSessionHandling(GAStatus flag); +GA_API void gameAnalytics_setEnabledErrorReporting(GAStatus flag); +GA_API void gameAnalytics_setEnabledEventSubmission(GAStatus flag); +GA_API void gameAnalytics_setCustomDimension01(const char *dimension01); +GA_API void gameAnalytics_setCustomDimension02(const char *dimension02); +GA_API void gameAnalytics_setCustomDimension03(const char *dimension03); -GA_EXPORT void gameAnalytics_setGlobalCustomEventFields(const char *customFields); +GA_API void gameAnalytics_setGlobalCustomEventFields(const char *customFields); -GA_EXPORT void gameAnalytics_startSession(); -GA_EXPORT void gameAnalytics_endSession(); +GA_API void gameAnalytics_startSession(); +GA_API void gameAnalytics_endSession(); // game state changes // will affect how session is started / ended -GA_EXPORT void gameAnalytics_onResume(); -GA_EXPORT void gameAnalytics_onSuspend(); -GA_EXPORT void gameAnalytics_onQuit(); +GA_API void gameAnalytics_onResume(); +GA_API void gameAnalytics_onSuspend(); +GA_API void gameAnalytics_onQuit(); + +GA_API const char* gameAnalytics_getRemoteConfigsValueAsString(const char *key); +GA_API const char* gameAnalytics_getRemoteConfigsValueAsStringWithDefaultValue(const char *key, const char *defaultValue); +GA_API const char* gameAnalytics_getRemoteConfigsValueAsJson(const char* key); -GA_EXPORT GAErrorCode gameAnalytics_getRemoteConfigsValueAsString(const char *key, char* out, int* size); -GA_EXPORT GAErrorCode gameAnalytics_getRemoteConfigsValueAsStringWithDefaultValue(const char *key, const char *defaultValue, char* out, int* bufferSize); -GA_EXPORT GAErrorCode gameAnalytics_getRemoteConfigsValueAsJson(const char* key, char* out, int* size); +GA_API const char* gameAnalytics_getUserId(); +GA_API const char* gameAnalytics_getExternalUserId(); -GA_EXPORT GAStatus gameAnalytics_isRemoteConfigsReady(); -GA_EXPORT GAErrorCode gameAnalytics_getRemoteConfigsContentAsString(char* out, int* size); +GA_API GAStatus gameAnalytics_isRemoteConfigsReady(); +GA_API const char* gameAnalytics_getRemoteConfigsContentAsString(); -GA_EXPORT GAErrorCode gameAnalytics_getABTestingId(char* out, int* size); -GA_EXPORT GAErrorCode gameAnalytics_getABTestingVariantId(char* out, int* size); +GA_API const char* gameAnalytics_getABTestingId(); +GA_API const char* gameAnalytics_getABTestingVariantId(); -GA_EXPORT long long gameAnalytics_getElapsedSessionTime(); -GA_EXPORT long long gameAnalytics_getElapsedTimeFromAllSessions(); -GA_EXPORT long long gameAnalytics_getElapsedTimeForPreviousSession(); +GA_API long long gameAnalytics_getElapsedSessionTime(); +GA_API long long gameAnalytics_getElapsedTimeFromAllSessions(); +GA_API long long gameAnalytics_getElapsedTimeForPreviousSession(); -GA_EXPORT void gameAnalytics_enableSDKInitEvent(GAStatus status); -GA_EXPORT void gameAnalytics_enableMemoryHistogram(GAStatus status); -GA_EXPORT void gameAnalytics_enableFPSHistogram(GAFpsTracker tracker, GAStatus status); -GA_EXPORT void gameAnalytics_enableHardwareTracking(GAStatus status); +GA_API void gameAnalytics_enableSDKInitEvent(GAStatus status); +GA_API void gameAnalytics_enableMemoryHistogram(GAStatus status); +GA_API void gameAnalytics_enableFPSHistogram(GAFpsTracker tracker, GAStatus status); +GA_API void gameAnalytics_enableHardwareTracking(GAStatus status); #ifdef __cplusplus }