Skip to content

Instantly share code, notes, and snippets.

@prasannaboppe
Last active June 21, 2017 12:02
Show Gist options
  • Save prasannaboppe/46796504c0b031a2dbdd285654f6f6c7 to your computer and use it in GitHub Desktop.
Save prasannaboppe/46796504c0b031a2dbdd285654f6f6c7 to your computer and use it in GitHub Desktop.
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include "AndroidInterfaceManager.h"
#include "InterfaceManagerInstance.h"
#include "CommonData.h"
using namespace std;
AndroidInterfaceManager::AndroidInterfaceManager() {
}
void AndroidInterfaceManager::OpenUrl(std::string url) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "openUrl", "(Ljava/lang/String;)V");
jstring jurl = JniHelper::getEnv()->NewStringUTF(url.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, jurl);
}
void AndroidInterfaceManager::OpenInStore() {
CallVoidMethod((char *) "OpenInStore");
}
void AndroidInterfaceManager::ShowNotification(int id, std::string text) {
ShowNotification(id, 0, text);
}
void AndroidInterfaceManager::ShowNotification(int id, long futureTime, std::string text) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "showNotification", "(IJLjava/lang/String;)V");
jstring jtext = JniHelper::getEnv()->NewStringUTF(text.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, id, futureTime, jtext);
}
void AndroidInterfaceManager::PlayServicesLogIn() {
CallVoidMethod((char *) "playServicesLogIn");
}
void AndroidInterfaceManager::PlayServicesLogOut() {
CallVoidMethod((char *) "playServicesLogOut");
}
/*
* pos - for TOP 0
* pos - for BOTTOM 1
* */
void AndroidInterfaceManager::ShowBanner(int pos) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
CCLOG("show BANNER In INTERFACE");
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "showBanner", "(I)V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, pos);
}
void AndroidInterfaceManager::HideBanner() {
CallVoidMethod((char *) "hideBanner");
}
/*
* type - ICON 1
* type - INFEED 2
* type - CONTENT_STREAM 3
* */
void AndroidInterfaceManager::ShowNativeAds(int type, int width, int height, int x, int y) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "showNativeAds", "(IIIII)V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, type, width, height, x, y);
}
void AndroidInterfaceManager::ShowVideoAd(int Val, std::string screeenName) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "showVideoAds", "(ILjava/lang/String;)V");
jstring jscreeenName = JniHelper::getEnv()->NewStringUTF(screeenName.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, Val, jscreeenName);
}
void AndroidInterfaceManager::HideNativeAds() {
CallVoidMethod((char *) "hideNativeAds");
}
void AndroidInterfaceManager::ShareScreenShot(int type, std::string path) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "shareScreenShot", "(ILjava/lang/String;)V");
jstring jpath = JniHelper::getEnv()->NewStringUTF(path.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, type, jpath);
}
void AndroidInterfaceManager::ShowToastMessage(const std::string &p_Message) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
CCLOG("Toast");
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "showToastMessage", "(Ljava/lang/String;)V");
jstring jmsg = JniHelper::getEnv()->NewStringUTF(p_Message.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, jmsg);
}
void AndroidInterfaceManager::ShowAchievements() {
CallVoidMethod((char *) "showAchievements");
}
void AndroidInterfaceManager::ShowLeaderboard(int id) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "showLeaderboard", "(I)V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, id);
}
void AndroidInterfaceManager::ShowLeaderboard() {
ShowLeaderboard(0);
}
void AndroidInterfaceManager::SubmitScore(int id, int score) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "submitScore", "(II)V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, id, score);
}
void AndroidInterfaceManager::UnlockAchievement(int id) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "unlockAchievement", "(I)V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, id);
}
void AndroidInterfaceManager::UnlockAchievement(int id, int progress) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "unlockAchievement", "(II)V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, id, progress);
}
void AndroidInterfaceManager::ShowInterstitial(int type, std::string screeenName) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "showInterstitial", "(ILjava/lang/String;)V");
jstring jscreeenName = JniHelper::getEnv()->NewStringUTF(screeenName.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, type, jscreeenName);
}
void AndroidInterfaceManager::ExitGame() {
CallVoidMethod((char *) "exitGame");
}
void AndroidInterfaceManager::OnRemoveAds() {
CallVoidMethod((char *) "onRemoveAds");
}
void AndroidInterfaceManager::OnInAppMiniRoll() {
CallVoidMethod((char *) "onInAppMiniRoll");
}
void AndroidInterfaceManager::OnInAppCoins(int coins) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "onInAppCoins", "(I)V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, coins);
}
std::string AndroidInterfaceManager::GetPrice(int coins) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "getPrice", "(I)Ljava/lang/String;");
jstring jstrRet = (jstring) JniHelper::getEnv()->CallObjectMethod(JniHelper::getActivity(), methodID, coins);
return JniHelper::jstring2string(jstrRet);
return "BUY";
}
std::string AndroidInterfaceManager::GetProfileName() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "getProfileName", "()Ljava/lang/String;");
jstring jstrRet = (jstring) JniHelper::getEnv()->CallObjectMethod(JniHelper::getActivity(), methodID);
return JniHelper::jstring2string(jstrRet);
return "Prasanna";
}
std::string AndroidInterfaceManager::GetVersion() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "getVersion", "()Ljava/lang/String;");
jstring jstrRet = (jstring) JniHelper::getEnv()->CallObjectMethod(JniHelper::getActivity(), methodID);
return JniHelper::jstring2string(jstrRet);
return "2.3";
}
bool AndroidInterfaceManager::isPlayServicesLoggedIn() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "isPlayServicesLoggedIn", "()Z");
return JniHelper::getEnv()->CallBooleanMethod(JniHelper::getActivity(), methodID);
return false;
}
bool AndroidInterfaceManager::isVideoAdsAvailable() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "isVideoAdsAvailable", "()Z");
return JniHelper::getEnv()->CallBooleanMethod(JniHelper::getActivity(), methodID);
return false;
}
bool AndroidInterfaceManager::isNetworkAvailable() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
CCLOG("network");
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "isNetworkAvailable", "()Z");
return JniHelper::getEnv()->CallBooleanMethod(JniHelper::getActivity(), methodID);
return false;
}
long AndroidInterfaceManager::GetDurationForAds() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "getDurationForAds", "()J");
return (long) JniHelper::getEnv()->CallLongMethod(JniHelper::getActivity(), methodID);
return 30;
}
void AndroidInterfaceManager::PostAnalyticsEvents(std::string category, std::string action,
std::string label, int value) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "logEvent",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V");
jstring jcategory = JniHelper::getEnv()->NewStringUTF(category.c_str());
jstring jaction = JniHelper::getEnv()->NewStringUTF(action.c_str());
jstring jlabel = JniHelper::getEnv()->NewStringUTF(label.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, jcategory, jaction, jlabel, value);
}
void AndroidInterfaceManager::PostFirBaseAnalyticsEvents(const std::string &p_Category,
const std::string &p_Param1,
const std::string &p_ParamInp1,
const std::string &p_Param2,
const std::string &p_ParamInp2,
const std::string &p_Param3,
const std::string &p_ParamInp3,
const std::string &p_Param4,
int p_ParamInp4,
const std::string &p_Param5,
int p_ParamInp5,
const std::string &p_Param6,
int p_ParamInp6, int p_iValue,
bool _isValueExist) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "postFirebaseAnalyticsEvent",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;IIZ)V");
jstring jCategory = JniHelper::getEnv()->NewStringUTF(p_Category.c_str());//p_Category
jstring jParam1 = JniHelper::getEnv()->NewStringUTF(p_Param1.c_str());//p_Param1
jstring jParamInp1 = JniHelper::getEnv()->NewStringUTF(p_ParamInp1.c_str());//p_ParamInp1
jstring jParam2 = JniHelper::getEnv()->NewStringUTF(p_Param2.c_str());//p_Param2
jstring jParamInp2 = JniHelper::getEnv()->NewStringUTF(p_ParamInp2.c_str());//p_ParamInp2
jstring jParam3 = JniHelper::getEnv()->NewStringUTF(p_Param3.c_str());//p_Param3
jstring jParamInp3 = JniHelper::getEnv()->NewStringUTF(p_ParamInp3.c_str());//p_ParamInp3
jstring jParam4 = JniHelper::getEnv()->NewStringUTF(p_Param4.c_str());//p_Param4
jstring jParam5 = JniHelper::getEnv()->NewStringUTF(p_Param5.c_str());//p_Param5
jstring jParam6 = JniHelper::getEnv()->NewStringUTF(p_Param6.c_str());//p_Param6
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, jCategory, jParam1, jParamInp1, jParam2, jParamInp2,
jParam3, jParamInp3, jParam4, p_ParamInp4, jParam5, p_ParamInp5, jParam6,
p_ParamInp6, p_iValue, _isValueExist);
//env->DeleteLocalRef(jid);
}
void AndroidInterfaceManager::PostAnalyticsFirebaseScreen(const std::string &p_ScreenName) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
//LOGI("in end method of JniInterface.h");
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "postFirebaseAnalyticsScreen",
"(Ljava/lang/String;)V");
jstring jScreenName = JniHelper::getEnv()->NewStringUTF(p_ScreenName.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, jScreenName);
//env->DeleteLocalRef(jid);
}
void AndroidInterfaceManager::PostAnalyticsScreen(std::string name) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "logScreen", "(Ljava/lang/String;)V");
jstring jname = JniHelper::getEnv()->NewStringUTF(name.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, jname);
}
void AndroidInterfaceManager::SetUserProperty(std::string key, std::string value) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "setUserProperty",
"(Ljava/lang/String;Ljava/lang/String;)V");
jstring jkey = JniHelper::getEnv()->NewStringUTF(key.c_str());
jstring jvalue = JniHelper::getEnv()->NewStringUTF(value.c_str());
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, jkey, jvalue);
}
void AndroidInterfaceManager::NotificationStatus(bool p_bStatus) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "notificationStatus", "(Z)V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID, p_bStatus);
}
void AndroidInterfaceManager::UpdateNotificationText() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "updateNotificationText", "()V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID);
}
void AndroidInterfaceManager::ShowInsentivisePopUp() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "showInsentivisePopUp", "()V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID);
}
void AndroidInterfaceManager::Initialize() {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, "initialize", "()V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID);
}
void AndroidInterfaceManager::CallVoidMethod(char *method) {
jclass clazz = JniHelper::getEnv()->GetObjectClass(JniHelper::getActivity());
jmethodID methodID = JniHelper::getEnv()->GetMethodID(clazz, method, "()V");
JniHelper::getEnv()->CallVoidMethod(JniHelper::getActivity(), methodID);
}
void AndroidInterfaceManager::OnInAppSuccess(const std::string &p_InAppId) {
m_CurPurchaseId = p_InAppId;
if (m_CurPurchaseId.compare(REMOVE_ADS_PURCHASE_SUCCEED) == 0)
me_bRemoveAdsPurchaseSucceed = true;
else
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(EVENT_PURCHASE_SUCCEED);
}
void AndroidInterfaceManager::OnInAppFailed(const std::string &p_InAppId) {
m_CurPurchaseId = p_InAppId;
if (m_CurPurchaseId.compare(REMOVE_ADS_PURCHASE_FAILED) == 0)
me_bRemoveAdsPurchaseFailed = true;
else
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(EVENT_PURCHASE_FAILED);
}
void AndroidInterfaceManager::onVideoAdsSuccess() {
if (me_bIsVideoAds) {
GameManager::getInstance()->SetGameState(GAME_STATE_PLAY);
me_bVideoAdsSucceed = true;
} else {
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(EVENT_VIDEO_ADS_SUCCEED);
}
}
void AndroidInterfaceManager::OnVideoAdsFailed() {
if (me_bIsVideoAds) {
GameManager::getInstance()->SetGameState(GAME_STATE_PLAY);
me_bVideoAdsFailed = true;
} else {
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(EVENT_VIDEO_ADS_FAILED);
}
}
void AndroidInterfaceManager::OnLogInSuccess() {
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(
EVENT_PLAY_SERVICE_LOGIN_SUCCEED);
}
void AndroidInterfaceManager::OnLogInFailed() {
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(
EVENT_PLAY_SERVICE_LOGIN_FAILED);
}
void AndroidInterfaceManager::OnLogOutSuccess() {
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(
EVENT_PLAY_SERVICE_LOGOUT_SUCCEED);
}
void AndroidInterfaceManager::OnLogOutFailed() {
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(
EVENT_PLAY_SERVICE_LOGOUT_FAILED);
}
AndroidInterfaceManager::~AndroidInterfaceManager() {
}
extern "C"
{
void
Java_org_cocos2dx_cpp_AppActivity_onInAppPurchaseSuccess(JNIEnv *env, jobject obj, jstring id) {
std::string str = JniHelper::jstring2string(id);
InterfaceManagerInstance::getInstance()->getInterfaceManager()->OnInAppSuccess(str);
}
void Java_org_cocos2dx_cpp_AppActivity_onInAppPurchaseFailed(JNIEnv *env, jobject obj, jstring id) {
std::string str = JniHelper::jstring2string(id);
InterfaceManagerInstance::getInstance()->getInterfaceManager()->OnInAppFailed(str);
}
void Java_org_cocos2dx_cpp_AppActivity_onPlayServicesLogInSuccess(JNIEnv *env, jobject obj) {
InterfaceManagerInstance::getInstance()->getInterfaceManager()->OnLogInSuccess();
}
void Java_org_cocos2dx_cpp_AppActivity_onPlayServicesLogInFailed(JNIEnv *env, jobject obj) {
InterfaceManagerInstance::getInstance()->getInterfaceManager()->OnLogInFailed();
}
//
void Java_org_cocos2dx_cpp_AppActivity_onPlayServicesLogOutSuccess(JNIEnv *env, jobject obj) {
InterfaceManagerInstance::getInstance()->getInterfaceManager()->OnLogOutSuccess();
}
void Java_org_cocos2dx_cpp_AppActivity_onPlayServicesLogOutFailed(JNIEnv *env, jobject obj) {
InterfaceManagerInstance::getInstance()->getInterfaceManager()->OnLogOutFailed();
}
void Java_org_cocos2dx_cpp_AppActivity_onVideoAdsSuccess(JNIEnv *env, jobject obj) {
InterfaceManagerInstance::getInstance()->getInterfaceManager()->onVideoAdsSuccess();
}
void Java_org_cocos2dx_cpp_AppActivity_onVideoAdsFailed(JNIEnv *env, jobject obj) {
InterfaceManagerInstance::getInstance()->getInterfaceManager()->OnVideoAdsFailed();
}
jstring Java_org_cocos2dx_cpp_AppActivity_getNotificationText(JNIEnv *env, jobject obj,
jstring notification) {
std::string str = JniHelper::jstring2string(notification);
std::string str2 = LanguageTranslator::getInstance()->getTranslatorStringWithTag(str);
jstring t_ret = (jstring) env->NewStringUTF(str2.c_str());
return t_ret;
}
jstring Java_org_cocos2dx_cpp_AppActivity_getSelectedLanguage(JNIEnv *env, jobject obj) {
jstring t_ret = (jstring) env->NewStringUTF(me_Language.c_str());
return t_ret;
}
bool Java_org_cocos2dx_cpp_AppActivity_isNotificationEnabled(JNIEnv *env, jobject obj) {
return me_bPushNotification;
}
}
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <iostream>
#include "cocos2d.h"
using namespace cocos2d;
class AndroidInterfaceManager {
JNIEnv *jniEnv;
jobject activity;
jclass clazz;
public:
AndroidInterfaceManager();
~AndroidInterfaceManager();
std::string sample();
void OpenInStore();
void OpenUrl(std::string url);
void ShowNotification(int id, long futureTime, std::string text);
void ShowNotification(int id, std::string text);
void PlayServicesLogOut();
void PlayServicesLogIn();
void CallVoidMethod(char *method);
void ShowBanner(int pos);
void HideBanner();
void ShowNativeAds(int type, int width, int height, int x, int y);
void HideNativeAds();
void ShareScreenShot(int type, std::string path);
void ShowToastMessage(std::string msg);
void ShowAchievements();
void ShowLeaderboard(int id);
void ShowLeaderboard();
void SubmitScore(int id, int score);
void ShowInterstitial(int type);
void UnlockAchievement(int id);
void UnlockAchievement(int id, int progress);
void ExitGame();
void OnRemoveAds();
void OnInAppMiniRoll();
void OnInAppCoins(int coins);
std::string GetPrice(int coins);
std::string GetProfileName();
std::string GetVersion();
bool IsPlayServicesLoggedIn();
bool IsVideoAdsAvailable();
bool IsNetworkAvailable();
long GetDurationForAds();
void PostAnalyticsEvents(std::string category, std::string action, std::string label, int value);
void PostAnalyticsScreen(std::string name);
void SetUserProperty(std::string key, std::string value);
};
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment