Files

1310 lines
34 KiB
C++
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#include "GameMission.h"
#include "PopScene.h"
#include "MainScene.h"
#include "JniFun.h"
CGameServerItem* GameMission::g_pGameServerItem = nullptr;
GameMission::GameMission()
{
mServiceStatus = ServiceStatus_Unknow;
mIClientKernelSink = nullptr;
mGameStatus = GAME_STATUS_FREE;
m_pMeUserItem = nullptr;
mUserManager = new CGameUserManager();
mUserManager->SetUserManagerSink(this);
m_wGameKindID = 0;
memset(&mUserAttribute, 0, sizeof(mUserAttribute));
memset(&mServerAttribute, 0, sizeof(mServerAttribute));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ں˽ӿ<CBBD>
void GameMission::SetClientKernelSink(IClientKernelSink* pIClientKernelSink)
{
mIClientKernelSink = pIClientKernelSink;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GameMission::onEventTCPSocketLink()
{
SendLogonPacket();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
void GameMission::onEventTCPSocketShut()
{
cocos2d::log("GameMission::onEventTCPSocketShut()...");
mUserManager->ResetUserItem();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GameMission::onEventTCPSocketError(int errorCode)
{
auto callback_ok = [=](){
Director::getInstance()->popScene();
};
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>"), callback_ok);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ
bool GameMission::onEventTCPSocketRead(int main, int sub, void* data, int dataSize)
{
switch (main)
{
//<2F><>¼<EFBFBD><C2BC>Ϣ
case MDM_GR_LOGON: return OnSocketMainLogon(sub, data, dataSize);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
case MDM_GR_CONFIG: return OnSocketMainConfig(sub, data, dataSize);
//<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
case MDM_GR_USER: return OnSocketMainUser(sub, data, dataSize);
//˽<>˳<EFBFBD><CBB3><EFBFBD>Ϣ
case MDM_GR_PRIVATE:return OnSocketMainPrivate(sub, data, dataSize);
//<2F><>Ϸ<EFBFBD><CFB7>Ϣ
case MDM_GF_GAME:
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
case MDM_GF_FRAME: return OnSocketMainGameFrame(main, sub, data, dataSize);
//ϵͳ<CFB5><CDB3>Ϣ
case MDM_CM_SYSTEM: return OnSocketMainSystem(sub, data, dataSize);
default:
break;
}
return true;
}
//<2F><>¼<EFBFBD><C2BC>Ϣ
bool GameMission::OnSocketMainLogon(int sub, void* data, int dataSize)
{
switch (sub)
{
//<2F><>¼<EFBFBD>ɹ<EFBFBD>
case SUB_GR_LOGON_SUCCESS: return OnSocketSubLogonSuccess(data, dataSize);
//<2F><>¼ʧ<C2BC><CAA7>
case SUB_GR_LOGON_FAILURE: return OnSocketSubLogonFailure(data, dataSize);
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
case SUB_GR_LOGON_FINISH: return OnSocketSubLogonFinish(data, dataSize);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
case SUB_GR_UPDATE_NOTIFY: return OnSocketSubUpdateNotify(data, dataSize);
}
return true;
}
//<2F><>¼<EFBFBD>ɹ<EFBFBD>
bool GameMission::OnSocketSubLogonSuccess(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubLogonSuccess\n"));
//<2F><><EFBFBD><EFBFBD>״̬
mServiceStatus = ServiceStatus_RecvInfo;
CMD_GR_LogonSuccess* pLogonSuccess = (CMD_GR_LogonSuccess*)data;
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
pGlobalUserInfo->SetUserRight(pLogonSuccess->dwUserRight);
pGlobalUserInfo->SetMasterRight(pLogonSuccess->dwMasterRight);
return true;
}
//<2F><>¼ʧ<C2BC><CAA7>
bool GameMission::OnSocketSubLogonFailure(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubLogonFailure\n"));
LoadingScene::Instance().hide();
CMD_GR_LogonError* pLogonErr = (CMD_GR_LogonError*)data;
PopScene::Instance().show(utility::a_u8(pLogonErr->szErrorDescribe));
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
IntermitConnect(true);
return true;
}
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
bool GameMission::OnSocketSubLogonFinish(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubLogonFinish\n"));
LoadingScene::Instance().hide();
//<2F><><EFBFBD><EFBFBD>״̬
mServiceStatus = ServiceStatus_ServiceIng;
mUserAttribute.dwUserID = m_pMeUserItem->GetUserID();
mUserAttribute.wChairID = INVALID_CHAIR;
mUserAttribute.wTableID = INVALID_TABLE;
if (m_pMeUserItem->GetTableID() == INVALID_TABLE || m_pMeUserItem->GetChairID() == INVALID_CHAIR)
{
CC_ASSERT(g_pGameServerItem != nullptr);
if (g_pGameServerItem->IsGoldRoom())
{
PerformQuickSitDown();
}
else
{
auto callback_ok = [=](){
Director::getInstance()->popScene();
};
PopScene::Instance().show(utility::a_u8("<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>ɢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), callback_ok);
this->stop();
return true;
}
}
else
{
OnGFGameOption();
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
bool GameMission::OnSocketSubUpdateNotify(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubUpdateNotify\n"));
LoadingScene::Instance().hide();
//IntermitConnect(true);
auto callback = []{
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
};
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>"), callback);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool GameMission::OnSocketMainConfig(int sub, void* data, int dataSize)
{
switch (sub)
{
//<2F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
case SUB_GR_CONFIG_COLUMN: return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case SUB_GR_CONFIG_SERVER: return OnSocketSubConfigServer(data, dataSize);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case SUB_GR_CONFIG_PROPERTY: return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>
case SUB_GR_CONFIG_USER_RIGHT: return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case SUB_GR_CONFIG_FINISH: return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(FALSE);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::OnSocketSubConfigServer(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubConfigServer\n");
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(dataSize == sizeof(CMD_GR_ConfigServer));
if (dataSize < sizeof(CMD_GR_ConfigServer)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_GR_ConfigServer * pConfigServer = (CMD_GR_ConfigServer *)data;
mServerAttribute.wTableCount = pConfigServer->wTableCount;
mServerAttribute.wChairCount = pConfigServer->wChairCount;
return true;
}
bool GameMission::OnSocketMainUser(int sub, void* data, int dataSize)
{
switch (sub)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
case SUB_GR_SIT_FAILED: return OnSocketSubRequestFailure(data, dataSize);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
case SUB_GR_USER_ENTER: return OnSocketSubUserEnter(data, dataSize);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
case SUB_GR_USER_SCORE: return OnSocketSubUserScore(data, dataSize);
//<2F>û<EFBFBD>״̬
case SUB_GR_USER_STATUS: return OnSocketSubUserStatus(data, dataSize);
//<2F>û<EFBFBD>λ<EFBFBD><CEBB>
case SUB_GR_USER_LOCATION: return OnSocketSubUserLocation(data, dataSize);
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
case SUB_GR_USER_CHAT: return true;
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
case SUB_GR_USER_EXPRESSION: return true;
//<2F>û<EFBFBD>˽<EFBFBD><CBBD>
case SUB_GR_WISPER_CHAT: return true;
//˽<>ı<EFBFBD><C4B1><EFBFBD>
case SUB_GR_WISPER_EXPRESSION: return true;
}
return true;
}
//////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD>״̬
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
bool GameMission::OnSocketSubRequestFailure(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubRequestFailure\n"));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_RequestFailure * pRequestFailure = (CMD_GR_RequestFailure *)data;
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(dataSize > (sizeof(CMD_GR_RequestFailure) - sizeof(pRequestFailure->szDescribeString)));
if (dataSize <= (sizeof(CMD_GR_RequestFailure) - sizeof(pRequestFailure->szDescribeString))) return false;
PopScene::Instance().show(utility::a_u8(pRequestFailure->szDescribeString));
return true;
}
//////////////////////////////////////////////////////////////////////////
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::OnSocketSubUserEnter(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubUserEnter\n"));
int n = sizeof(tagUserInfoHead);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagUserInfo kUserInfo;
tagCustomFaceInfo CustomFaceInfo;
zeromemory(&kUserInfo, sizeof(kUserInfo));
zeromemory(&CustomFaceInfo, sizeof(CustomFaceInfo));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData = pGlobalUserInfo->GetGlobalUserData();
tagUserInfoHead* pUserInfoHead = (tagUserInfoHead*)data;
kUserInfo.dwUserID = pUserInfoHead->dwUserID;
kUserInfo.wTableID = pUserInfoHead->wTableID;
kUserInfo.wChairID = pUserInfoHead->wChairID;
kUserInfo.cbUserStatus = pUserInfoHead->cbUserStatus;
kUserInfo.wFaceID = pUserInfoHead->wFaceID;
kUserInfo.dwCustomID = pUserInfoHead->dwCustomID;
kUserInfo.cbGender = pUserInfoHead->cbGender;
kUserInfo.cbMemberOrder = pUserInfoHead->cbMemberOrder;
kUserInfo.cbMasterOrder = pUserInfoHead->cbMasterOrder;
kUserInfo.dwGameID = pUserInfoHead->dwGameID;
//kUserInfo.dwGroupID = pUserInfoHead->dwLogonIp;
kUserInfo.lLoveLiness = pUserInfoHead->lLoveLiness;
kUserInfo.lScore = pUserInfoHead->lScore;
kUserInfo.lGrade = pUserInfoHead->lGrade;
kUserInfo.lInsureScore = pUserInfoHead->lInsure;
kUserInfo.lWinCount = pUserInfoHead->dwWinCount;
kUserInfo.lLostCount = pUserInfoHead->dwLostCount;
kUserInfo.lDrawCount = pUserInfoHead->dwDrawCount;
kUserInfo.lFleeCount = pUserInfoHead->dwFleeCount;
kUserInfo.lExperience = pUserInfoHead->dwExperience;
//ip<69><70>ַ<EFBFBD><D6B7>ȡ;
BYTE * pClientAddr = (BYTE *)&pUserInfoHead->dwLogonIp;
sprintf(kUserInfo.szLogonIP, "%d.%d.%d.%d", pClientAddr[0], pClientAddr[1], pClientAddr[2], pClientAddr[3]);
//kUserInfo.dwGroupID = pUserInfoHead->dwLogonIp;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CServerListData * pServerListData = CServerListData::shared();
void * pDataBuffer = NULL;
tagDataDescribe DataDescribe;
CRecvPacketHelper RecvPacket(pUserInfoHead + 1, dataSize - sizeof(tagUserInfoHead));
//<2F><>չ<EFBFBD><D5B9>Ϣ
while (true)
{
pDataBuffer = RecvPacket.GetData(DataDescribe);
if (DataDescribe.wDataDescribe == DTP_NULL) break;
switch (DataDescribe.wDataDescribe)
{
case DTP_GR_NICK_NAME: //<2F>û<EFBFBD><C3BB>dz<EFBFBD>
{
ASSERT(pDataBuffer != NULL);
ASSERT(DataDescribe.wDataSize <= sizeof(kUserInfo.szNickName));
if (DataDescribe.wDataSize <= sizeof(kUserInfo.szNickName))
{
memcpy(&kUserInfo.szNickName, pDataBuffer, DataDescribe.wDataSize);
kUserInfo.szNickName[CountArray(kUserInfo.szNickName) - 1] = 0;
}
break;
}
case DTP_GR_GROUP_NAME: //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
{
ASSERT(pDataBuffer != NULL);
ASSERT(DataDescribe.wDataSize <= sizeof(kUserInfo.szGroupName));
if (DataDescribe.wDataSize <= sizeof(kUserInfo.szGroupName))
{
memcpy(&kUserInfo.szGroupName, pDataBuffer, DataDescribe.wDataSize);
kUserInfo.szGroupName[CountArray(kUserInfo.szGroupName) - 1] = 0;
}
break;
}
case DTP_GR_UNDER_WRITE: //<2F><><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9>
{
ASSERT(pDataBuffer != NULL);
ASSERT(DataDescribe.wDataSize <= sizeof(kUserInfo.szUnderWrite));
if (DataDescribe.wDataSize <= sizeof(kUserInfo.szUnderWrite))
{
memcpy(kUserInfo.szUnderWrite, pDataBuffer, DataDescribe.wDataSize);
kUserInfo.szUnderWrite[CountArray(kUserInfo.szUnderWrite) - 1] = 0;
}
break;
}
case DTP_GR_HEAD_HTTP: //ͷ<><CDB7>HTTP
{
ASSERT(pDataBuffer != NULL);
ASSERT(DataDescribe.wDataSize <= sizeof(kUserInfo.szHeadHttp));
if (DataDescribe.wDataSize <= sizeof(kUserInfo.szHeadHttp))
{
memcpy(kUserInfo.szHeadHttp, pDataBuffer, DataDescribe.wDataSize);
kUserInfo.szHeadHttp[CountArray(kUserInfo.szHeadHttp) - 1] = 0;
}
break;
}
default:
break;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
IClientUserItem * pIClientUserItem = mUserManager->SearchUserByUserID(kUserInfo.dwUserID);
pIClientUserItem = mUserManager->ActiveUserItem(kUserInfo, CustomFaceInfo);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pServerListData)
{
pServerListData->SetServerOnLineCount(mServerAttribute.wServerID, mUserManager->GetActiveUserCount());
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::OnSocketSubUserScore(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubUserScore\n"));
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(dataSize == sizeof(CMD_GR_UserScore));
if (dataSize < sizeof(CMD_GR_UserScore)) return false;
//Ѱ<><D1B0><EFBFBD>û<EFBFBD>
CMD_GR_UserScore * pUserScore = (CMD_GR_UserScore *)data;
IClientUserItem * pIClientUserItem = mUserManager->SearchUserByUserID(pUserScore->dwUserID);
//<2F>û<EFBFBD><C3BB>ж<EFBFBD>
if (pIClientUserItem == 0) return true;
mUserManager->UpdateUserItemScore(pIClientUserItem, &pUserScore->UserScore);
return true;
}
//<2F>û<EFBFBD>״̬
bool GameMission::OnSocketSubUserStatus(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubUserStatus\n");
ASSERT(dataSize >= sizeof(CMD_GR_UserStatus));
if (dataSize < sizeof(CMD_GR_UserStatus)) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_UserStatus * pUserStatus = (CMD_GR_UserStatus *)data;
IClientUserItem * pIClientUserItem = mUserManager->SearchUserByUserID(pUserStatus->dwUserID);
if (pIClientUserItem == NULL) return true;
tagUserStatus UserStatus;
UserStatus.wTableID = pUserStatus->UserStatus.wTableID;
UserStatus.wChairID = pUserStatus->UserStatus.wChairID;
UserStatus.cbUserStatus = pUserStatus->UserStatus.cbUserStatus;
//<2F><><EFBFBD><EFBFBD>״̬
if (UserStatus.cbUserStatus == US_NULL)
{
//ɾ<><C9BE><EFBFBD>û<EFBFBD>
mUserManager->DeleteUserItem(pIClientUserItem);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
CServerListData * pServerListData = CServerListData::shared();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pServerListData->SetServerOnLineCount(mServerAttribute.wServerID, mUserManager->GetActiveUserCount());
}
else
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
mUserManager->UpdateUserItemStatus(pIClientUserItem, &UserStatus);
}
return true;
}
//<2F>û<EFBFBD>λ<EFBFBD><CEBB>
bool GameMission::OnSocketSubUserLocation(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubUserStatus\n");
ASSERT(dataSize >= sizeof(CMD_GF_S_UserLocation));
if (dataSize < sizeof(CMD_GF_S_UserLocation)) return false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GF_S_UserLocation * pLocation = (CMD_GF_S_UserLocation *)data;
//Ѱ<><D1B0><EFBFBD>û<EFBFBD>
IClientUserItem * pIClientUserItem = mUserManager->SearchUserByUserID(pLocation->dwTargetUserID);
if (nullptr == pIClientUserItem) return true;
if (mIClientKernelSink)
{
mIClientKernelSink->onEventUserLocation(pIClientUserItem, pLocation);
}
return true;
}
//ϵͳ<CFB5><CDB3>Ϣ
bool GameMission::OnSocketMainSystem(int sub, void* data, int dataSize)
{
switch (sub)
{
//ϵͳ<CFB5><CDB3>Ϣ
case SUB_CM_SYSTEM_MESSAGE: return OnSocketSubSystemMessage(data, dataSize);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(FALSE);
return true;
}
//ϵͳ<CFB5><CDB3>Ϣ
bool GameMission::OnSocketSubSystemMessage(void* data, int wDataSize)
{
cocos2d::log(("GameMission::OnSocketSubSystemMessage\n"));
CMD_CM_SystemMessage * pSystemMessage = (CMD_CM_SystemMessage *)data;
uint16 wHeadSize = sizeof(CMD_CM_SystemMessage) - sizeof(pSystemMessage->szString);
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT((wDataSize > wHeadSize) && (wDataSize == (wHeadSize + pSystemMessage->wLength*sizeof(char))));
if ((wDataSize <= wHeadSize) || (wDataSize != (wHeadSize + pSystemMessage->wLength*sizeof(char)))) return false;
uint16 wType = pSystemMessage->wType;
//<2F>رմ<D8B1><D5B4><EFBFBD>
if ((wType&(SMT_CLOSE_ROOM | SMT_CLOSE_LINK)) != 0)
{
OnGFGameClose(ServiceStatus_NetworkDown);
this->stop();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if(wType&SMT_EJECT)
{
PopScene::Instance().show(utility::a_u8(pSystemMessage->szString));
}
return true;
}
//
bool GameMission::OnSocketMainPrivate(int sub, void* data, int dataSize)
{
switch (sub)
{
//<2F><><EFBFBD>ò<EFBFBD>ѯ
case SUB_GR_PRIVATE_INFO: return OnSocketSubPrivateInfo(data, dataSize);
case SUB_GR_CREATE_PRIVATE_SUCESS: return OnSocketSubPrivateCreateSuceess(data, dataSize);
case SUB_GF_PRIVATE_ROOM_INFO: return OnSocketSubPrivateRoomInfo(data, dataSize);
case SUB_GR_PRIVATE_DISMISS: return OnSocketSubPrivateDismissInfo(data, dataSize);
case SUB_GR_PRIVATE_DISMISS_RESULT: return OnSocketSubPrivateDismissResult(data, dataSize);
case SUB_GF_GM_PRIVATE_END: return OnSocketSubGMPrivateEnd(data, dataSize);
case SUB_GR_AUTO_USER_STATUS: return OnSocketSubPrivateAutoUserStatus(data, dataSize);
case SUB_GR_AUTO_USER_READY: return OnSocketSubAutoUserReady(data, dataSize);
case SUB_GF_PRIVATE_SCORE_INFO: return OnSocketSubPrivateScoreInfo(data, dataSize);
}
return true;
}
//
bool GameMission::OnSocketSubPrivateInfo(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubPrivateInfo\n");
CMD_GR_Private_Info *pNetInfo = (CMD_GR_Private_Info*)data;
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
bool GameMission::OnSocketSubPrivateCreateSuceess(void* data, int dataSize)
{
cocos2d::log("PrivateMission::OnSocketSubPrivateCreateSuceess\n");
ASSERT(dataSize == sizeof(CMD_GR_Create_Private_Sucess));
if (dataSize != sizeof(CMD_GR_Create_Private_Sucess)) return false;
CMD_GR_Create_Private_Sucess *pNetInfo = (CMD_GR_Create_Private_Sucess*)data;
return true;
}
//˽<>˳<EFBFBD><CBB3><EFBFBD>Ϣ
bool GameMission::OnSocketSubPrivateRoomInfo(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubPrivateRoomInfo\n");
DataStream kDataStream(data, dataSize);
CMD_GF_Private_Room_Info kNetInfo;
kNetInfo.StreamValue(kDataStream, false);
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubPrivateRoomInfo(&kNetInfo);
}
return true;
}
//˽<>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
bool GameMission::OnSocketSubPrivateScoreInfo(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubPrivateScoreInfo\n");
DataStream kDataStream(data, dataSize);
CMD_GF_Private_Score_Info kNetInfo;
kNetInfo.StreamValue(kDataStream, false);
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubPrivateScoreInfo(&kNetInfo);
}
return true;
}
bool GameMission::OnSocketSubGMPrivateEnd(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubGMPrivateEnd\n");
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubPrivateEnd(data, dataSize);
}
return true;
}
bool GameMission::OnSocketSubPrivateDismissInfo(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubPrivateDismissInfo\n");
ASSERT(dataSize == sizeof(CMD_GF_Private_Dismiss_Info));
if (dataSize != sizeof(CMD_GF_Private_Dismiss_Info)) return false;
CMD_GF_Private_Dismiss_Info *pNetInfo = (CMD_GF_Private_Dismiss_Info*)data;
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubPrivateDismissInfo(pNetInfo);
}
return true;
}
bool GameMission::OnSocketSubPrivateDismissResult(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubPrivateDismissResult\n");
ASSERT(dataSize == sizeof(CMD_GF_Private_Dismiss_Result));
if (dataSize != sizeof(CMD_GF_Private_Dismiss_Result)) return false;
CMD_GF_Private_Dismiss_Result *pNetInfo = (CMD_GF_Private_Dismiss_Result*)data;
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubPrivateDismissResult(pNetInfo);
}
return true;
}
//<2F><><EFBFBD>ɳ<EFBFBD><C9B3><EFBFBD><EFBFBD><EFBFBD>״̬;
bool GameMission::OnSocketSubPrivateAutoUserStatus(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubPrivateAutoUserStatus\n");
ASSERT(dataSize == sizeof(tagAutoUserStatus));
if (dataSize != sizeof(tagAutoUserStatus)) return false;
tagAutoUserStatus *pNetInfo = (tagAutoUserStatus*)data;
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubPrivateAutoUserStatus(pNetInfo);
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ״̬;
bool GameMission::OnSocketSubAutoUserReady(void* data, int dataSize)
{
cocos2d::log("GameMission::OnSocketSubAutoUserReady\n");
ASSERT(dataSize == sizeof(CMD_GR_Private_ReadyInfo));
if (dataSize != sizeof(CMD_GR_Private_ReadyInfo)) return false;
CMD_GR_Private_ReadyInfo *pNetInfo = (CMD_GR_Private_ReadyInfo*)data;
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubPrivateAutoUserReady(pNetInfo);
}
return true;
}
bool GameMission::OnSocketMainGameFrame(int main, int sub, void* data, int dataSize)
{
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(dataSize <= SOCKET_TCP_PACKET);
if (dataSize > SOCKET_TCP_PACKET) return false;
//<2F><>Ϸ<EFBFBD><CFB7>Ϣ
if (main == MDM_GF_GAME)
{
//Ч<><D0A7>״̬
ASSERT(mIClientKernelSink != 0);
if (mIClientKernelSink == 0)
{
return false;
}
return mIClientKernelSink->OnEventGameMessage(sub, data, dataSize);
}
//<2F>ں˴<DABA><CBB4><EFBFBD>
if (main == MDM_GF_FRAME)
{
switch (sub)
{
case SUB_GF_USER_CHAT:
{
return OnSocketSubUserChat(data, dataSize);
}
case SUB_GF_USER_EXPRESSION:
{
return OnSocketSubUserFace(data, dataSize);
}
case SUB_GR_TABLE_TALK: //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
{
return OnSocketSubUserTalk(data, dataSize);
}
case SUB_GF_GAME_STATUS: //<2F><>Ϸ״̬
{
return OnSocketSubGameStatus(data, dataSize);
}
case SUB_GF_GAME_SCENE: //<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
{
return OnSocketSubGameScene(data, dataSize);
}
case SUB_GF_SYSTEM_MESSAGE:
{
return OnSocketSubGameSystemMessage(data, dataSize);
}
case SUB_GF_PING_TIME:
{
return OnSocketSubNetWorkTime(data, dataSize);
}
}
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::OnSocketSubUserChat(void* data, int dataSize)
{
if (mIClientKernelSink)
{
return mIClientKernelSink->OnSocketSubUserChat(data, dataSize);
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::OnSocketSubUserFace(void* data, int dataSize)
{
if (mIClientKernelSink)
{
return mIClientKernelSink->OnSocketSubUserFace(data, dataSize);
}
return true;
}
//<2F><>Ϸ<EFBFBD><CFB7>Ϣ
bool GameMission::OnSocketSubUserTalk(void* data, int dataSize)
{
if (mIClientKernelSink)
{
return mIClientKernelSink->RevTalkFile(data, dataSize);
}
return true;
}
//<2F><>Ϸ״̬
bool GameMission::OnSocketSubGameStatus(void* data, int dataSize)
{
cocos2d::log("flow->CClientKernel::OnSocketSubGameStatus\n");
//Ч<><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ASSERT(dataSize == sizeof(CMD_GF_GameStatus));
if (dataSize != sizeof(CMD_GF_GameStatus)) return false;
//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
CMD_GF_GameStatus * pGameStatus = (CMD_GF_GameStatus *)data;
mGameStatus = pGameStatus->cbGameStatus;
return true;
}
//<2F><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
bool GameMission::OnSocketSubGameScene(void* data, int dataSize)
{
cocos2d::log("flow->CClientKernel::OnSocketSubGameScene1");
//Ч<><D0A7>״̬
ASSERT(m_pMeUserItem != 0);
if (m_pMeUserItem == 0) return true;
if (mIClientKernelSink == 0)
return true;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool bLookonUser = (m_pMeUserItem->GetUserStatus() == US_LOOKON);
cocos2d::log("GameMission::OnSocketSubGameScene");
return mIClientKernelSink->OnEventSceneMessage(mGameStatus, bLookonUser, data, dataSize);
}
//ϵͳ<CFB5><CDB3>Ϣ
bool GameMission::OnSocketSubGameSystemMessage(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubGameSystemMessage\n"));
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubGameSystemMessage(data, dataSize);
}
return true;
}
//PING<4E><47><EFBFBD><EFBFBD>
bool GameMission::OnSocketSubNetWorkTime(void* data, int dataSize)
{
cocos2d::log(("GameMission::OnSocketSubNetWorkTime\n"));
if (mIClientKernelSink)
{
mIClientKernelSink->OnSocketSubNetWorkTime(data, dataSize);
}
return true;
}
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
bool GameMission::SendSocketData(uint16 wMainCmdID, uint16 wSubCmdID)
{
return SendSocketData(wMainCmdID, wSubCmdID, 0, 0);
}
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
bool GameMission::SendSocketData(uint16 wMainCmdID, uint16 wSubCmdID, void * data, uint16 dataSize)
{
return send(wMainCmdID, wSubCmdID, (unsigned char*)data, dataSize);
}
//<2F><><EFBFBD>͵<EFBFBD>¼
bool GameMission::SendLogonPacket()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData = pGlobalUserInfo->GetGlobalUserData();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_LogonUserID LogonUserID;
zeromemory(&LogonUserID, sizeof(LogonUserID));
LogonUserID.wKindID = m_wGameKindID;
//<2F><>Ϸ<EFBFBD>
//LogonUserID.dwProcessVersion = Helps::Instance()->GetGameVersion();
//LogonUserID.dwPlazaVersion = Helps::Instance()->GetPlazaVersion();
LogonUserID.dwPlazaVersion = JniFun::getVersionCode();
//<2F><>¼<EFBFBD><C2BC>Ϣ
LogonUserID.dwUserID = pGlobalUserData->dwUserID;
strncpy(LogonUserID.szPassword, pGlobalUserData->szPassword, countarray(LogonUserID.szPassword));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendSocketData(MDM_GR_LOGON, SUB_GR_LOGON_USERID, &LogonUserID, sizeof(LogonUserID));
return true;
}
//ִ<>п<EFBFBD><D0BF>ټ<EFBFBD><D9BC><EFBFBD>
bool GameMission::PerformQuickSitDown()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
char szPassword[LEN_PASSWORD] = { 0 };
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendSitDownPacket(INVALID_TABLE, INVALID_CHAIR, szPassword);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::onEventTCPHeartTick()
{
return true;
}
//////////////////////////////////////////////////////////////////////////
// IUserManagerSink
//////////////////////////////////////////////////////////////////////////
void GameMission::OnUserItemAcitve(IClientUserItem* pIClientUserItem)
{
//<2F>ж<EFBFBD><D0B6>Լ<EFBFBD>
if (m_pMeUserItem == 0)
{
m_pMeUserItem = pIClientUserItem;
}
if (mIClientKernelSink)
{
mIClientKernelSink->OnEventUserEnter(pIClientUserItem, pIClientUserItem->GetUserStatus() == US_LOOKON);
}
}
void GameMission::OnUserItemDelete(IClientUserItem* pIClientUserItem)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16 wLastTableID = pIClientUserItem->GetTableID();
uint16 wLastChairID = pIClientUserItem->GetChairID();
uint32 dwLeaveUserID = pIClientUserItem->GetUserID();
if (mIClientKernelSink)
{
mIClientKernelSink->OnEventUserLeave(pIClientUserItem, pIClientUserItem->GetUserStatus() == US_LOOKON);
}
if (m_pMeUserItem == pIClientUserItem)
{
m_pMeUserItem = NULL;
}
}
void GameMission::OnUserItemUpdate(IClientUserItem* pIClientUserItem)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagUserInfo * pUserInfo = pIClientUserItem->GetUserInfo();
tagUserInfo * pMeUserInfo = m_pMeUserItem->GetUserInfo();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ
if (pIClientUserItem == m_pMeUserItem)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData = pGlobalUserInfo->GetGlobalUserData();
pGlobalUserData->lUserScore = pIClientUserItem->GetUserScore();
pGlobalUserData->lUserInsure = pIClientUserItem->GetUserInsure();
}
//<2F><>Ϸ֪ͨ
if ((pMeUserInfo->wTableID != INVALID_TABLE) && (pUserInfo->wTableID == pMeUserInfo->wTableID))
{
if (mIClientKernelSink)
{
mIClientKernelSink->OnEventUserScore(pIClientUserItem, pIClientUserItem->GetUserStatus() == US_LOOKON);
}
}
}
void GameMission::OnUserItemUpdate(IClientUserItem* pIClientUserItem, const tagUserStatus& LastStatus)
{
cocos2d::log("GameMission::OnUserItemUpdate\n");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagUserInfo * pUserInfo = pIClientUserItem->GetUserInfo();
tagUserInfo * pMeUserInfo = m_pMeUserItem->GetUserInfo();
uint16 wNowTableID = pIClientUserItem->GetTableID(), wLastTableID = LastStatus.wTableID;
uint16 wNowChairID = pIClientUserItem->GetChairID(), wLastChairID = LastStatus.wChairID;
uint8 cbNowStatus = pIClientUserItem->GetUserStatus(), cbLastStatus = LastStatus.cbUserStatus;
//<2F>뿪֪ͨ
if ((wLastTableID != INVALID_TABLE) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID)))
{
cocos2d::log("GameMission::OnUserItemUpdate_6\n");
//<2F><>Ϸ֪ͨ
if ((pMeUserInfo->wTableID != INVALID_TABLE) && (pUserInfo->wLastTableID == pMeUserInfo->wTableID))
{
if (mIClientKernelSink)
{
mIClientKernelSink->OnEventUserStatus(pIClientUserItem, pIClientUserItem->GetUserStatus() == US_LOOKON);
}
}
}
//<2F><><EFBFBD><EFBFBD><EBB4A6>
if ((wNowTableID == INVALID_TABLE) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID)))
{
if (m_pMeUserItem == pIClientUserItem)
{
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
//OnGFGameClose(0);
CC_ASSERT(g_pGameServerItem != nullptr);
if (g_pGameServerItem->IsGoldRoom())
{
Director::getInstance()->popScene();
return ;
}
}
}
//<2F><><EFBFBD><EFBFBD><EBB4A6>
if ((wNowTableID != INVALID_TABLE) && ((wNowTableID != wLastTableID) || (wNowChairID != wLastChairID)))
{
//<2F>Լ<EFBFBD><D4BC>ж<EFBFBD>
if (m_pMeUserItem == pIClientUserItem)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (mIClientKernelSink)
{
mIClientKernelSink->OnEventUserEnter(pIClientUserItem, pIClientUserItem->GetUserStatus() == US_LOOKON);
}
}
//<2F><>Ϸ֪ͨ
if ((m_pMeUserItem != pIClientUserItem) && (pMeUserInfo->wTableID == wNowTableID))
{
cocos2d::log("GameMission::OnUserItemUpdate_8\n");
ASSERT(wNowChairID != INVALID_CHAIR);
if (mIClientKernelSink)
{
mIClientKernelSink->OnEventUserEnter(pIClientUserItem, pIClientUserItem->GetUserStatus() == US_LOOKON);
}
}
return;
}
//״̬<D7B4>ı<EFBFBD>
if ((wNowTableID != INVALID_TABLE) && (wNowTableID == wLastTableID) && (pMeUserInfo->wTableID == wNowTableID))
{
cocos2d::log("GameMission::OnUserItemUpdate_9\n");
//<2F><>Ϸ֪ͨ
tagUserStatus UserStatus;
UserStatus.wTableID = wNowTableID;
UserStatus.wChairID = wNowChairID;
UserStatus.cbUserStatus = cbNowStatus;
if (mIClientKernelSink)
{
mIClientKernelSink->OnEventUserStatus(pIClientUserItem, pIClientUserItem->GetUserStatus() == US_LOOKON);
}
return;
}
return;
}
//<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
void GameMission::OnUserItemUpdate(IClientUserItem * pIClientUserItem, const tagUserAttrib & UserAttrib)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16 wMeTableID = m_pMeUserItem->GetTableID();
uint16 wUserTableID = pIClientUserItem->GetTableID();
//֪ͨ<CDA8><D6AA>Ϸ
if ((wMeTableID != INVALID_TABLE) && (wMeTableID == wUserTableID))
{
//<2F><><EFBFBD><EFBFBD>֪ͨ
if (mIClientKernelSink)
{
mIClientKernelSink->OnEventUserScore(pIClientUserItem, pIClientUserItem->GetUserStatus() == US_LOOKON);
}
}
return;
}
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::IntermitConnect(bool force)
{
cocos2d::log("GameMission::IntermitConnect1 mServiceStatus = %d\n", mServiceStatus);
if (mServiceStatus == ServiceStatus_Unknow || mServiceStatus == ServiceStatus_NetworkDown)
return false;
//<2F><><EFBFBD><EFBFBD>״̬
cocos2d::log("GameMission::IntermitConnect2");
mServiceStatus = ServiceStatus_NetworkDown;
try
{
stop();
if (mUserManager)
{
mUserManager->ResetUserItem();
}
}
catch (...)
{
}
m_pMeUserItem = nullptr;
mUserManager->ResetUserItem();
return true;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
IClientUserItem* GameMission::GetMeUserItem()
{
return m_pMeUserItem;
}
//<2F><>Ϸ<EFBFBD>û<EFBFBD>
IClientUserItem * GameMission::GetTableUserItem(uint16 wChairID)
{
return mUserManager->EnumUserItem(wChairID);
}
//<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
void GameMission::ConnectServerByKind(uint16 wDataID)
{
CGameServerItem* pServer = CServerListData::getGameServerByKind(wDataID, FindByServerTypeID);
if (pServer)
{
g_pGameServerItem = pServer;
m_wGameKindID = pServer->m_GameServer.wKindID;
setUrl(pServer->m_GameServer.szServerAddr, pServer->m_GameServer.wServerPort);
start();
}
else
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>"));
}
}
//<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
void GameMission::ConnectServerByServerID(uint16 wServerID)
{
CGameServerItem* pServer = CServerListData::shared()->SearchGameServer(wServerID);
if (pServer)
{
g_pGameServerItem = pServer;
m_wGameKindID = pServer->m_GameServer.wKindID;
setUrl(pServer->m_GameServer.szServerAddr, pServer->m_GameServer.wServerPort);
start();
}
else
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
}
}
//ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::PerformStandUpAction()
{
cocos2d::log("GameMission::PerformStandUpAction...\n");
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if (mServiceStatus != ServiceStatus_ServiceIng) return false;
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
cocos2d::log("GameMission::PerformStandUpAction send\n");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendStandUpPacket(m_pMeUserItem->GetTableID(), m_pMeUserItem->GetChairID(), FALSE);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::SendSitDownPacket(uint16 wTableID, uint16 wChairID, const char* lpszPassword)
{
CMD_GR_UserSitDown UserSitReq;
zeromemory(&UserSitReq, 0);
memset(&UserSitReq, 0, sizeof(UserSitReq));
UserSitReq.wTableID = wTableID;
UserSitReq.wChairID = wChairID;
if (lpszPassword)
{
strcpy(UserSitReq.szTablePass, lpszPassword);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
SendSocketData(MDM_GR_USER, SUB_GR_USER_SITDOWN, &UserSitReq, sizeof(UserSitReq));
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool GameMission::SendStandUpPacket(uint16 wTableID, uint16 wChairID, uint8 cbForceLeave)
{
CMD_GR_UserStandUp UserStandUp;
zeromemory(&UserStandUp, sizeof(UserStandUp));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UserStandUp.wTableID = wTableID;
UserStandUp.wChairID = wChairID;
UserStandUp.cbForceLeave = cbForceLeave;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendSocketData(MDM_GR_USER, SUB_GR_USER_STANDUP, &UserStandUp, sizeof(UserStandUp));
return true;
}
//<2F><>Ϸ<EFBFBD><CFB7>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>
void GameMission::OnGFGameOption()
{
cocos2d::log("GameMission::OnGFGameOption\n");
//<2F><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>λ<EFBFBD><CEBB>;
tagUserAddr* pUserAddr = CGlobalUserInfo::GetInstance()->GetUserAddr();
if (pUserAddr && pUserAddr->isInit)
{
cocos2d::log("SUB_GF_USER_LOCATION...\n");
CMD_GF_C_UserLocation _location;
zeromemory(&_location, sizeof(_location));
_location.lLatitude = pUserAddr->latitude * DOUBLE_TO_SCORE;
_location.lLongitude = pUserAddr->longitude * DOUBLE_TO_SCORE;
_location.lAccuracy = pUserAddr->accuracy * DOUBLE_TO_SCORE;
strncpy(_location.szAddress, pUserAddr->strAddress.c_str(), countarray(_location.szAddress));
//std::string strInfo = cocos2d::StringUtils::format("%ld, %ld, %ld, %s", _location.lLatitude, _location.lLongitude,
// _location.lAccuracy, _location.szAddress);
//cocos2d::log(strInfo.c_str());
SendSocketData(MDM_GF_FRAME, SUB_GF_USER_LOCATION, &_location, sizeof(_location));
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16 wTableID = m_pMeUserItem->GetTableID();
uint16 wChairID = m_pMeUserItem->GetChairID();
mUserAttribute.wChairID = wChairID;
mUserAttribute.wTableID = wTableID;
CMD_GF_GameOption GameOption;
zeromemory(&GameOption, sizeof(GameOption));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GameOption.dwFrameVersion = VERSION_FRAME;
GameOption.cbAllowLookon = 0;
GameOption.dwClientVersion = Helps::Instance()->GetGameVersion();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendSocketData(MDM_GF_FRAME, SUB_GF_GAME_OPTION, &GameOption, sizeof(GameOption));
//mIsGameReady = true;
}
//<2F><>Ϸ<EFBFBD>ر<EFBFBD>
void GameMission::OnGFGameClose(int iExitCode)
{
cocos2d::log("GameMission::OnGFGameClose %d\n", iExitCode);
if (!m_pMeUserItem)
{
return;
}
//Ч<><D0A7>״̬
ASSERT(m_pMeUserItem != 0);
if (m_pMeUserItem == 0) return;
//mIsGameReady = false;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8 cbUserStatus = m_pMeUserItem->GetUserStatus();
mUserAttribute.wChairID = INVALID_CHAIR;
mUserAttribute.wTableID = INVALID_TABLE;
if (iExitCode == ServiceStatus_NetworkDown)
{
mServiceStatus = ServiceStatus_NetworkDown;
}
//if (mIClientKernelSink)
//{
// mIClientKernelSink->CloseGameClient();
// mIClientKernelSink = NULL;
//}
}
void GameMission::SetServerItem(CGameServerItem* pServerItem)
{
g_pGameServerItem = pServerItem;
m_wGameKindID = pServerItem->m_GameServer.wKindID;
setUrl(pServerItem->m_GameServer.szServerAddr, pServerItem->m_GameServer.wServerPort);
}
// <20><>Ϸ¼<CFB7><C2BC>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>ҽ<EFBFBD><D2BD><EFBFBD>;
void GameMission::InitRecordGamePlayer(uint16 wChairID, tagGameRecordPlayer& kRecordPlayer)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagUserInfo kUserInfo;
tagCustomFaceInfo CustomFaceInfo;
zeromemory(&kUserInfo, sizeof(kUserInfo));
zeromemory(&CustomFaceInfo, sizeof(CustomFaceInfo));
// <20><>ֵ;
kUserInfo.dwUserID = kRecordPlayer.dwUserID;
kUserInfo.dwGameID = kRecordPlayer.dwGameID;
kUserInfo.cbGender = kRecordPlayer.cbSex;
kUserInfo.lScore = kRecordPlayer.lScore;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ʹ<EFBFBD><CAB9>GamePlayer<65><72>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
kUserInfo.wTableID = 0;
kUserInfo.wChairID = wChairID;
kUserInfo.cbUserStatus = US_SIT;
strcpy(kUserInfo.szNickName, kRecordPlayer.strNickName.c_str());
strcpy(kUserInfo.szHeadHttp, kRecordPlayer.strHead.c_str());
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
IClientUserItem * pIClientUserItem = mUserManager->SearchUserByUserID(kUserInfo.dwUserID);
pIClientUserItem = mUserManager->ActiveUserItem(kUserInfo, CustomFaceInfo);
CMD_GR_UserStatus userStatus;
userStatus.dwUserID = kRecordPlayer.dwUserID;
userStatus.UserStatus.wTableID = 0;
userStatus.UserStatus.wChairID = wChairID;
userStatus.UserStatus.cbUserStatus = US_PLAYING;
OnSocketSubUserStatus(&userStatus, sizeof(CMD_GR_UserStatus));
}