Files
wnmj/Classes/Mission/LoginMission.cpp

505 lines
13 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "cocos2d.h"
#include "LoginMission.h"
#include "Utility.h"
#define MISSION_LOGIN_ACCOUNT 1
#define MISSION_LOGIN_GAMEID 2
#define MISSION_REGISTER 3
#define MISSION_UPDATE_INFO 4
#define MISSION_SERVER_INFO 5
#define MISSION_LOGIN_VISITOR 6
LoginMission::LoginMission()
{
mMissionType = 0;
mILoginMissionSink = 0;
}
// <20><><EFBFBD>ûص<C3BB><D8B5>ӿ<EFBFBD>
void LoginMission::setMissionSink(ILoginMissionSink* pILoginMissionSink)
{
mILoginMissionSink = pILoginMissionSink;
}
// <20>˺ŵ<CBBA>½
void LoginMission::loginAccount(const CMD_GP_LogonAccounts& LoginAccount)
{
memcpy(&mLoginAccount, &LoginAccount, sizeof(mLoginAccount));
mMissionType = MISSION_LOGIN_ACCOUNT;
start();
}
// <20>ο͵<CEBF>¼
void LoginMission::loginVisitor(const CMD_GP_VisitorLogon& VisitorAccount)
{
memcpy(&mVisitorAccount, &VisitorAccount, sizeof(VisitorAccount));
mVisitorAccount.dwPlazaVersion = Helps::Instance()->GetPlazaVersion();
mMissionType = MISSION_LOGIN_VISITOR;
start();
}
// I D<><44>½
void LoginMission::loginGameID(const CMD_GP_LogonByUserID& LoginGameID)
{
memcpy(&mLoginGameID, &LoginGameID, sizeof(mLoginGameID));
mMissionType = MISSION_LOGIN_GAMEID;
start();
}
void LoginMission::registerServer(const CMD_GP_RegisterAccounts& RegisterAccount)
{
memcpy(&mRegisterAccount, &RegisterAccount, sizeof(mRegisterAccount));
mMissionType = MISSION_REGISTER;
start();
}
void LoginMission::updateOnlineInfo()
{
mMissionType = MISSION_UPDATE_INFO;
start();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool LoginMission::updateServerInfo(uint16 kind)
{
KIND_ITER it = std::find(mKindList.begin(), mKindList.end(), kind);
if (it != mKindList.end())
{
return false;
}
it = std::find(mKindWaitList.begin(), mKindWaitList.end(), kind);
if (it != mKindWaitList.end())
{
return false;
}
mKindList.push_back(kind);
mMissionType = MISSION_SERVER_INFO;
start();
return true;
}
// <20><>½
bool LoginMission::sendLoginVisitor(const CMD_GP_VisitorLogon& VisitorAccount)
{
CGlobalUserInfo * pGlobalUserInfo=CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData=pGlobalUserInfo->GetGlobalUserData();
strncpy(pGlobalUserData->szPassword,mVisitorAccount.szPassWord,countarray(pGlobalUserData->szPassword));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send(MDM_GP_LOGON, SUB_GP_LOGON_VISITOR, (void*)&mVisitorAccount, sizeof(mVisitorAccount));
return true;
}
//<2F><><EFBFBD>͵<EFBFBD>½<EFBFBD><C2BD>Ϣ
bool LoginMission::sendLoginAccount(const CMD_GP_LogonAccounts& LoginAccount)
{
cocos2d::log(("LoginMission::sendLoginAccount\n"));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGlobalUserInfo * pGlobalUserInfo=CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData=pGlobalUserInfo->GetGlobalUserData();
strncpy(pGlobalUserData->szPassword,LoginAccount.szPassword, countarray(pGlobalUserData->szPassword));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send(MDM_GP_LOGON, SUB_GP_LOGON_ACCOUNTS, (void*)&LoginAccount, sizeof(LoginAccount));
return true;
}
//<2F><><EFBFBD>͵<EFBFBD>½<EFBFBD><C2BD>Ϣ
bool LoginMission::sendLoginGameID(const CMD_GP_LogonByUserID& LoginGameID)
{
return true;
}
//<2F><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>Ϣ
bool LoginMission::sendRegisterPacket(const CMD_GP_RegisterAccounts& RegisterAccount)
{
cocos2d::log(("LoginMission::sendRegisterPacket\n"));
CGlobalUserInfo * pGlobalUserInfo=CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData=pGlobalUserInfo->GetGlobalUserData();
strncpy(pGlobalUserData->szPassword,RegisterAccount.szLogonPass, countarray(pGlobalUserData->szPassword));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
send(MDM_GP_LOGON, SUB_GP_REGISTER_ACCOUNTS, (void*)&RegisterAccount, sizeof(RegisterAccount));
return true;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool LoginMission::sendUpdateOnlineInfoPacket()
{
return true;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>б<EFBFBD>
void LoginMission::sendUpdateServerInfo()
{
}
void LoginMission::onEventTCPSocketLink()
{
cocos2d::log(("LoginMission::onEventTCPSocketLink\n"));
switch (mMissionType)
{
// <20><>½
case MISSION_LOGIN_ACCOUNT:
sendLoginAccount(mLoginAccount);
break;
case MISSION_LOGIN_VISITOR:
sendLoginVisitor(mVisitorAccount);
break;
// <20><>½
case MISSION_LOGIN_GAMEID:
sendLoginGameID(mLoginGameID);
break;
// ע<><D7A2>
case MISSION_REGISTER:
sendRegisterPacket(mRegisterAccount);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case MISSION_UPDATE_INFO:
sendUpdateOnlineInfoPacket();
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>б<EFBFBD>
case MISSION_SERVER_INFO:
sendUpdateServerInfo();
break;
}
}
void LoginMission::onEventTCPSocketShut()
{
cocos2d::log(("LoginMission::onEventTCPSocketShut\n"));
}
void LoginMission::onEventTCPSocketError(int errorCode)
{
cocos2d::log(("LoginMission::onEventTCPSocketError code[%d]\n"), errorCode);
if (mILoginMissionSink)
mILoginMissionSink->onGPError(errorCode);
}
bool LoginMission::onEventTCPSocketRead(int main, int sub, void* data, int size)
{
cocos2d::log(("onEventTCPSocketRead main:%d sub:%d size:%d\n"), main, sub, size);
switch (main)
{
//case SUB_MB_LOGON_GAMEID: return onSocketMainLogon(sub, data, size);
case MDM_GP_LOGON: return onSocketMainLogon(sub, data, size);
case MDM_GP_SERVER_LIST: return onSocketMainServerList(sub, data, size);
default:
break;
}
CCAssert(false,"");
return false;
}
//////////////////////////////////////////////////////////////////////////
// <20><>½<EFBFBD><C2BD>Ϣ
bool LoginMission::onSocketMainLogon(int sub, void* data, int size)
{
switch (sub)
{
//<2F><>¼<EFBFBD>ɹ<EFBFBD>
case SUB_GP_LOGON_SUCCESS: return onSocketSubLogonSuccess(data, size);
//<2F><>¼ʧ<C2BC><CAA7>
case SUB_GP_LOGON_FAILURE: return onSocketSubLogonFailure(data, size);
//<2F><>¼ʧ<C2BC><CAA7>
case SUB_GP_VALIDATE_MBCARD: return onSocketSubLogonValidateMBCard(data, size);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
case SUB_GP_UPDATE_NOTIFY: return onSocketSubUpdateNotify(data, size);
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
case SUB_GP_LOGON_FINISH: return onSocketSubLogonFinish(data, size);
case SUB_GP_GROWLEVEL_CONFIG: return true;
case SUB_GP_MATCH_SIGNUPINFO: return onSocketSubMacthSignupInfo(data, size);
}
CCAssert(false,"");
return false;
}
//<2F><>¼<EFBFBD>ɹ<EFBFBD>
bool LoginMission::onSocketSubLogonSuccess(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketSubLogonSuccess\n"));
//<2F><>½<EFBFBD>ɹ<EFBFBD>
CMD_GP_LogonSuccess* pData = (CMD_GP_LogonSuccess*)data;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGlobalUserInfo * pGlobalUserInfo=CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData=pGlobalUserInfo->GetGlobalUserData();
pGlobalUserData->lUserScore = pData->lUserScore;
pGlobalUserData->lUserInsure = pData->lUserInsure;
pGlobalUserData->lGrade = pData->lGrade;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
pGlobalUserData->wFaceID = pData->wFaceID;
pGlobalUserData->cbGender = pData->cbGender;
pGlobalUserData->dwUserID =pData->dwUserID;
pGlobalUserData->dwGameID = pData->dwGameID;
pGlobalUserData->dwSpreaderID = pData->dwSpreaderID;
pGlobalUserData->dwExperience =pData->dwExperience;
pGlobalUserData->cbInsureEnabled = pData->cbInsureEnabled;
pGlobalUserData->cbWXShareTimes = pData->cbWXShareTimes;
//strncpy(pGlobalUserData->szNickName, (char*)pData->szNickName, countarray(pGlobalUserData->szNickName)-1);
strncpy(pGlobalUserData->szAccounts, ((char*)pData->szAccounts), countarray(pGlobalUserData->szAccounts)-1);
// <20><EFBFBD><E9BDB1>Ϣ;
pGlobalUserData->isLottery = pData->isLottery;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
pGlobalUserInfo->upPlayerInfo();
if (mILoginMissionSink)
mILoginMissionSink->onGPLoginSuccess();
return true;
}
//<2F><>¼ʧ<C2BC><CAA7>
bool LoginMission::onSocketSubLogonFailure(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketSubLogonFailure\n"));
DBR_GP_LogonError* pNetInfo =(DBR_GP_LogonError*)data;
//<2F><>ʾ<EFBFBD><CABE>Ϣ
if (mILoginMissionSink)
mILoginMissionSink->onGPLoginFailure(pNetInfo->lErrorCode,utility::a_u8(pNetInfo->szErrorDescribe).c_str());
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
bool LoginMission::onSocketSubUpdateNotify(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketSubUpdateNotify\n"));
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return true;
}
//<2F><>¼ʧ<C2BC><CAA7>(<28>ܱ<EFBFBD><DCB1><EFBFBD>)
bool LoginMission::onSocketSubLogonValidateMBCard(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketSubLogonValidateMBCard\n"));
return true;
}
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
bool LoginMission::onSocketSubLogonFinish(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketSubLogonFinish\n"));
stop();
if (mILoginMissionSink)
mILoginMissionSink->onGPLoginComplete();
CGlobalUserInfo * pGlobalUserInfo=CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData=pGlobalUserInfo->GetGlobalUserData();
pGlobalUserInfo->LoginSucess();
return true;
}
bool LoginMission::onSocketSubMacthSignupInfo(void* data, int size)
{
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(size%sizeof(uint16)!=0) return false;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
tagSignupMatchInfo * pSignupMatchInfo = (tagSignupMatchInfo *)data;
uint16 wSignupCount = size/sizeof(pSignupMatchInfo);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
ASSERT(CServerListData::shared()!=NULL);
CServerListData * pServerListData=CServerListData::shared();
//<2F><><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>
CGameServerItem * pGameServerItem = NULL;
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
for(uint16 i=0;i<wSignupCount;i++)
{
pGameServerItem = pServerListData->SearchGameServer(pSignupMatchInfo[i].wServerID);
if(pGameServerItem!=NULL && pGameServerItem->m_GameMatch.dwMatchID==pSignupMatchInfo[i].dwMatchID)
{
pGameServerItem->m_bSignuped=true;
}
}
return true;
}
//////////////////////////////////////////////////////////////////////////
// <20>б<EFBFBD><D0B1><EFBFBD>Ϣ
bool LoginMission::onSocketMainServerList(int sub, void* data, int size)
{
switch (sub)
{
case SUB_GP_LIST_TYPE: return onSocketListType(data, size);
case SUB_GP_LIST_KIND: return onSocketListKind(data, size);
case SUB_GP_LIST_SERVER: return onSocketListServer(data, size);
case SUB_GP_LIST_MATCH: return onSocketListMatch(data, size);
case SUB_GP_LIST_FINISH: return onSocketListFinish(data, size);
case SUB_GR_KINE_ONLINE: return onSocketKindOnline(data, size);
case SUB_GR_SERVER_ONLINE: return onSocketServerOnline(data, size);
case SUB_GR_ONLINE_FINISH: return onSocketOnlineFinish(data, size);
}
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool LoginMission::onSocketListType(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketListType\n"));
//QY
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool LoginMission::onSocketListKind(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketListKind\n"));
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int itemSize = sizeof(tagGameKind);
ASSERT(size%itemSize==0);
if (size%itemSize!=0) return false;
char* pNetInfo = (char*)data;
int iItemCount=size/itemSize;
CServerListData * pServerListData=CServerListData::shared();
for (int i=0;i<iItemCount;i++)
{
tagGameKind* pGameKind = (tagGameKind*)&(pNetInfo[i*itemSize]);
pServerListData->InsertGameKind(pGameKind);
}
return true;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
bool LoginMission::onSocketListServer(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketListServer\n"));
////<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int itemSize = sizeof(tagGameServer);
ASSERT(size%itemSize==0);
if (size%itemSize!=0) return false;
char* pNetInfo = (char*)data;
int iItemCount=size/itemSize;
CServerListData * pServerListData=CServerListData::shared();
for (int i=0;i<iItemCount;i++)
{
tagGameServer* pGameServer = (tagGameServer*)&(pNetInfo[i*itemSize]);
pServerListData->InsertGameServer(pGameServer);
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
bool LoginMission::onSocketListMatch(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketListMatch\n"));
int itemSize = sizeof(tagGameMatch);
ASSERT(size%itemSize==0);
if (size%itemSize!=0) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16 wItemCount=size/sizeof(tagGameMatch);
tagGameMatch * pGameMatch=(tagGameMatch *)(data);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CGameServerItem * pGameServerItem=NULL;
CServerListData * pServerListData=CServerListData::shared();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (uint16 i=0;i<wItemCount;i++)
{
pGameServerItem = pServerListData->SearchGameServer(pGameMatch->wServerID);
if(pGameServerItem!=NULL)
{
memcpy(&pGameServerItem->m_GameMatch,pGameMatch++,sizeof(pGameServerItem->m_GameMatch));
}
}
return true;
}
// <20>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
bool LoginMission::onSocketListFinish(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketListFinish\n"));
ASSERT(CServerListData::shared()!=0);
if (CServerListData::shared()!=0)
{
CServerListData::shared()->OnEventListFinish();
}
return true;
}
//<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
bool LoginMission::onSocketListConfig(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketListConfig\n"));
CMD_GP_ListConfig* pListConfig = (CMD_GP_ListConfig*)data;
return true;
}
//////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD>߸<EFBFBD><DFB8><EFBFBD>
//////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool LoginMission::onSocketKindOnline(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketKindOnline\n"));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool LoginMission::onSocketServerOnline(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketServerOnline\n"));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return true;
}
// <20><><EFBFBD>߸<EFBFBD><DFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool LoginMission::onSocketOnlineFinish(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketOnlineFinish\n"));
return true;
}
//////////////////////////////////////////////////////////////////////////
//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
bool LoginMission::onSocketVideoOption(void* data, int size)
{
cocos2d::log(("LoginMission::onSocketVideoOption\n"));
cocos2d::log("onSocketVideoOption");
return true;
}