This is not a working code and it maybe not be compiled. This is example just for understanding how it works.
GameSparksManager.h
#pragma once
#include "cocos2d.h"
// *GS* includes needed for GameSparks
#include <GameSparks/GS.h>
#include <GameSparks/Cocos2dxPlatform.h>
#include <GameSparks/generated/GSRequests.h>
class GameSparksManager
{
public:
static GameSparksManager *getInstance();
static void destroyInstance();
bool isLogin() { return gsupdater.GS.GetAuthenticated(); }
void login(const std::string& name, const std::string& pswrd, std::function<void(bool)> callback);
void logout() { gsupdater.GS.Disconnect(); gsupdater.GS.Reset(); }
void registration(const std::string& dispaly_name, const std::string& name, const std::string& pswrd, std::function<void(bool)> callback);
void saveSettings();
void loadSettings();
~GameSparksManager();
private:
GameSparksManager();
bool init();
void onGameSparksAvailable(GameSparks::Core::GS& gsInstance, bool available);
void authenticationRequest_Response(GameSparks::Core::GS& gsInstance, const GameSparks::Api::Responses::AuthenticationResponse& response);
void registrationRequest_Response(GameSparks::Core::GS& gsInstance, const GameSparks::Api::Responses::RegistrationResponse& response);
void accountDetailsRequest_Response(GameSparks::Core::GS& gsInstance, const GameSparks::Api::Responses::AccountDetailsResponse& response);
void loadSettingsRequest_Response(GameSparks::Core::GS& gsInstance, const GameSparks::Api::Responses::LogEventResponse& response);
struct GameSparksCocos
{
GameSparksCocos(): platform(GS_API_KEY, GS_API_SECRET, true, true)
{
GS.Initialise(&platform);
}
GameSparks::Core::Cocos2dxPlatform platform;
GameSparks::Core::GS GS;
void update(float dt)
{
GS.Update(dt);
}
};
GameSparksCocos gsupdater;
std::function<void(bool)> _auth_callback;
std::function<void(bool)> _reg_callback;
};
GameSparksManager.cpp
#include "GameSparksManager.h"
USING_NS_CC;
GameSparksManager::GameSparksManager()
{
}
GameSparksManager::~GameSparksManager()
{
}
GameSparksManager *GameSparksManager::getInstance()
{
if (_GameSparksManager == nullptr)
{
_GameSparksManager = new GameSparksManager();
if (!_GameSparksManager->init())
{
delete _GameSparksManager;
_GameSparksManager = nullptr;
}
}
return _GameSparksManager;
}
GameSparksManager* GameSparksManager::_GameSparksManager = nullptr;
void GameSparksManager::destroyInstance()
{
CC_SAFE_DELETE(_GameSparksManager);
}
bool GameSparksManager::init()
{
using namespace GameSparks::Core;
gsupdater.GS.GameSparksAvailable = std::bind(&GameSparksManager::onGameSparksAvailable, this, std::placeholders::_1, std::placeholders::_2);
Director::getInstance()->getScheduler()->scheduleUpdate(&gsupdater, 0, false);
return true;
}
void GameSparksManager::login(const std::string& name, const std::string& pswrd, std::function<void(bool)> callback)
{
GameSparks::Api::Requests::AuthenticationRequest request(gsupdater.GS);
request.SetUserName(name);
request.SetPassword(pswrd);
request.Send(std::bind(&GameSparksManager::authenticationRequest_Response, this, std::placeholders::_1, std::placeholders::_2));
_auth_callback = callback;
}
void GameSparksManager::registration(const std::string & dispaly_name, const std::string & name, const std::string & pswrd, std::function<void(bool)> callback)
{
GameSparks::Api::Requests::RegistrationRequest request(gsupdater.GS);
request.SetDisplayName(dispaly_name);
request.SetUserName(name);
request.SetPassword(pswrd);
request.Send(std::bind(&GameSparksManager::registrationRequest_Response, this, std::placeholders::_1, std::placeholders::_2));
_reg_callback = callback;
}
void GameSparksManager::saveSettings()
{
if (!isLogin())
return;
auto json = GameSparks::cJSON_CreateObject();
auto json_score = GameSparks::cJSON_CreateNumber(PlayersManager::getInstance()->getCurrPlayer()->score);
GameSparks::cJSON_AddItemReferenceToObject(json, "score", json_score);
GameSparks::Api::Requests::LogEventRequest request(gsupdater.GS);
request.SetEventKey("saveMainProgress");
request.SetEventAttribute("value", json);
request.Send();
}
void GameSparksManager::loadSettings()
{
if (!isLogin())
return;
GameSparks::Api::Requests::LogEventRequest request(gsupdater.GS);
request.SetEventKey("loadMainProgress");
request.Send(std::bind(&GameSparksManager::loadSettingsRequest_Response, this, std::placeholders::_1, std::placeholders::_2));
}
void GameSparksManager::addCoins(int coins)
{
if (!isLogin())
return;
GameSparks::Api::Requests::LogEventRequest request(gsupdater.GS);
request.SetEventKey("addCoins");
request.SetEventAttribute("amount", coins);
request.Send();
}
void GameSparksManager::spendCoins(int coins)
{
if (!isLogin())
return;
GameSparks::Api::Requests::LogEventRequest request(gsupdater.GS);
request.SetEventKey("spendCoins");
request.SetEventAttribute("amount", coins);
request.Send();
}
void GameSparksManager::onGameSparksAvailable(GameSparks::Core::GS& gsInstance, bool available)
{
cocos2d::log("GameSparks is %s.", (available ? "available" : "not available"));
GameManager::getInstance();
if (isLogin())
{
GameSparks::Api::Requests::AccountDetailsRequest accountDetailsRequest(gsupdater.GS);
accountDetailsRequest.Send(std::bind(&GameSparksManager::accountDetailsRequest_Response, this, std::placeholders::_1, std::placeholders::_2));
}
}
/******************************************************************************************************************************/
/* */
/* RESPONSES */
/* */
/******************************************************************************************************************************/
void GameSparksManager::authenticationRequest_Response(GameSparks::Core::GS& gsInstance, const GameSparks::Api::Responses::AuthenticationResponse& response)
{
if (response.GetHasErrors())
{
cocos2d::log("something went wrong during the authentication");
cocos2d::log("%s", response.GetErrors().GetValue().GetJSON().c_str());
if(_auth_callback)
_auth_callback(false);
}
else
{
cocos2d::log("you successfully authenticated to GameSparks with your credentials");
cocos2d::log("your displayname is %s.", response.GetBaseData().GetString("displayName").GetValue().c_str());
if (_auth_callback)
_auth_callback(true);
}
}
void GameSparksManager::registrationRequest_Response(GameSparks::Core::GS & gsInstance, const GameSparks::Api::Responses::RegistrationResponse & response)
{
if (response.GetHasErrors())
{
cocos2d::log("something went wrong during the registration");
cocos2d::log("%s", response.GetErrors().GetValue().GetJSON().c_str());
if (_reg_callback)
_reg_callback(false);
}
else
{
cocos2d::log("you successfully registration on GameSparks");
cocos2d::log("your displayname is %s.", response.GetBaseData().GetString("displayName").GetValue().c_str());
if (_reg_callback)
_reg_callback(true);
}
}
void GameSparksManager::accountDetailsRequest_Response(GameSparks::Core::GS & gsInstance, const GameSparks::Api::Responses::AccountDetailsResponse & response)
{
if (response.GetHasErrors())
{
cocos2d::log("something went wrong during the account details");
cocos2d::log("%s", response.GetErrors().GetValue().GetJSON().c_str());
}
else
{
cocos2d::log("you successfully get account details");
cocos2d::log("your displayname is %s.", response.GetBaseData().GetString("displayName").GetValue().c_str());
int server_coins = response.GetCurrency1().GetValue();
GameManager::getInstance()->setCoins(server_coins);
}
}
void GameSparksManager::loadSettingsRequest_Response(GameSparks::Core::GS & gsInstance, const GameSparks::Api::Responses::LogEventResponse & response)
{
if (response.GetHasErrors())
{
cocos2d::log("something went wrong during loading main settings");
cocos2d::log("%s", response.GetErrors().GetValue().GetJSON().c_str());
}
else
{
cocos2d::log("you successfully loading main settings");
auto empty_settings = response.GetScriptData().GetValue().GetGSDataObject("main_player_saves").GetValue().GetString("empty_settings");
if (empty_settings.GetValue() == "true")
{
return;
}
PlayersManager::getInstance()->getCurrPlayer()->score = main_player_saves.GetInt("score").GetValue();
}
}