-
Notifications
You must be signed in to change notification settings - Fork 0
/
AnalyticManager.h
113 lines (97 loc) · 3.44 KB
/
AnalyticManager.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#pragma once
#include <mutex>
#include <vector>
#include <thread>
#include <string>
#include <memory>
#include <boost/format.hpp>
#include <boost/network/protocol/http/client.hpp>
namespace GameAnalytics
{
#pragma region Forward Declarations
class Event;
class UserEvent;
class DesignEvent;
class BusinessEvent;
class ErrorEvent;
#pragma endregion Forward Declarations
typedef std::shared_ptr<std::mutex> SPMutex;
class AnalyticManager
{
public:
static void Initialize(std::string secretKey, std::string gameKey, std::string apiKey,
std::string buildIdentifier, std::string userID = generateUserIdentifier(), std::string sessionID = generateSessionIdentifier());
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// Send the event specified to the GameAnalytics Server.
///
/// Keep in mind this is a blocking operation, so don't use it, if you might screw up your
/// </summary>
///
/// <param name="evt"> [in,out] If non-null, the event. </param>
////////////////////////////////////////////////////////////////////////////////////////////////////
static void Send(Event* evt);
static void Queue(UserEvent* evt);
static void Queue(BusinessEvent* evt);
static void Queue(DesignEvent* evt);
static void Queue(ErrorEvent* evt);
private:
#pragma region Static Variables
static boost::format API_URL;
static std::string CONTENT_TYPE;
static std::string API_VERSION;
static int SUBMIT_INTERVAL_SECONDS;
#pragma endregion Static Variables
#pragma region Internal GameAnalytic Variables
static std::string mSecretKey;
static std::string mGameKey;
static std::string mAPIKey;
static std::string mBuildIdentifier;
static std::string mUID;
static std::string mSID;
#pragma endregion
#pragma region Analytic Manager Variables
static bool mInitialized;
static std::shared_ptr<boost::network::http::client> mClient;
static std::thread mSubmitUE, mSubmitBE, mSubmitDE, mSubmitEE;
static SPMutex mUserLock, mBusinessLock, mDesignLock, mErrorLock;
static std::vector<UserEvent*> mUserEvents;
static std::vector<BusinessEvent*> mBusinessEvents;
static std::vector<DesignEvent*> mDesignEvents;
static std::vector<ErrorEvent*> mErrorEvents;
#pragma endregion
#pragma region Batch Event Senders
static void sendUserEvents();
static void sendBusinessEvents();
static void sendDesignEvents();
static void sendErrorEvents();
#pragma endregion
static std::string getURL(std::string category);
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// Generates a user identifier.
///
/// This uses the user's MAC from network card.
/// </summary>
///
/// <returns>
/// The user identifier.
/// </returns>
////////////////////////////////////////////////////////////////////////////////////////////////////
static std::string generateUserIdentifier();
////////////////////////////////////////////////////////////////////////////////////////////////////
/// <summary>
/// Generates a session identifier.
///
/// This uses platform specific GUID generation code.
///
/// In the case of windows this uses CoCreateGuid
/// </summary>
///
/// <returns>
/// The session identifier.
/// </returns>
////////////////////////////////////////////////////////////////////////////////////////////////////
static std::string generateSessionIdentifier();
};
}