Files
wnmj/Classes/Mission/PrivateMission.cpp

452 lines
10 KiB
C++
Raw Normal View History

2026-02-13 14:34:15 +08:00
#include "PrivateMission.h"
#include "PopScene.h"
#include "Utility.h"
#include "JniFun.h"
PrivateMission::PrivateMission()
{
m_pGameServerItem = nullptr;
m_wMeTableID = INVALID_TABLE;
m_wMeChairID = INVALID_CHAIR;
zeromemory(&m_kCreatePrivateNet, sizeof(m_kCreatePrivateNet));
zeromemory(&m_kAutoRoomInfo, sizeof(m_kAutoRoomInfo));
zeromemory(&m_kDelAutoRoomInfo, sizeof(CMD_GP_DelAutoRoomInfo));
}
// <20><><EFBFBD>ûص<C3BB><D8B5>ӿ<EFBFBD>
void PrivateMission::setMissionSink(IPrivateMissionSink* pSink)
{
m_pPrivateMissionSink = pSink;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void PrivateMission::onEventTCPSocketLink()
{
SendLogonPacket();
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
void PrivateMission::onEventTCPSocketShut()
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void PrivateMission::onEventTCPSocketError(int errorCode)
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ
bool PrivateMission::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><C3BB><EFBFBD>Ϣ
case MDM_GR_USER: return OnSocketMainUser(sub, data, dataSize);
//ϵͳ<CFB5><CDB3>Ϣ
case MDM_CM_SYSTEM: return OnSocketMainSystem(sub, data, dataSize);
//˽<>˳<EFBFBD><CBB3><EFBFBD>Ϣ
case MDM_GR_PRIVATE:return OnSocketMainPrivate(sub, data, dataSize);
default:
break;
}
return true;
}
//<2F><>¼<EFBFBD><C2BC>Ϣ
bool PrivateMission::OnSocketMainLogon(int sub, void* data, int dataSize)
{
switch (sub)
{
case SUB_GR_LOGON_FINISH:
{
if (m_wMeTableID != INVALID_TABLE)
{
EnterGameScene();
return true;
}
if (m_eLinkAction == Type_Link_Create)
{
SendSocketData(MDM_GR_PRIVATE, SUB_GR_CREATE_PRIVATE, &m_kCreatePrivateNet, sizeof(m_kCreatePrivateNet));
zeromemory(&m_kCreatePrivateNet, sizeof(m_kCreatePrivateNet));
}
else if (m_eLinkAction == Type_Link_Join)
{
CMD_GR_Join_Private kSendNet;
kSendNet.dwRoomNum = m_dwJoinRoomNum;
SendSocketData(MDM_GR_PRIVATE, SUB_GR_JOIN_PRIVATE, &kSendNet, sizeof(kSendNet));
}
else if (Type_Link_Auto == m_eLinkAction)
{
SendSocketData(MDM_GR_PRIVATE, SUB_GR_CREATE_AUTO_ROOM, &m_kAutoRoomInfo, sizeof(m_kAutoRoomInfo));
zeromemory(&m_kAutoRoomInfo, sizeof(m_kAutoRoomInfo));
}
else if (Type_Link_Del == m_eLinkAction)
{
SendSocketData(MDM_GR_PRIVATE, SUB_GR_DEL_AUTO_ROOM_INFO, &m_kDelAutoRoomInfo, sizeof(m_kDelAutoRoomInfo));
zeromemory(&m_kDelAutoRoomInfo, sizeof(m_kDelAutoRoomInfo));
}
m_eLinkAction = Type_Link_NULL;
}
break;
case SUB_GR_LOGON_FAILURE:
{
CMD_GR_LogonError* pGameServer = (CMD_GR_LogonError*)data;
PopScene::Instance().show(utility::a_u8(pGameServer->szErrorDescribe));
}
break;
case SUB_GR_UPDATE_NOTIFY:
{
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);
this->stop();
}
break;
default:
break;
}
return true;
}
//<2F>û<EFBFBD><C3BB><EFBFBD>Ϣ
bool PrivateMission::OnSocketMainUser(int sub, void* data, int dataSize)
{
if (sub == SUB_GR_USER_ENTER)
{
tagUserInfoHead* pUserInfoHead = (tagUserInfoHead*)data;
if (pUserInfoHead->dwUserID == m_dwMeUserID)
{
m_wMeTableID = pUserInfoHead->wTableID;
m_wMeChairID = pUserInfoHead->wChairID;
}
}
else if (sub == SUB_GR_USER_STATUS)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMD_GR_UserStatus * pUserStatus = (CMD_GR_UserStatus *)data;
if (pUserStatus->dwUserID == m_dwMeUserID &&
(pUserStatus->UserStatus.wTableID != INVALID_TABLE || pUserStatus->UserStatus.wChairID != INVALID_CHAIR))
{
EnterGameScene();
}
}
else if (sub == SUB_GR_SIT_FAILED)
{
//<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(a_u8c(pRequestFailure->szDescribeString));
this->stop();
}
return true;
}
//ϵͳ<CFB5><CDB3>Ϣ
bool PrivateMission::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 PrivateMission::OnSocketSubSystemMessage(void* data, int wDataSize)
{
cocos2d::log(("PrivateMission::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;
this->stop();
PopScene::Instance().show(utility::a_u8(pSystemMessage->szString));
return true;
}
//
bool PrivateMission::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_HAS_CREATED:
{
EnterGameScene();
return true;
}
case SUB_GR_CREATE_AUTO_RESULTE:
{
return OnSocketSubCreateAutoResulte(data, dataSize);
}
case SUB_GR_DEL_AUTO_ROOM_INFO:
{
return OnSocketSubDelAutoResulte(data, dataSize);
}
case SUB_GR_AUTO_USER_READY:
{
return OnSocketSubAutoUserReady(data, dataSize);
}
}
return true;
}
//void PrivateMission::SendPrivateAgagin()
//{
// CMD_GR_Again_Private kNetInfo;
// SendSocketData(MDM_GR_PRIVATE, SUB_GR_RRIVATE_AGAIN, &kNetInfo, sizeof(kNetInfo));
//}
//
bool PrivateMission::OnSocketSubPrivateInfo(void* data, int dataSize)
{
cocos2d::log("PrivateMission::OnSocketSubPrivateInfo\n");
CMD_GR_Private_Info *pNetInfo = (CMD_GR_Private_Info*)data;
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
bool PrivateMission::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;
// <20>޸Ĵ<DEB8><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿͻ<C9BF><CDBB><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ(zhangxw 2017-08-24);
CMD_GR_Join_Private kSendNet;
kSendNet.dwRoomNum = pNetInfo->dwRoomNum;
SendSocketData(MDM_GR_PRIVATE, SUB_GR_JOIN_PRIVATE, &kSendNet, sizeof(kSendNet));
//EnterGameScene();
return true;
}
//˽<>˳<EFBFBD><CBB3><EFBFBD>Ϣ
bool PrivateMission::OnSocketSubPrivateRoomInfo(void* data, int dataSize)
{
cocos2d::log("PrivateMission::OnSocketSubPrivateRoomInfo\n");
DataStream kDataStream(data, dataSize);
CMD_GF_Private_Room_Info kNetInfo;
kNetInfo.StreamValue(kDataStream, false);
EnterGameScene();
return true;
}
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
bool PrivateMission::SendSocketData(uint16 wMainCmdID, uint16 wSubCmdID)
{
return SendSocketData(wMainCmdID, wSubCmdID, 0, 0);
}
//<2F><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
bool PrivateMission::SendSocketData(uint16 wMainCmdID, uint16 wSubCmdID, void * data, uint16 dataSize)
{
return send(wMainCmdID, wSubCmdID, (unsigned char*)data, dataSize);
}
//<2F><><EFBFBD>͵<EFBFBD>¼
bool PrivateMission::SendLogonPacket()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CGlobalUserInfo * pGlobalUserInfo = CGlobalUserInfo::GetInstance();
tagGlobalUserData * pGlobalUserData = pGlobalUserInfo->GetGlobalUserData();
m_dwMeUserID = pGlobalUserData->dwUserID;
//<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 = m_dwMeUserID;
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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool PrivateMission::onEventTCPHeartTick()
{
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
void PrivateMission::EnterGameScene()
{
stop();
if (m_pPrivateMissionSink)
{
m_pPrivateMissionSink->StartGameScene(m_pGameServerItem);
}
}
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void PrivateMission::SetCreateInfo(CMD_GR_Create_Private* pInfo)
{
memcpy(&m_kCreatePrivateNet, pInfo, sizeof(CMD_GR_Create_Private));
m_eLinkAction = Type_Link_Create;
}
//<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void PrivateMission::SetCreateAutoInfo(CMD_GR_AutoRoomInfo* pInfo)
{
memcpy(&m_kAutoRoomInfo, pInfo, sizeof(CMD_GR_AutoRoomInfo));
m_eLinkAction = Type_Link_Auto;
}
//<2F><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void PrivateMission::SetDelAutoInfo(CMD_GP_DelAutoRoomInfo* pInfo)
{
memcpy(&m_kDelAutoRoomInfo, pInfo, sizeof(CMD_GP_DelAutoRoomInfo));
m_eLinkAction = Type_Link_Del;
}
//<2F><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>˽<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void PrivateMission::SetJoinInfo(uint32 dwJoinRoomNum)
{
m_dwJoinRoomNum = dwJoinRoomNum;
m_eLinkAction = Type_Link_Join;
}
//<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
void PrivateMission::ConnectServerByServerID(uint16 wServerID)
{
CGameServerItem* pServer = CServerListData::shared()->SearchGameServer(wServerID);
ConnectServer(pServer, true);
}
//<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
void PrivateMission::ConnectServer(CGameServerItem* pServerItem, bool bServerID/* = false*/)
{
if (pServerItem)
{
m_pGameServerItem = pServerItem;
m_wGameKindID = pServerItem->m_GameServer.wKindID;
setUrl(pServerItem->m_GameServer.szServerAddr, pServerItem->m_GameServer.wServerPort);
start();
}
else
{
if (bServerID)
{
PopScene::Instance().show(utility::a_u8("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
}
else
{
PopScene::Instance().show(a_u8c("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>"));
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
bool PrivateMission::OnSocketSubCreateAutoResulte(void* data, int dataSize)
{
stop();
ASSERT(dataSize >= sizeof(SCORE));
if (dataSize < sizeof(SCORE)) return false;
CMD_GR_AutoResulte *pNetInfo = (CMD_GR_AutoResulte*)data;
if (m_pPrivateMissionSink)
{
m_pPrivateMissionSink->CreateAutoRoomInfoResulte(pNetInfo);
}
return true;
}
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
bool PrivateMission::OnSocketSubDelAutoResulte(void* data, int dataSize)
{
stop();
ASSERT(dataSize >= sizeof(SCORE));
if (dataSize < sizeof(SCORE)) return false;
CMD_GR_AutoResulte *pNetInfo = (CMD_GR_AutoResulte*)data;
if (m_pPrivateMissionSink)
{
m_pPrivateMissionSink->CreateAutoRoomInfoResulte(pNetInfo);
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ״̬;
bool PrivateMission::OnSocketSubAutoUserReady(void* data, int dataSize)
{
return true;
}