コード例 #1
0
ファイル: TaxasRoom.cpp プロジェクト: BillXu/NewProject
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());
}
コード例 #2
0
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 ;
}
コード例 #3
0
ファイル: NiuNiuRoom.cpp プロジェクト: BillXu/NewProject
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");
}
コード例 #4
0
ファイル: PlayerGameData.cpp プロジェクト: BillXu/NewProject
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()) ;
	}
}
コード例 #5
0
ファイル: PlayerFriend.cpp プロジェクト: BillXu/NewProject
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());
}
コード例 #6
0
ファイル: PlayerGameData.cpp プロジェクト: BillXu/NewProject
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 ;
}
コード例 #7
0
void CKSXML_Read_Project::Read_Project_From_Disk(std::string sFile)
{

	// read project in to 
	CAutoDelete<IFile> pFile(IFile::Create());
	if (pFile->Open(sFile.c_str(), IFile::FileRead)) {
		
		// reset/ erase the current DAW project
	//	Reset_Project();
		
	//	printf(sFile.c_str());
		
		// cleanup xml and take parser
		Prepare_For_XML();
		
		// read project in to char buffer
		tuint iSize = pFile->GetSizeWhenOpened();
		CAutoBuffer<char> pszProjectXML;
		pszProjectXML.Allocate(iSize);

		pFile->Read(pszProjectXML, iSize);
		
		printf(pszProjectXML);
		
		// parse pszProjectXML in to a TinyXML DOM
		mpTinyXMLDoc->Parse(pszProjectXML);
		
		// pass the TinyXML DOM in to the DAW data structure
		Pass_The_Project_Tag( mpTinyXMLDoc );
		
		// close all plug-in windows
//		gpApplication->Show_All_Plugins(false);
		
		// read plugin data from disk
		Load_Plug_In_Settings();
		
		if( !gpApplication->Project_Is_Uploaded()){
			
			gpApplication->Project_Name( gpApplication->Online_Project_Name() ); 
			
		}

		// Make sure folders are there
	//	gpApplication->Create_Folders();
		
		// find what samples is missing
		Prepare_Samples();
		
		// download takes
		Download_Takes();
		
		// decompress takes // How can samples be decompressed before they are downloaded?
		Decompress_Takes();
		
		
		
		// set up the track editor with regions
	//	Setup_Track_Editor();
		
		/*
		// insert regions in track editor
		if( !bDownloading_Takes)
			Setup_Track_Editor();
		*/
		
		
			
	}		
}
コード例 #8
0
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 ;
}