void CTaxasRoom::writeGameResultLog() { LOGFMTD("write game result dlg"); stMsgSaveLog saveMsg ; saveMsg.nLogType = eLog_TaxasGameResult ; saveMsg.nTargetID = getRoomID(); saveMsg.vArg[0] = 0; for ( uint8_t nIdx = 0 ; nIdx < TAXAS_PUBLIC_CARD; ++nIdx ) { saveMsg.vArg[nIdx+1] = m_vPublicCardNums[nIdx]; } for ( uint8_t nIdx = 0 ; nIdx < MAX_PEERS_IN_TAXAS_ROOM ; ++nIdx ) { writePlayerResultLogToJson((CTaxasPlayer*)getPlayerByIdx(nIdx)) ; } Json::StyledWriter write ; std::string str = write.write(m_arrPlayers); CAutoBuffer auBuffer (sizeof(saveMsg) + str.size()); saveMsg.nJsonExtnerLen = str.size() ; auBuffer.addContent((char*)&saveMsg,sizeof(saveMsg)) ; auBuffer.addContent(str.c_str(),str.size()); CTaxasServerApp::SharedGameServerApp()->sendMsg(getRoomID(),auBuffer.getBufferPtr(),auBuffer.getContentSize()) ; LOGFMTD("all player info json str = %s" , str.c_str()); }
void CNiuNiuRoom::onGameDidEnd() { stMsgSaveLog msgSaveLog ; msgSaveLog.nLogType = eLog_NiuNiuGameResult ; msgSaveLog.nTargetID = getRoomID() ; msgSaveLog.nJsonExtnerLen = 0 ; memset(msgSaveLog.vArg,0,sizeof(msgSaveLog.vArg)); msgSaveLog.vArg[0] = 0;//getPlayerByIdx(m_nBankerIdx)->getUserUID(); msgSaveLog.vArg[1] = m_nBetBottomTimes ; msgSaveLog.vArg[2] = getBaseBet() * m_nBetBottomTimes ; m_arrPlayers.clear() ; /*m_nBankerIdx = 0 ; m_nBankerCoinLimitForBet = 0 ; m_nBetBottomTimes = 0 ;*/ uint8_t nSeatCnt = (uint8_t)getSeatCount() ; for ( uint8_t nIdx = 0; nIdx < nSeatCnt; ++nIdx ) { ISitableRoomPlayer* pSitDown = getPlayerByIdx(nIdx) ; if ( pSitDown == nullptr ) { continue; } // write to log if ( pSitDown->isHaveState(eRoomPeer_CanAct) ) { CNiuNiuRoomPlayer* pNiuPlayer = (CNiuNiuRoomPlayer*)pSitDown ; Json::Value refPlayer ; refPlayer["uid"] = pNiuPlayer->getUserUID() ; refPlayer["idx"] = pNiuPlayer->getIdx(); refPlayer["betTimes"] = pNiuPlayer->getBetTimes() <= 0 ? 5 : pNiuPlayer->getBetTimes(); refPlayer["card0"] = pNiuPlayer->getCardByIdx(0); refPlayer["card1"] = pNiuPlayer->getCardByIdx(1); refPlayer["card2"] = pNiuPlayer->getCardByIdx(2); refPlayer["card3"] = pNiuPlayer->getCardByIdx(3); refPlayer["card4"] = pNiuPlayer->getCardByIdx(4); refPlayer["offset"] = 0 ;//pNiuPlayer->getCoinOffsetThisGame() ; refPlayer["coin"] = (int32_t)pNiuPlayer->getCoin() ; m_arrPlayers[pNiuPlayer->getIdx()] = refPlayer ; } //pSitDown->removeState(eRoomPeer_CanAct); } Json::StyledWriter write ; std::string str = write.write(m_arrPlayers); CAutoBuffer auBuffer (sizeof(msgSaveLog) + str.size()); msgSaveLog.nJsonExtnerLen = str.size() ; auBuffer.addContent((char*)&msgSaveLog,sizeof(msgSaveLog)) ; auBuffer.addContent(str.c_str(),str.size()); sendMsgToPlayer((stMsg*)auBuffer.getBufferPtr(),auBuffer.getContentSize(),getRoomID()) ; ISitableRoom::onGameDidEnd(); LOGFMTD("room game End"); }
void CPlayerGameData::TimerSave() { for ( uint8_t nIdx = eRoom_None; nIdx < eRoom_Max ; ++nIdx ) { auto& gameData = m_vData[nIdx] ; if ( gameData.bDirty == false ) { continue; } gameData.bDirty = false ; Json::Value jsValue ; jsValue["gameType"] = nIdx ; Json::Value jsData ; jsData["nWinTimes"] = gameData.nWinTimes ; jsData["nChampionTimes"] = gameData.nChampionTimes ; jsData["nPlayTimes"] = gameData.nPlayTimes ; jsData["nRun_upTimes"] = gameData.nRun_upTimes ; jsData["nSingleWinMost"] = (uint32_t)gameData.nSingleWinMost ; jsData["nThird_placeTimes"] = gameData.nThird_placeTimes ; Json::Value jsMaxCard ; for ( uint8_t nCardIdx = 0 ; nCardIdx < MAX_TAXAS_HOLD_CARD ; ++nCardIdx ) { jsMaxCard[nCardIdx] = gameData.vMaxCards[nCardIdx] ; } jsData["vMaxCards"] = jsMaxCard ; jsValue["data"] = jsData ; Json::StyledWriter jsWrite ; std::string str = jsWrite.write(jsValue) ; stMsgSavePlayerGameData msgSave ; msgSave.nGameType = nIdx ; msgSave.nUserUID = GetPlayer()->GetUserUID() ; msgSave.nJsonLen = str.size() ; CAutoBuffer auBuffer ( sizeof(msgSave) + msgSave.nJsonLen ); auBuffer.addContent(&msgSave,sizeof(msgSave)) ; auBuffer.addContent(str.c_str(),msgSave.nJsonLen) ; SendMsg((stMsg*)auBuffer.getBufferPtr(),auBuffer.getContentSize()) ; } }
bool CPlayerGameData::OnMessage( stMsg* pMessage , eMsgPort eSenderPort) { if ( IPlayerComponent::OnMessage(pMessage,eSenderPort) ) { return true ; } switch ( pMessage->usMsgType ) { case MSG_PLAYER_ENTER_ROOM: { stMsgPlayerEnterRoom* pRet = (stMsgPlayerEnterRoom*)pMessage ; if ( isNotInAnyRoom() ) { stMsgSvrEnterRoom msgEnter ; msgEnter.cSysIdentifer = GetPlayer()->getMsgPortByRoomType(pRet->nRoomGameType) ; if ( msgEnter.cSysIdentifer == ID_MSG_PORT_NONE ) { stMsgPlayerEnterRoomRet msgRet ; msgRet.nRet = 6; SendMsg(&msgRet,sizeof(msgRet)) ; LOGFMTE("player uid = %d enter game , can not find game port type = %d ",GetPlayer()->GetUserUID(), pRet->nRoomGameType ) ; break; } msgEnter.nRoomID = pRet->nRoomID ; msgEnter.nSubIdx = pRet->nSubIdx ; msgEnter.tPlayerData.isRegisted = GetPlayer()->GetBaseData()->isPlayerRegistered() ; msgEnter.tPlayerData.nCoin = GetPlayer()->GetBaseData()->getCoin() ; msgEnter.tPlayerData.nUserSessionID = GetPlayer()->GetSessionID() ; msgEnter.tPlayerData.nUserUID = GetPlayer()->GetUserUID() ; msgEnter.tPlayerData.nNewPlayerHaloWeight = GetPlayer()->GetBaseData()->getNewPlayerHaloWeight() ; msgEnter.tPlayerData.nPlayerType = GetPlayer()->GetBaseData()->getPlayerType(); CGameServerApp::SharedGameServerApp()->sendMsg(msgEnter.tPlayerData.nUserSessionID,(char*)&msgEnter,sizeof(msgEnter)) ; m_nStateInRoomID = pRet->nRoomID; LOGFMTD("player uid = %d enter to enter room id = %d ,coin = %u", GetPlayer()->GetUserUID(), m_nStateInRoomID,msgEnter.tPlayerData.nCoin ) ; } else { stMsgPlayerEnterRoomRet msgRet ; msgRet.nRet = 1; SendMsg(&msgRet,sizeof(msgRet)) ; LOGFMTD("player uid = %d already in room , id = %d ", GetPlayer()->GetUserUID() ,m_nStateInRoomID ) ; } } break; case MSG_SVR_ENTER_ROOM: { stMsgSvrEnterRoomRet* pRet = (stMsgSvrEnterRoomRet*)pMessage ; stMsgPlayerEnterRoomRet msgRet ; msgRet.nRet = pRet->nRet; SendMsg(&msgRet,sizeof(msgRet)) ; if ( msgRet.nRet ) // enter room failed ; { m_nStateInRoomID = 0; m_nSubRoomIdx = 0 ; LOGFMTD("player enter room failed ret = %d uid = %d",msgRet.nRet,GetPlayer()->GetUserUID()) ; } else { m_nStateInRoomID = pRet->nRoomID; m_nSubRoomIdx = (uint8_t)pRet->nSubIdx ; LOGFMTD("player do enter oom id = %d uid = %d subIdx = %u",m_nStateInRoomID,GetPlayer()->GetUserUID(),m_nSubRoomIdx) ; } } break; case MSG_SVR_DO_LEAVE_ROOM: { m_nStateInRoomID = 0; stMsgSvrDoLeaveRoom* pRet = (stMsgSvrDoLeaveRoom*)pMessage ; LOGFMTD("uid = %d leave room coin = %u , back coin = %lld, temp coin = %u",GetPlayer()->GetUserUID(),GetPlayer()->GetBaseData()->getCoin(),pRet->nCoin,GetPlayer()->GetBaseData()->getTempCoin() ) ; GetPlayer()->GetBaseData()->setCoin(pRet->nCoin + GetPlayer()->GetBaseData()->getTempCoin()) ; GetPlayer()->GetBaseData()->setTempCoin(0) ; GetPlayer()->GetBaseData()->addTodayGameCoinOffset(pRet->nGameOffset); m_vData[pRet->nGameType].nPlayTimes += pRet->nPlayerTimes ; m_vData[pRet->nGameType].nWinTimes += pRet->nWinTimes ; if ( m_vData[pRet->nGameType].nSingleWinMost < pRet->nSingleWinMost ) { m_vData[pRet->nGameType].nSingleWinMost = pRet->nSingleWinMost ; } if ( pRet->nPlayerTimes != 0 ) { m_vData[pRet->nGameType].bDirty = true ; } // decrease halo weight if ( GetPlayer()->GetBaseData()->getNewPlayerHaloWeight() >= pRet->nPlayerTimes ) { GetPlayer()->GetBaseData()->setNewPlayerHalo(GetPlayer()->GetBaseData()->getNewPlayerHaloWeight() - pRet->nPlayerTimes ); } else { GetPlayer()->GetBaseData()->setNewPlayerHalo(0); } LOGFMTD("uid = %d do leave room final coin = %u, playertimes = %u , wintimes = %u ,offset = %d",GetPlayer()->GetUserUID(), GetPlayer()->GetBaseData()->getCoin(),pRet->nPlayerTimes,pRet->nWinTimes,pRet->nGameOffset) ; stMsg msg ; msg.usMsgType = MSG_PLAYER_UPDATE_MONEY ; GetPlayer()->GetBaseData()->OnMessage(&msg,ID_MSG_PORT_CLIENT) ; } break; case MSG_SVR_DELAYED_LEAVE_ROOM: { stMsgSvrDelayedLeaveRoom* pRet = (stMsgSvrDelayedLeaveRoom*)pMessage ; if ( isNotInAnyRoom() ) { GetPlayer()->GetBaseData()->setCoin( pRet->nCoin + GetPlayer()->GetBaseData()->getCoin() ) ; LOGFMTD("player not enter other room just uid = %d add coin = %lld, final = %u,",GetPlayer()->GetUserUID(),pRet->nCoin,GetPlayer()->GetBaseData()->getCoin()) ; } else { GetPlayer()->GetBaseData()->setTempCoin(GetPlayer()->GetBaseData()->getTempCoin() + pRet->nCoin) ; LOGFMTD("player enter other room so uid = %d add temp = %lld, final = %u,",GetPlayer()->GetUserUID(),pRet->nCoin,GetPlayer()->GetBaseData()->getTempCoin(),GetPlayer()->GetBaseData()->getCoin() ) ; } GetPlayer()->GetBaseData()->addTodayGameCoinOffset(pRet->nGameOffset); m_vData[pRet->nGameType].nPlayTimes += pRet->nPlayerTimes ; m_vData[pRet->nGameType].nWinTimes += pRet->nWinTimes ; if ( m_vData[pRet->nGameType].nSingleWinMost < pRet->nSingleWinMost ) { m_vData[pRet->nGameType].nSingleWinMost = pRet->nSingleWinMost ; } if ( pRet->nPlayerTimes != 0 ) { m_vData[pRet->nGameType].bDirty = true ; } LOGFMTD("uid = %d delay leave room coin = %u",GetPlayer()->GetUserUID(), GetPlayer()->GetBaseData()->getCoin()) ; stMsg msg ; msg.usMsgType = MSG_PLAYER_UPDATE_MONEY ; GetPlayer()->GetBaseData()->OnMessage(&msg,ID_MSG_PORT_CLIENT) ; } break; case MSG_PLAYER_REQUEST_GAME_RECORDER: { stMsgPlayerRequestGameRecorderRet msgRet ; msgRet.nCnt = m_vGameRecorders.size() < 12 ? m_vGameRecorders.size() : 12 ; CAutoBuffer auBuffer (sizeof(msgRet) + sizeof(stRecorderItem) * msgRet.nCnt ); auBuffer.addContent(&msgRet,sizeof(msgRet)) ; auto iter = m_vGameRecorders.begin() ; for ( uint8_t nIdx = 0 ; iter != m_vGameRecorders.end() && nIdx < msgRet.nCnt ; ++nIdx ,++iter ) { stRecorderItem rItem ; rItem.nBuyIn = (*iter)->nBuyIn ; rItem.nCreateUID = (*iter)->nCreateUID ; rItem.nDuiringSeconds = (*iter)->nDuiringSeconds ; rItem.nFinishTime = (*iter)->nFinishTime ; rItem.nOffset = (*iter)->nOffset ; rItem.nRoomID = (*iter)->nRoomID ; rItem.nBaseBet = (*iter)->nBaseBet ; rItem.nClubID = (*iter)->nClubID ; memcpy(rItem.cRoomName,(*iter)->cRoomName,sizeof(rItem.cRoomName)); auBuffer.addContent(&rItem,sizeof(rItem)) ; // delete sended recorder ; delete (*iter) ; (*iter) = nullptr ; } m_vGameRecorders.clear() ; SendMsg((stMsg*)auBuffer.getBufferPtr(),auBuffer.getContentSize()) ; LOGFMTD("send game recorder cnt = %u , uid = %u",msgRet.nCnt,GetPlayer()->GetUserUID() ) ; } break ; case MSG_READ_PLAYER_GAME_DATA: { stMsgReadPlayerGameDataRet* pRet = (stMsgReadPlayerGameDataRet*)pMessage ; Json::Reader jsReader ; Json::Value jsValue ; char* pBuffer = (char*)pRet ; pBuffer += sizeof(stMsgReadPlayerGameDataRet); jsReader.parse(pBuffer,pBuffer + pRet->nJsonLen,jsValue ) ; if ( jsValue.empty() ) { LOGFMTD("this player have no game data uid = %u",GetPlayer()->GetUserUID()) ; break ; } for ( uint8_t nIdx = 0 ; nIdx < jsValue.size() ; ++nIdx ) { Json::Value jsGameData = jsValue[nIdx] ; if ( jsGameData.isNull() == true || jsGameData["gameType"].isNull() ) { LOGFMTD("why player id = %u , game data is null idx = %u",GetPlayer()->GetUserUID(),nIdx) ; continue; } eRoomType eType = (eRoomType)jsGameData["gameType"].asUInt(); Json::Value jsData = jsGameData["data"] ; if ( eType >= eRoom_Max || jsData.isNull() == true ) { LOGFMTE("player uid = %u , game data type invalid type = %u ",GetPlayer()->GetUserUID(),eType); continue; } m_vData[eType].bDirty = false ; m_vData[eType].nChampionTimes = jsData["nChampionTimes"].asUInt() ; m_vData[eType].nPlayTimes = jsData["nPlayTimes"].asUInt() ; m_vData[eType].nRun_upTimes = jsData["nRun_upTimes"].asUInt() ; m_vData[eType].nSingleWinMost = jsData["nSingleWinMost"].asUInt() ; m_vData[eType].nThird_placeTimes = jsData["nThird_placeTimes"].asUInt() ; m_vData[eType].nWinTimes = jsData["nWinTimes"].asUInt() ; Json::Value jsMaxCard = jsData["jsMaxCard"]; for ( uint8_t nIdx = 0 ; nIdx < jsMaxCard.size() && nIdx < MAX_TAXAS_HOLD_CARD ; ++nIdx ) { m_vData[eType].vMaxCards[nIdx] = jsData[nIdx].asUInt() ; } } LOGFMTD("finish read player game data uid = %u" , GetPlayer()->GetUserUID()) ; } break; case MSG_READ_PLAYER_GAME_RECORDER: { stMsgReadPlayerGameRecorderRet* pRet = (stMsgReadPlayerGameRecorderRet*)pMessage ; stPlayerGameRecorder* pRecorder = new stPlayerGameRecorder ; pRecorder->nDuiringSeconds = pRet->nDuiringSeconds ; pRecorder->nFinishTime = pRet->nFinishTime ; pRecorder->nOffset = pRet->nOffset ; pRecorder->nRoomID = pRet->nRoomID ; pRecorder->nCreateUID = pRet->nCreateUID ; pRecorder->nBuyIn = pRet->nBuyIn ; pRecorder->nBaseBet = pRet->nBaseBet ; pRecorder->nClubID = pRet->nClubID ; memcpy(pRecorder->cRoomName,pRet->cRoomName,sizeof(pRet->cRoomName)); //LOGFMTD("read basebet = %u ",pRet->nBaseBet) ; addPlayerGameRecorder(pRecorder,false); } break ; case MSG_SYNC_PRIVATE_ROOM_RESULT: { stMsgSyncPrivateRoomResult* pRet = (stMsgSyncPrivateRoomResult*)pMessage ; stPlayerGameRecorder* pRecorder = new stPlayerGameRecorder ; pRecorder->nDuiringSeconds = pRet->nDuringTimeSeconds ; pRecorder->nFinishTime = time(nullptr) ; pRecorder->nOffset = pRet->nOffset ; pRecorder->nRoomID = pRet->nRoomID ; pRecorder->nCreateUID = pRet->nCreatorUID ; pRecorder->nBuyIn = pRet->nBuyIn ; pRecorder->nBaseBet = pRet->nBaseBet ; pRecorder->nClubID = pRet->nClubID ; memcpy(pRecorder->cRoomName,pRet->cRoomName,sizeof(pRet->cRoomName)); addPlayerGameRecorder(pRecorder) ; // process coin ; if ( isNotInAnyRoom() ) { GetPlayer()->GetBaseData()->setCoin( pRet->nFinalCoin + GetPlayer()->GetBaseData()->getCoin() ) ; LOGFMTD("sync private Room coin player not enter other room just uid = %d add coin = %u, final = %u,",GetPlayer()->GetUserUID(),pRet->nFinalCoin,GetPlayer()->GetBaseData()->getCoin()) ; } else { GetPlayer()->GetBaseData()->setTempCoin(GetPlayer()->GetBaseData()->getTempCoin() + pRet->nFinalCoin) ; LOGFMTD("sync private Room coin player enter other room so uid = %d add temp = %u, final = %u,",GetPlayer()->GetUserUID(),pRet->nFinalCoin,GetPlayer()->GetBaseData()->getTempCoin(),GetPlayer()->GetBaseData()->getCoin() ) ; } } break ; case MSG_READ_PLAYER_TAXAS_DATA: { stMsgReadPlayerTaxasDataRet* pRet = (stMsgReadPlayerTaxasDataRet*)pMessage ; if ( pRet->nRet ) { LOGFMTE("uid = %d read taxas data error",pRet->nUserUID); return true ; } auto& gdata = m_vData[eRoom_TexasPoker] ; gdata.bDirty = false ; memcpy(&gdata,&pRet->tData,sizeof(pRet->tData)) ; LOGFMTD("uid taxas data , owner rooms = "); sendGameDataToClient(); } break; case MSG_REQUEST_MY_OWN_ROOMS: { stMsgRequestMyOwnRooms* pRet = (stMsgRequestMyOwnRooms*)pMessage ; if ( pRet->nRoomType >= eRoom_Max ) { return false; } //stMsgRequestMyOwnRoomsRet msgRet ; //msgRet.nRoomType = pRet->nRoomType ; //msgRet.nCnt = 0 ; //if ( msgRet.nCnt == 0 ) //{ // SendMsg(&msgRet,sizeof(msgRet)) ; // return true ; //} //CAutoBuffer autoBuffer(sizeof(msgRet) + sizeof(uint32_t)* msgRet.nCnt); //autoBuffer.addContent((char*)&msgRet,sizeof(msgRet)) ; //MAP_ID_MYROOW::iterator iter = m_vMyOwnRooms[pRet->nRoomType].begin() ; //for ( ; iter != m_vMyOwnRooms[pRet->nRoomType].end() ; ++iter ) //{ // uint32_t n = iter->first ; // autoBuffer.addContent((char*)&n,sizeof(uint32_t)); //} //SendMsg((stMsg*)autoBuffer.getBufferPtr(),autoBuffer.getContentSize()) ; } break; default: return false; } return true ; }
void CPlayerFriend::TimerSave() { if ( !m_bDirty ) { return ; } m_bDirty = false ; stMsgSaveFirendList saveList ; saveList.nFriendCountLen = m_vAllFriends.size() ; saveList.nUserUID = GetPlayer()->GetUserUID() ; if ( saveList.nFriendCountLen == 0 ) { SendMsg(&saveList,sizeof(saveList)) ; return ; } std::string strFriends = ""; if ( !m_vAllFriends.empty() ) { Json::Value followArray ; Json::StyledWriter writeFollow ; FRIENDS_UID::iterator iter = m_vAllFriends.begin() ; uint16_t nIdx = 0 ; for ( ; iter != m_vAllFriends.end(); ++iter ,++nIdx) { followArray[nIdx] = *iter ; } strFriends = writeFollow.write(followArray) ; } saveList.nFriendCountLen = strFriends.size() ; CAutoBuffer auBf ( sizeof(saveList) + saveList.nFriendCountLen ) ; auBf.addContent((char*)&saveList,sizeof(saveList)) ; for ( size_t nValue : m_vAllFriends ) { auBf.addContent((char*)&nValue,sizeof(nValue)) ; } CGameServerApp::SharedGameServerApp()->sendMsg(GetPlayer()->GetUserUID(),auBf.getBufferPtr(),auBf.getContentSize()) ; LOGFMTD("save friend list uid = %d friend cnt = %d",GetPlayer()->GetUserUID(),m_vAllFriends.size()); }
bool CPlayerManager::onCrossServerRequestRet(stMsgCrossServerRequestRet* pResult,Json::Value* vJsValue) { if ( eCrossSvrReq_SelectTakeIn == pResult->nRequestType && eCrossSvrReqSub_SelectPlayerData == pResult->nRequestSubType ) { stMsgRequestPlayerDataRet msgBack ; msgBack.nRet = 0 ; msgBack.isDetail = pResult->vArg[3] ; CPlayer* pPlayer = GetPlayerByUserUID(pResult->vArg[0]); if ( pPlayer == nullptr ) { CLogMgr::SharedLogMgr()->ErrorLog("why this player is null , can not , funck!") ; return true ; } stPlayerDetailDataClient stData ; stData.nCurrentRoomID = 0 ; CAutoBuffer auB (sizeof(msgBack) + sizeof(stPlayerDetailDataClient)); if ( pPlayer ) { CPlayerTaxas* pTaxasData = (CPlayerTaxas*)pPlayer->GetComponent(ePlayerComponent_PlayerTaxas); stData.nCurrentRoomID = pResult->nReqOrigID; if ( msgBack.isDetail ) { pPlayer->GetBaseData()->GetPlayerDetailData(&stData); pTaxasData->getTaxasData(&stData.tTaxasData); if ( vJsValue ) { stData.tTaxasData.nPlayTimes += (*vJsValue)["playTimes"].asUInt(); stData.tTaxasData.nWinTimes += (*vJsValue)["winTimes"].asUInt(); stData.tTaxasData.nSingleWinMost = (*vJsValue)["singleMost"].asUInt() < stData.tTaxasData.nSingleWinMost ? stData.tTaxasData.nSingleWinMost : (*vJsValue)["singleMost"].asUInt(); } else { CLogMgr::SharedLogMgr()->PrintLog("targe player not sit down uid = %llu",pResult->vArg[0]); } } else { pPlayer->GetBaseData()->GetPlayerBrifData(&stData) ; } if ( pResult->vArg[1] ) { stData.nCoin += pResult->vArg[2] ; } else { stData.nDiamoned += pResult->vArg[2] ; } stData.nCurrentRoomID = pResult->nReqOrigID; auB.addContent(&msgBack,sizeof(msgBack)); auB.addContent(&stData,msgBack.isDetail ? sizeof(stPlayerDetailDataClient) : sizeof(stPlayerBrifData) ) ; CGameServerApp::SharedGameServerApp()->sendMsg(pResult->nTargetID,auB.getBufferPtr(),auB.getContentSize()) ; CLogMgr::SharedLogMgr()->PrintLog("select take in ret , send player data"); return true ; } return true ; } return false ; }
bool CPlayerManager::ProcessPublicMessage( stMsg* prealMsg , eMsgPort eSenderPort , uint32_t nSessionID ) { switch ( prealMsg->usMsgType ) { case MSG_CROSS_SERVER_REQUEST: { stMsgCrossServerRequest* pRet = (stMsgCrossServerRequest*)prealMsg ; Json::Value* pJsValue = nullptr ; Json::Value rootValue ; if ( pRet->nJsonsLen ) { Json::Reader reader; char* pstr = ((char*)&pRet->nJsonsLen) + sizeof(pRet->nJsonsLen) ; reader.parse(pstr,pstr + pRet->nJsonsLen,rootValue,false); pJsValue = &rootValue ; } if ( onCrossServerRequest(pRet,eSenderPort,pJsValue) == false ) { CPlayer* pPlayer = GetPlayerByUserUID(pRet->nTargetID); assert(pPlayer&&"this request no one to process or target id error"); if ( pPlayer && pPlayer->onCrossServerRequest(pRet,eSenderPort,pJsValue) ) { return true ; } CLogMgr::SharedLogMgr()->ErrorLog("cross request type = %d , subType = %d ,unprocessed",pRet->nRequestType,pRet->nRequestSubType); return false; } return true ; } break; case MSG_CROSS_SERVER_REQUEST_RET: { stMsgCrossServerRequestRet* pRet = (stMsgCrossServerRequestRet*)prealMsg ; Json::Value* pJsValue = nullptr ; Json::Value rootValue ; if ( pRet->nJsonsLen ) { Json::Reader reader; char* pstr = ((char*)&pRet->nJsonsLen) + sizeof(pRet->nJsonsLen) ; reader.parse(pstr,pstr + pRet->nJsonsLen,rootValue,false); pJsValue = &rootValue ; } if ( onCrossServerRequestRet(pRet,pJsValue) == false ) { CPlayer* pPlayer = GetPlayerByUserUID(pRet->nTargetID); assert(pPlayer&&"this request no one to process or target id error"); if ( pPlayer && pPlayer->onCrossServerRequestRet(pRet,pJsValue) ) { return true ; } CLogMgr::SharedLogMgr()->ErrorLog("cross request result type = %d , subType = %d ,unprocessed",pRet->nRequestType,pRet->nRequestSubType); return false; } return true ; } break; case MSG_REQUEST_PLAYER_DATA: { stMsgRequestPlayerData* pRet = (stMsgRequestPlayerData*)prealMsg ; stMsgRequestPlayerDataRet msgBack ; msgBack.nRet = 0 ; msgBack.isDetail = pRet->isDetail ; CPlayer* pPlayer = GetPlayerByUserUID(pRet->nPlayerUID); stPlayerDetailDataClient stData ; stData.nCurrentRoomID = 0 ; CAutoBuffer auB (sizeof(msgBack) + sizeof(stPlayerDetailData)); if ( pPlayer ) { CPlayerTaxas* pTaxasData = (CPlayerTaxas*)pPlayer->GetComponent(ePlayerComponent_PlayerTaxas); stData.nCurrentRoomID = pTaxasData->getCurRoomID() ; if ( stData.nCurrentRoomID ) // select take in { stMsgCrossServerRequest msgReq ; msgReq.nJsonsLen = 0 ; msgReq.nReqOrigID = nSessionID ; msgReq.nRequestSubType = eCrossSvrReqSub_SelectPlayerData ; msgReq.nRequestType = eCrossSvrReq_SelectTakeIn ; msgReq.nTargetID = stData.nCurrentRoomID ; msgReq.cSysIdentifer = ID_MSG_PORT_TAXAS ; msgReq.vArg[0] = pRet->nPlayerUID; msgReq.vArg[1] = pRet->isDetail ; CGameServerApp::SharedGameServerApp()->sendMsg(nSessionID,(char*)&msgReq,sizeof(msgReq)) ; CLogMgr::SharedLogMgr()->PrintLog("select take in for player detail") ; return true ; } if ( pRet->isDetail ) { pPlayer->GetBaseData()->GetPlayerDetailData(&stData); pTaxasData->getTaxasData(&stData.tTaxasData); } else { pPlayer->GetBaseData()->GetPlayerBrifData(&stData) ; } auB.addContent(&msgBack,sizeof(msgBack)); auB.addContent(&stData,pRet->isDetail ? sizeof(stPlayerDetailDataClient) : sizeof(stPlayerBrifData) ) ; CGameServerApp::SharedGameServerApp()->sendMsg(nSessionID,auB.getBufferPtr(),auB.getContentSize()) ; return true ; } if ( m_tPlayerDataCaher.getPlayerData(pRet->nPlayerUID,&stData,pRet->isDetail) ) { auB.addContent(&msgBack,sizeof(msgBack)); auB.addContent(&stData,pRet->isDetail ? sizeof(stPlayerDetailDataClient) : sizeof(stPlayerBrifData) ) ; CGameServerApp::SharedGameServerApp()->sendMsg(nSessionID,auB.getBufferPtr(),auB.getContentSize()) ; CLogMgr::SharedLogMgr()->PrintLog("get player data from cahe") ; return true ; } CLogMgr::SharedLogMgr()->PrintLog("req detail player not online , req from db target uid = %u",pRet->nPlayerUID) ; stMsgSelectPlayerData msgReq ; msgReq.isDetail = pRet->isDetail ; msgReq.nReqPlayerSessionID = nSessionID ; msgReq.nTargetPlayerUID = pRet->nPlayerUID ; CGameServerApp::SharedGameServerApp()->sendMsg(nSessionID,(char*)&msgReq,sizeof(msgReq)) ; } break; case MSG_SELECT_DB_PLAYER_DATA: { stMsgSelectPlayerDataRet* pRet = (stMsgSelectPlayerDataRet*)prealMsg ; stMsgRequestPlayerDataRet msgBack ; msgBack.nRet = pRet->nRet ; msgBack.isDetail = pRet->isDetail ; if ( pRet->nRet ) { CGameServerApp::SharedGameServerApp()->sendMsg(pRet->nReqPlayerSessionID,(char*)&msgBack,sizeof(msgBack)) ; } else { m_tPlayerDataCaher.cachePlayerData(pRet); CAutoBuffer auB (sizeof(msgBack) + sizeof(stPlayerDetailDataClient)); auB.addContent(&msgBack,sizeof(msgBack)); uint16_t nLen = pRet->isDetail ? sizeof(stPlayerDetailDataClient) : sizeof(stPlayerBrifData) ; auB.addContent((char*)prealMsg + sizeof(stMsgSelectPlayerDataRet),nLen ); CGameServerApp::SharedGameServerApp()->sendMsg(pRet->nReqPlayerSessionID,auB.getBufferPtr(),auB.getContentSize()) ; } CLogMgr::SharedLogMgr()->PrintLog("session id = %d req play data ret = %d",pRet->nReqPlayerSessionID,pRet->nRet ) ; } break; case MSG_PLAYER_LOGIN: { stMsgOnPlayerLogin* pmsgenter = (stMsgOnPlayerLogin*)prealMsg ; CPlayer* pPlayer = GetPlayerBySessionID(nSessionID) ; if ( pPlayer != NULL && pPlayer->GetUserUID() == pmsgenter->nUserUID ) { CLogMgr::SharedLogMgr()->ErrorLog("double nSession, this nSessionID already have player, already login , do not login again id = %d? ",nSessionID) ; return true ; } if ( pPlayer != NULL && pPlayer->GetUserUID() != pmsgenter->nUserUID ) // switch account in main scene { // disconnect pre player OnPlayerOffline(pPlayer); } if ( ProcessIsAlreadyLogin(pmsgenter->nUserUID,nSessionID) ) { return true ; } // is offline peer MAP_UID_PLAYERS::iterator iterOfflien = m_vOfflinePlayers.begin(); for ( ; iterOfflien != m_vOfflinePlayers.end(); ++iterOfflien ) { if ( iterOfflien->second && iterOfflien->first == pmsgenter->nUserUID ) { iterOfflien->second->OnReactive(nSessionID) ; AddPlayer(iterOfflien->second) ; m_vOfflinePlayers.erase(iterOfflien) ; return true ; } } CPlayer* pNew = new CPlayer ; pNew->Init(pmsgenter->nUserUID,nSessionID ) ; AddPlayer(pNew) ; } break; case MSG_DISCONNECT_CLIENT: case MSG_PLAYER_LOGOUT: { CPlayer* pPlayer = GetPlayerBySessionID(nSessionID) ; if ( pPlayer ) { // post online event ; CLogMgr::SharedLogMgr()->PrintLog("player disconnect session id = %d",nSessionID); OnPlayerOffline(pPlayer) ; } else { CLogMgr::SharedLogMgr()->ErrorLog("client disconnect ! client is NULL session id = %d",nSessionID) ; } //#ifdef _DEBUG LogState(); //#endif } break; case MSG_TP_ORDER_LEAVE: { stMsgOrderTaxasPlayerLeaveRet* pRet = (stMsgOrderTaxasPlayerLeaveRet*)prealMsg ; CPlayer* pp = GetPlayerByUserUID(pRet->nUserUID) ; if (!pp) { CLogMgr::SharedLogMgr()->ErrorLog("uid = %d not find , so can not inform leave",pRet->nUserUID); } else { pp->OnMessage(prealMsg,eSenderPort); } } break; case MSG_TP_INFORM_LEAVE: { stMsgInformTaxasPlayerLeave* pRet = (stMsgInformTaxasPlayerLeave*)prealMsg ; CPlayer* pp = GetPlayerByUserUID(pRet->nUserUID) ; if (!pp) { CLogMgr::SharedLogMgr()->ErrorLog("uid = %d not find , so can not inform leave",pRet->nUserUID); } else { pp->OnMessage(prealMsg,eSenderPort); } } break; case MSG_TP_SYNC_PLAYER_DATA: { stMsgSyncTaxasPlayerData* pRet = (stMsgSyncTaxasPlayerData*)prealMsg ; CPlayer* pp = GetPlayerByUserUID(pRet->nUserUID) ; if (!pp) { CLogMgr::SharedLogMgr()->ErrorLog("uid = %d not find , so can not sys data",pRet->nUserUID); } else { pp->OnMessage(prealMsg,eSenderPort); } } break; default: return false; } return true ; }