Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 34 additions & 31 deletions source/gameanalytics/GameAnalyticsExtern.cpp
Original file line number Diff line number Diff line change
@@ -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)
{
Expand All @@ -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<int>(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)
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -234,45 +225,57 @@ 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()
{
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()
Expand Down
137 changes: 84 additions & 53 deletions source/gameanalytics/GameAnalyticsExtern.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}
Expand Down