#include "GlobalJosn.h" #include "cocos2d.h" #include "json/document.h" #include "Utility.h" #include "Platform.h" #include "cryptHeader.h" USING_NS_CC; GlobalJosn* GlobalJosn::s_configInstance = nullptr; void GlobalJosn::init() { std::vector().swap(m_vecGameConfig); m_vecGameConfig.reserve(10); m_strLogonIp = LOGON_SERVER_ADDRESS; m_iPort = LOGON_SERVER_PORT; m_strAgentTip = ""; m_strShareTip = ""; m_IsNotice = false; m_NoticeUrl = ""; m_strPayUrl = PAY_TO_PLAYER_HTTP_ADDRESS; m_strDuiHuanUrl = DUI_HUAN_HTTP_ADDRESS; m_strGongHuiUrl = GONG_HUI_HTTP_ADDRESS; m_RefreshTime = DEFINE_REFRESH_TIME; m_strShareUrl = SHARE_HTTP_ADDRESS; #if (CC_TARGET_PLATFORM==CC_PLATFORM_WIN32) m_IsOpenNN = true; m_IsOpenZJH = true; m_IsOpenSSZ = true; #else m_IsOpenNN = false; m_IsOpenZJH = false; m_IsOpenSSZ = false; #endif } void GlobalJosn::clear() { std::vector().swap(m_vecGameConfig); } void GlobalJosn::loadConfig() { //loadServerList(); loadShareList(); } void GlobalJosn::loadServerList() { std::vector().swap(m_vecGameConfig); auto str = cocos2d::FileUtils::getInstance()->getStringFromFile("Platform/gamelist/GameConfig.json"); rapidjson::Document doc; doc.Parse<0>(str.c_str()); if (doc.HasParseError() || !doc.IsArray()) { return; } //读取游戏配置信息 for (rapidjson::SizeType i = 0; i < doc.Size(); ++i) { const rapidjson::Value &gameObject = doc[i]; tagGameConfig config = tagGameConfig(); //游戏名 if (gameObject.HasMember("name") && gameObject["name"].IsString()) { config.strGamename = gameObject["name"].GetString(); } //kind id if (gameObject.HasMember("kind") && gameObject["kind"].IsInt()) { config.nGameKindId = gameObject["kind"].GetInt(); } //是否激活 if (gameObject.HasMember("active") && gameObject["active"].IsBool()) { config.bGameActive = gameObject["active"].GetBool(); } //是否添加到游戏列表 if (gameObject.HasMember("addtolist") && gameObject["addtolist"].IsBool()) { config.bAddToList = gameObject["addtolist"].GetBool(); } //游戏规则 if (gameObject.HasMember("GameRule") && gameObject["GameRule"].IsString()) { config.strGameRule = gameObject["GameRule"].GetString(); } //注释 if (gameObject.HasMember("comment") && gameObject["comment"].IsString()) { config.strComment = gameObject["comment"].GetString(); cocos2d::log("game name:%s, kind:%d, comment:%s", config.strGamename.c_str(), config.nGameKindId, config.strGamename.c_str()); } m_vecGameConfig.push_back(config); } std::string strCout = StringUtils::format("游戏总数: %d", (int)m_vecGameConfig.size()); cocos2d::log("%s", utility::a_u8(strCout).c_str()); } void GlobalJosn::loadShareList() { std::vector().swap(m_vecShareList); auto str = cocos2d::FileUtils::getInstance()->getStringFromFile("Platform/gamelist/notice.json"); rapidjson::Document doc; doc.Parse<0>(str.c_str()); if (doc.HasParseError() || !doc.IsArray()) { return; } CC_ASSERT(!doc.HasParseError() && doc.IsArray()); for (rapidjson::SizeType i = 0; i < doc.Size(); i++) { const rapidjson::Value &gameObject = doc[i]; tagShareInfo config = tagShareInfo(); //kind id if (gameObject.HasMember("kind") && gameObject["kind"].IsInt()) { config.nKindID = gameObject["kind"].GetInt(); } //内容 if (gameObject.HasMember("comment") && gameObject["comment"].IsString()) { config.strComment = gameObject["comment"].GetString(); } m_vecShareList.push_back(config); } } int GlobalJosn::getGameCount() { return (int)m_vecGameConfig.size(); } tagGameConfig GlobalJosn::getGameConfigByIdx(const int &nIdx, bool &bHave) { bHave = false; if (nIdx >= 0 && nIdx < (int)m_vecGameConfig.size()) { bHave = true; return m_vecGameConfig[nIdx]; } return tagGameConfig(); } tagGameConfig GlobalJosn::getGameConfigByKind(const int &nKind, bool &bHave) { bHave = false; for (int i = 0; i < (int)m_vecGameConfig.size(); ++i) { if (m_vecGameConfig[i].nGameKindId == nKind) { bHave = true; return m_vecGameConfig[i]; } } return tagGameConfig(); } bool GlobalJosn::isGameActive(const int &nKind) { for (int i = 0; i < (int)m_vecGameConfig.size(); ++i) { if (m_vecGameConfig[i].nGameKindId == nKind) { return m_vecGameConfig[i].bGameActive; } } return false; } bool GlobalJosn::isGameInList(const int &nKind) { for (int i = 0; i < (int)m_vecGameConfig.size(); ++i) { if (m_vecGameConfig[i].nGameKindId == nKind) { return true; } } return false; } // 文本格式本身就是UTF-8,程序无需再转 std::string GlobalJosn::getShareInfoByKind(const int nKindID) { if (nKindID == SH_KIND_FRIEND_RUL || nKindID == SH_KIND_WEIXIN_URL) { return m_strShareUrl; } for (int i = 0; i < (int)m_vecShareList.size(); ++i) { if (m_vecShareList[i].nKindID == nKindID) { return m_vecShareList[i].strComment; } } return ""; } //设置IP和PORT(格式:192.168.1.123,10086) void GlobalJosn::SetLoginIpAndPort(std::string strIpAndPortEncrypt) { if (strIpAndPortEncrypt.empty()) return; // 设置解码KEY m_strAesKey = "45404b08fbfa98823c6f3dbb5ffd8259"; coAesSetKey(m_strAesKey.c_str()); //cocos2d::log("AesKey = %s", m_strAesKey.c_str()); // 定义变量 std::string strBase64Decode = ""; // base64解码 std::string strAesDecode = ""; // aes解码 // BASE64解码 coBase64Decode(strBase64Decode, strIpAndPortEncrypt); //cocos2d::log("Base64Decode = %s", strBase64Decode.c_str()); // AES解密 coAesDecript(strBase64Decode, strAesDecode); //cocos2d::log("AesDecode = %s", strAesDecode.c_str()); // 格式解析 int __size = strAesDecode.length(); int __ind = strAesDecode.find(','); if (std::string::npos == __ind) return; std::string strPort = ""; m_strLogonIp = strAesDecode.substr(0, __ind); strPort = strAesDecode.substr(__ind + 1); //cocos2d::log("m_strLogonIp = %s, strPort = %s", m_strLogonIp.c_str(), strPort.c_str()); // 端口转换 char* lpStrEnd = NULL; int iPort = (int)strtol(strPort.c_str(), &lpStrEnd, 10); GlobalJosn::getInstance()->m_iPort = iPort; }