357 lines
8.7 KiB
C++
357 lines
8.7 KiB
C++
|
|
#include "PayScene.h"
|
|||
|
|
#include "PopScene.h"
|
|||
|
|
#include "Utility.h"
|
|||
|
|
#include "Packet.h"
|
|||
|
|
#include "GlobalUserInfo.h"
|
|||
|
|
#include "WebReq.h"
|
|||
|
|
#include "Platform.h"
|
|||
|
|
#include "GlobalJosn.h"
|
|||
|
|
|
|||
|
|
PayScene::PayScene()
|
|||
|
|
{
|
|||
|
|
m_cbCurStep = 0;
|
|||
|
|
|
|||
|
|
m_txtTitle = nullptr;
|
|||
|
|
m_txtNumber = nullptr;
|
|||
|
|
|
|||
|
|
m_txtGameID = nullptr;
|
|||
|
|
m_txtNickName = nullptr;
|
|||
|
|
m_txtCurScore = nullptr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
PayScene::~PayScene()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool PayScene::init()
|
|||
|
|
{
|
|||
|
|
if (!Node::init())
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
auto rootPanel = CSLoader::createNode("Platform/PayScene.csb");
|
|||
|
|
CC_ASSERT(rootPanel != nullptr);
|
|||
|
|
this->addChild(rootPanel);
|
|||
|
|
|
|||
|
|
m_rootPanel = rootPanel->getChildByName("Image_bg");
|
|||
|
|
CC_ASSERT(m_rootPanel != nullptr);
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD>رհ<D8B1>ť;
|
|||
|
|
auto btnClose = (Button*)m_rootPanel->getChildByName("btnClose");
|
|||
|
|
CC_ASSERT(btnClose != nullptr);
|
|||
|
|
|
|||
|
|
//ע<><D7A2><EFBFBD>رհ<D8B1>ť<EFBFBD>¼<EFBFBD>;
|
|||
|
|
btnClose->addClickEventListener([this](Ref*){
|
|||
|
|
YSAudioEngine::Instance().playBtnClickEffect();
|
|||
|
|
//this->removeFromParent();
|
|||
|
|
this->popScene();
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
//<2F><>һ<EFBFBD><D2BB>;
|
|||
|
|
m_btnPrev = (Button*)m_rootPanel->getChildByName("btn_Prev");
|
|||
|
|
CC_ASSERT(m_btnPrev != nullptr);
|
|||
|
|
|
|||
|
|
//ע<>ᰴť<E1B0B4>¼<EFBFBD>;
|
|||
|
|
m_btnPrev->addClickEventListener(CC_CALLBACK_1(PayScene::onPrevButtonClick, this));
|
|||
|
|
m_btnPrev->setVisible(false);
|
|||
|
|
|
|||
|
|
//<2F><>һ<EFBFBD><D2BB>;
|
|||
|
|
m_btnNext = (Button*)m_rootPanel->getChildByName("btn_Next");
|
|||
|
|
CC_ASSERT(m_btnNext != nullptr);
|
|||
|
|
m_btnNext->setPositionX(m_rootPanel->getContentSize().width/2);
|
|||
|
|
|
|||
|
|
//ע<>ᰴť<E1B0B4>¼<EFBFBD>;
|
|||
|
|
m_btnNext->addClickEventListener(CC_CALLBACK_1(PayScene::onNextButtonClick, this));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|||
|
|
m_txtTitle = (Text*)m_rootPanel->getChildByName("txtTitle");
|
|||
|
|
CC_ASSERT(m_txtTitle != nullptr);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
|
m_txtNumber = (Text*)m_rootPanel->getChildByName("txtNum");
|
|||
|
|
CC_ASSERT(m_txtNumber != nullptr);
|
|||
|
|
m_txtNumber->setString("");
|
|||
|
|
|
|||
|
|
//<2F><>ϷID;
|
|||
|
|
m_txtGameID = (Text*)m_rootPanel->getChildByName("txtGameID");
|
|||
|
|
CC_ASSERT(m_txtGameID != nullptr);
|
|||
|
|
m_txtGameID->setVisible(false);
|
|||
|
|
|
|||
|
|
//<2F>dz<EFBFBD>;
|
|||
|
|
m_txtNickName = (Text*)m_rootPanel->getChildByName("txtNickName");
|
|||
|
|
CC_ASSERT(m_txtNickName != nullptr);
|
|||
|
|
m_txtNickName->setVisible(false);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>;
|
|||
|
|
m_txtCurScore = (Text*)m_rootPanel->getChildByName("txtCurScore");
|
|||
|
|
CC_ASSERT(m_txtCurScore != nullptr);
|
|||
|
|
m_txtCurScore->setVisible(false);
|
|||
|
|
|
|||
|
|
for (int j = 0; j < 10; j++)
|
|||
|
|
{
|
|||
|
|
std::string strKey = __String::createWithFormat("btn_num_%d", j)->getCString();
|
|||
|
|
auto btnNum = (Button*)m_rootPanel->getChildByName(strKey);
|
|||
|
|
CC_ASSERT(btnNum != nullptr);
|
|||
|
|
|
|||
|
|
btnNum->addClickEventListener([=](Ref* obj){
|
|||
|
|
YSAudioEngine::Instance().playBtnClickEffect();
|
|||
|
|
|
|||
|
|
std::string strText = m_txtNumber->getString();
|
|||
|
|
strText += StringUtils::format("%d", j);
|
|||
|
|
|
|||
|
|
m_txtNumber->setString(strText);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ɾ<><C9BE>
|
|||
|
|
auto btnDel = (Button*)m_rootPanel->getChildByName("btn_del");
|
|||
|
|
CC_ASSERT(btnDel != nullptr);
|
|||
|
|
|
|||
|
|
btnDel->addClickEventListener([this](Ref* obj){
|
|||
|
|
YSAudioEngine::Instance().playBtnClickEffect();
|
|||
|
|
|
|||
|
|
std::string strText = m_txtNumber->getString();
|
|||
|
|
if (strText.length()>0)
|
|||
|
|
{
|
|||
|
|
strText.erase(strText.length() - 1, 1);
|
|||
|
|
m_txtNumber->setString(strText);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>
|
|||
|
|
auto btnC = (Button*)m_rootPanel->getChildByName("btn_C");
|
|||
|
|
CC_ASSERT(btnC != nullptr);
|
|||
|
|
|
|||
|
|
btnC->addClickEventListener([this](Ref* pSender){
|
|||
|
|
YSAudioEngine::Instance().playBtnClickEffect();
|
|||
|
|
m_txtNumber->setString("");
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void PayScene::onEnter()
|
|||
|
|
{
|
|||
|
|
Node::onEnter();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void PayScene::onEnterTransitionDidFinish()
|
|||
|
|
{
|
|||
|
|
Node::onEnterTransitionDidFinish();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void PayScene::onExit()
|
|||
|
|
{
|
|||
|
|
Node::onExit();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void PayScene::onPrevButtonClick(Ref*)
|
|||
|
|
{
|
|||
|
|
if (1 == m_cbCurStep)
|
|||
|
|
{
|
|||
|
|
m_cbCurStep--;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>;
|
|||
|
|
m_txtTitle->setString(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID"));
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ť;
|
|||
|
|
m_btnPrev->setVisible(false);
|
|||
|
|
m_btnNext->setPositionX(m_rootPanel->getContentSize().width / 2);
|
|||
|
|
|
|||
|
|
m_strScore = m_txtNumber->getString();
|
|||
|
|
|
|||
|
|
m_txtNumber->setString(m_strGameID);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷID;
|
|||
|
|
m_txtGameID->setVisible(false);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>;
|
|||
|
|
m_txtNickName->setVisible(false);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><EFBFBD><E0B7BF>;
|
|||
|
|
m_txtCurScore->setVisible(false);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void PayScene::onNextButtonClick(Ref*)
|
|||
|
|
{
|
|||
|
|
std::string strText = m_txtNumber->getString();
|
|||
|
|
|
|||
|
|
if (0==m_cbCurStep)
|
|||
|
|
{
|
|||
|
|
if (strText.length()<6)
|
|||
|
|
{
|
|||
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷID"));
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LoadingScene::Instance().show();
|
|||
|
|
|
|||
|
|
m_strGameID = strText;
|
|||
|
|
|
|||
|
|
std::string strUrl = StringUtils::format("%s?gid=%s", GET_NICKNAME_HTTP_ADDRESS, strText.c_str());
|
|||
|
|
CWebReq::getInstance().sendRequestDocumentUrl(strUrl, CC_CALLBACK_1(PayScene::responsePlayerNickName, this), nullptr);
|
|||
|
|
}
|
|||
|
|
else if (1 == m_cbCurStep)
|
|||
|
|
{
|
|||
|
|
strText = m_txtNumber->getString();
|
|||
|
|
|
|||
|
|
if (strText.length() < 1)
|
|||
|
|
{
|
|||
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뷿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (atoi(strText.c_str())<=0)
|
|||
|
|
{
|
|||
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"));
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_strScore = strText;
|
|||
|
|
|
|||
|
|
LoadingScene::Instance().show();
|
|||
|
|
|
|||
|
|
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
|
|||
|
|
tagGlobalUserData * pGlobalUserData = pGlobalUserInfo->GetGlobalUserData();
|
|||
|
|
|
|||
|
|
// PAY_TO_PLAYER_HTTP_ADDRESS
|
|||
|
|
std::string strData = StringUtils::format("%d&%s&%d&%d", pGlobalUserData->dwUserID, pGlobalUserData->szAccounts, atoi(m_strGameID.c_str()), atoi(m_strScore.c_str()));
|
|||
|
|
std::string strResult;
|
|||
|
|
encryptData(strData, strResult);
|
|||
|
|
|
|||
|
|
std::string strUrl = StringUtils::format("%s?key=%s", GlobalJosn::getInstance()->m_strPayUrl.c_str(), strResult.c_str());
|
|||
|
|
CWebReq::getInstance().sendRequestDocumentUrl(strUrl, CC_CALLBACK_1(PayScene::responsePayResult, this), nullptr);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>
|
|||
|
|
void PayScene::responsePlayerNickName(rapidjson::Document* pDoc)
|
|||
|
|
{
|
|||
|
|
LoadingScene::Instance().hide();
|
|||
|
|
|
|||
|
|
if (pDoc == nullptr)
|
|||
|
|
{
|
|||
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int bSuccess = CWebReq::getDataValueInt(pDoc, "ret");
|
|||
|
|
|
|||
|
|
if (bSuccess==1)
|
|||
|
|
{
|
|||
|
|
m_cbCurStep++;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>;
|
|||
|
|
m_txtTitle->setString(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>俨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
|||
|
|
|
|||
|
|
// <20><>ʾ<EFBFBD><CABE>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ť;
|
|||
|
|
m_btnPrev->setVisible(true);
|
|||
|
|
|
|||
|
|
int nStartPosX = m_rootPanel->getContentSize().width / 2;
|
|||
|
|
m_btnPrev->setPositionX(nStartPosX - m_btnPrev->getContentSize().width / 2 - 50);
|
|||
|
|
m_btnNext->setPositionX(nStartPosX + m_btnNext->getContentSize().width / 2 + 50);
|
|||
|
|
|
|||
|
|
m_txtNumber->setString(m_strScore);
|
|||
|
|
|
|||
|
|
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷID;
|
|||
|
|
m_txtGameID->setVisible(true);
|
|||
|
|
|
|||
|
|
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>;
|
|||
|
|
m_txtNickName->setVisible(true);
|
|||
|
|
|
|||
|
|
// <20><>ʾʣ<CABE><EFBFBD><E0B7BF>;
|
|||
|
|
m_txtCurScore->setVisible(true);
|
|||
|
|
|
|||
|
|
int nGameID = CWebReq::getDataValueInt(pDoc, "GameID");
|
|||
|
|
std::string strNickName = CWebReq::getDataValueStr(pDoc, "NickName");
|
|||
|
|
int nCurScore = CWebReq::getDataValueInt(pDoc, "CardNum");
|
|||
|
|
|
|||
|
|
m_txtGameID->setString(utility::a_u8("<EFBFBD><EFBFBD>ϷID: ") + StringUtils::format("%d", nGameID));
|
|||
|
|
m_txtNickName->setString(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dz<EFBFBD>: ") + utility::getShortName(strNickName, 16) + StringUtils::format(" %d", nCurScore) + utility::a_u8("<EFBFBD><EFBFBD>"));
|
|||
|
|
//m_txtCurScore->setString(StringUtils::format("%d", nCurScore) + utility::a_u8("<22><>"));
|
|||
|
|
m_txtCurScore->setString("");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϷID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룡"));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|||
|
|
void PayScene::responsePayResult(rapidjson::Document* pDoc)
|
|||
|
|
{
|
|||
|
|
LoadingScene::Instance().hide();
|
|||
|
|
|
|||
|
|
if (pDoc == nullptr)
|
|||
|
|
{
|
|||
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int bSuccess = CWebReq::getDataValueInt(pDoc, "ret");
|
|||
|
|
|
|||
|
|
if (bSuccess == 1)
|
|||
|
|
{
|
|||
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD>ֵ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>"));
|
|||
|
|
|
|||
|
|
m_txtNumber->setString("");
|
|||
|
|
m_strGameID = "";
|
|||
|
|
onPrevButtonClick(nullptr);
|
|||
|
|
|
|||
|
|
int nCurNum = CWebReq::getDataValueInt(pDoc, "CurNum");
|
|||
|
|
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
|
|||
|
|
tagGlobalUserData * pGlobalUserData = pGlobalUserInfo->GetGlobalUserData();
|
|||
|
|
pGlobalUserData->lUserInsure = nCurNum;
|
|||
|
|
|
|||
|
|
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
|||
|
|
EventCustom event(UPDATE_USER_INSURE);
|
|||
|
|
|
|||
|
|
//<2F>ɷ<EFBFBD><C9B7>¼<EFBFBD><C2BC><EFBFBD>MainScene
|
|||
|
|
dispatcher->dispatchEvent(&event);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
std::string strReason = CWebReq::getDataValueStr(pDoc, "Reason");
|
|||
|
|
|
|||
|
|
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD>ֵʧ<EFBFBD><EFBFBD>:") + strReason);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool PayScene::mapEncrypt(const char * pszSourceData, char * pszEncrypData, uint16 wMaxCount)
|
|||
|
|
{
|
|||
|
|
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CC_ASSERT((pszEncrypData != NULL) && (pszSourceData != NULL));
|
|||
|
|
CC_ASSERT(wMaxCount > strlen(pszSourceData));
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
size_t nLength = strlen(pszSourceData);
|
|||
|
|
uint8 * pcbEncrypData = (uint8 *)pszEncrypData;
|
|||
|
|
uint8 * pcbSourceData = (uint8 *)pszSourceData;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (uint32 i = 0, n = nLength*sizeof(uint8); i < n; i++)
|
|||
|
|
{
|
|||
|
|
pcbEncrypData[i] = g_SendByteMap[pcbSourceData[i]];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
|
|||
|
|
pszEncrypData[nLength] = 0;
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void PayScene::encryptData(std::string stData, std::string& strOut)
|
|||
|
|
{
|
|||
|
|
size_t nLength = stData.size();
|
|||
|
|
char* pBuffer = new char[nLength + 1];
|
|||
|
|
mapEncrypt(stData.c_str(), pBuffer, nLength + 1);
|
|||
|
|
|
|||
|
|
for (int i = 0, n = nLength; i < n; i++)
|
|||
|
|
{
|
|||
|
|
strOut += StringUtils::format("%02X", (uint8)pBuffer[i]);
|
|||
|
|
}
|
|||
|
|
}
|