Exemple #1
0
void CPlayerBaseData::OnOtherDoLogined()
{ 	
	stMsgRequestClientIp msgReq ;
	SendMsg(&msgReq,sizeof(msgReq)) ; 
	LOGFMTD("send request ip , sessioni id = %d",GetPlayer()->GetSessionID()) ;

	if ( nReadingDataFromDB != 2 )
	{
		stMsgDataServerGetBaseData msg ;
		msg.nUserUID = GetPlayer()->GetUserUID() ;
		SendMsg(&msg,sizeof(msg)) ;
		nReadingDataFromDB = 1 ;
		LOGFMTE("still not ready player data , wait a moment uid = %u",GetPlayer()->GetUserUID()) ;
	}
	else
	{
		SendBaseDatToClient();
		onRecivedLoginData();
	}
}
Exemple #2
0
void CPlayerBaseData::OnReactive(uint32_t nSessionID )
{
	CEventCenter::SharedEventCenter()->RegisterEventListenner(eEvent_NewDay,this,CPlayerBaseData::EventFunc ) ;
	LOGFMTD("player reactive send base data");

	if ( nReadingDataFromDB != 2 )
	{
		stMsgDataServerGetBaseData msg ;
		msg.nUserUID = GetPlayer()->GetUserUID() ;
		SendMsg(&msg,sizeof(msg)) ;
		nReadingDataFromDB = 1 ;
		LOGFMTE("still not ready player data , wait a moment uid = %u",GetPlayer()->GetUserUID()) ;
	}
	else
	{
		SendBaseDatToClient();
		onRecivedLoginData();
	}

	stMsgRequestClientIp msgReq ;
	SendMsg(&msgReq,sizeof(msgReq)) ; 
	LOGFMTD("send request ip , sessioni id = %d",GetPlayer()->GetSessionID()) ;
}
void CPlayerBaseData::OnReactive(uint32_t nSessionID )
{
	CEventCenter::SharedEventCenter()->RegisterEventListenner(eEvent_NewDay,this,CPlayerBaseData::EventFunc ) ;
	CLogMgr::SharedLogMgr()->PrintLog("player reactive send base data");
	SendBaseDatToClient();
}
bool CPlayerBaseData::OnMessage( stMsg* pMsg , eMsgPort eSenderPort )
{
	if ( IPlayerComponent::OnMessage(pMsg,eSenderPort) )
	{
		return true ;
	}

	switch( pMsg->usMsgType )
	{
	case MSG_BUY_SHOP_ITEM:
		{
			stMsgPlayerBuyShopItem* pRet = (stMsgPlayerBuyShopItem*)pMsg ;
			stMsgToVerifyServer msgVerify ;
			msgVerify.nBuyerPlayerUserUID = GetPlayer()->GetUserUID();
			msgVerify.nBuyForPlayerUserUID = msgVerify.nBuyerPlayerUserUID ;
			msgVerify.nMiUserUID = pRet->nMiUserUID ;
			msgVerify.nShopItemID = pRet->nShopItemID ;
			msgVerify.nTranscationIDLen = pRet->nBufLen ;
			CAutoBuffer buffer(sizeof(stMsgPlayerBuyShopItem) + pRet->nBufLen ) ;
			buffer.addContent(&msgVerify,sizeof(msgVerify));
			buffer.addContent(((char*)pRet) + sizeof(stMsgPlayerBuyShopItem),pRet->nBufLen);
			SendMsg((stMsg*)buffer.getBufferPtr(),buffer.getContentSize());
		}
		break;
	case MSG_VERIFY_TANSACTION:
		{
			stMsgFromVerifyServer* pRet = (stMsgFromVerifyServer*)pMsg ;
			stMsgPlayerBuyShopItemRet msgBack ;
			msgBack.nBuyShopItemForUserUID = pRet->nBuyForPlayerUserUID ;
			msgBack.nDiamoned = 0 ;
			msgBack.nSavedMoneyForVip = 0 ;
			msgBack.nShopItemID = pRet->nShopItemID ;
			msgBack.nRet = 0 ;
			if ( pRet->nRet == 4 ) // success 
			{
				CShopConfigMgr* pMgr = (CShopConfigMgr*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Shop);
				stShopItem* pItem = pMgr->GetShopItem(pRet->nShopItemID);
				if ( pItem == nullptr )
				{
					msgBack.nRet = 5 ;
					CLogMgr::SharedLogMgr()->ErrorLog("can not find shop id = %d , buyer uid = %d",pRet->nShopItemID,pRet->nBuyerPlayerUserUID) ;
				}
				else
				{
					ModifyMoney(pItem->nCount) ;
					CLogMgr::SharedLogMgr()->SystemLog("add coin with shop id = %d for buyer uid = %d ",pRet->nShopItemID,pRet->nBuyerPlayerUserUID) ;
				}
			}
			else
			{
				msgBack.nRet = 2 ;
				CLogMgr::SharedLogMgr()->ErrorLog("uid = %d ,shop id = %d , verify error ",pRet->nBuyerPlayerUserUID,pRet->nShopItemID) ;
			}

			msgBack.nFinalyCoin = GetAllCoin() ;
			SendMsg(&msgBack,sizeof(msgBack)) ;
		}
		break;
	case MSG_ON_PLAYER_BIND_ACCOUNT:
		{
			m_stBaseData.isRegister = true ;
			CLogMgr::SharedLogMgr()->PrintLog("player bind account ok uid = %u",GetPlayer()->GetUserUID());
		}
		break;
	case MSG_READ_PLAYER_BASE_DATA:   // from db server ;
		{
			stMsgDataServerGetBaseDataRet* pBaseData = (stMsgDataServerGetBaseDataRet*)pMsg ;
			if ( pBaseData->nRet )
			{
				CLogMgr::SharedLogMgr()->ErrorLog("do not exsit playerData") ;
				return true; 
			}
			memcpy(&m_stBaseData,&pBaseData->stBaseData,sizeof(m_stBaseData));
			CLogMgr::SharedLogMgr()->PrintLog("recived base data uid = %d",pBaseData->stBaseData.nUserUID);
			SendBaseDatToClient();
			CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->getPlayerDataCaher().removePlayerDataCache(pBaseData->stBaseData.nUserUID) ;
			return true ;
		}
		break;
//	case MSG_PLAYER_REQUEST_NOTICE:
//		{
//// 			CGameServerApp::SharedGameServerApp()->GetBrocaster()->SendInformsToPlayer(GetPlayer()) ;
//// 			CInformConfig* pConfig = (CInformConfig*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Informs) ;
//// 			m_stBaseData.nNoticeID = pConfig->GetMaxInformID();
//		}
//		break;
	case MSG_PLAYER_MODIFY_SIGURE:
		{
			stMsgPLayerModifySigure* pMsgRet = (stMsgPLayerModifySigure*)pMsg ;
			memcpy(m_stBaseData.cSignature,pMsgRet->pNewSign,sizeof(m_stBaseData.cSignature));
			stMsgPlayerModifySigureRet ret ;
			ret.nRet = 0 ;
			SendMsg(&ret,sizeof(ret)) ;
			m_bPlayerInfoDataDirty = true ;
		}
		break;
	case MSG_PLAYER_MODIFY_NAME:
		{
			stMsgPLayerModifyName* pMsgRet = (stMsgPLayerModifyName*)pMsg ;
			stMsgPlayerModifyNameRet ret ;
			ret.nRet = 0 ;
			if ( pMsgRet->pNewName[sizeof(pMsgRet->pNewName) -1 ] != 0 )
			{
				ret.nRet = 1 ;
				CLogMgr::SharedLogMgr()->ErrorLog("name is too long uid = %d",GetPlayer()->GetUserUID());
			}
			else
			{
				memcpy(m_stBaseData.cName,pMsgRet->pNewName,sizeof(m_stBaseData.cName)) ;
				m_bPlayerInfoDataDirty = true ;
			}
			SendMsg(&ret,sizeof(ret)) ;
		}
		break;
	case MSG_PLAYER_MODIFY_PHOTO:
		{
			stMsgPlayerModifyPhoto* pPhoto = (stMsgPlayerModifyPhoto*)pMsg ;
			m_stBaseData.nPhotoID = pPhoto->nPhotoID ;
			stMsgPlayerModifyPhotoRet msgRet ;
			msgRet.nRet = 0 ;
			SendMsg(&msgRet,sizeof(msgRet)) ;
			m_bPlayerInfoDataDirty = true ;
		}
		break;
	case MSG_PLAYER_MODIFY_SEX:
		{
			stMsgPlayerModifySex* pRet = (stMsgPlayerModifySex*)pMsg ;
			m_stBaseData.nSex = pRet->nNewSex ;
			stMsgPlayerModifySexRet msgback ;
			msgback.nRet = 0 ;
			SendMsg(&msgback,sizeof(msgback)) ;
			m_bPlayerInfoDataDirty = true ;
		}
		break;
	case MSG_PUSH_APNS_TOKEN:
		{
			//stMsgPushAPNSToken* pMsgRet = (stMsgPushAPNSToken*)pMsg ;
			//if ( 0 == pMsgRet->nGetTokenRet )
			//{
			//	bPlayerEnableAPNs = true ;
			//	memcpy(vAPNSToken,pMsgRet->vAPNsToken,32);
			//}
			//else
			//{
			//	bPlayerEnableAPNs = false ;
			//	memset(vAPNSToken,0,32 ) ;
			//}
			//stMsgPushAPNSTokenRet msg ;
			//msg.nGetTokenRet = pMsgRet->nGetTokenRet ;
			//SendMsgToClient((char*)&msg,sizeof(msg)) ;
		}
		break;
	case MSG_PLAYER_UPDATE_MONEY:
		{
 			stMsgPlayerUpdateMoney msgUpdate ;
 			msgUpdate.nFinalCoin = GetAllCoin();
 			msgUpdate.nFinalDiamoned = GetAllDiamoned();
 			SendMsg(&msgUpdate,sizeof(msgUpdate));
		}
		break;
	case MSG_GET_CONTINUE_LOGIN_REWARD:
		{
// 			stMsgGetContinueLoginReward* pGetR = (stMsgGetContinueLoginReward*)pMsg ;
// 			stMsgGetContinueLoginRewardRet msgBack ;
// 			msgBack.nRet = 0 ; //  // 0 success , 1 already getted , 2 you are not vip  ;
// 			msgBack.cRewardType = pGetR->cRewardType;
// 			msgBack.nDayIdx = m_stBaseData.nContinueDays ;
// 			msgBack.nDiamoned = GetAllDiamoned();
// 			msgBack.nFinalCoin = GetAllCoin() ;
// 			if ( m_bGivedLoginReward )
// 			{
// 				msgBack.nRet = 1 ; 
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				break;
// 			}
// 
// 			stConLoginConfig* pConfig = CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetContinueLoginConfig()->GetConfigByDayIdx(m_stBaseData.nContinueDays) ;
// 			if ( pConfig == NULL )
// 			{
// 				CLogMgr::SharedLogMgr()->ErrorLog("there is no login config for dayIdx = %d",m_stBaseData.nContinueDays ) ;
// 				msgBack.nRet = 4 ;
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				break;
// 			}
// 
// 			// give item  deponed on nContinuedDays ;
// 			if (pGetR->cRewardType == 1 )
// 			{
// 				if ( GetVipLevel() < 1 )
// 				{
// 					msgBack.nRet = 2 ;
// 					SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 					break;
// 				}
// 				// give item ;
// 				for ( int i = 0 ; i < pConfig->vItems.size(); ++i )
// 				{
// 					CPlayerItemComponent* pc = (CPlayerItemComponent*)GetPlayer()->GetComponent(ePlayerComponent_PlayerItemMgr) ;
// 					pc->AddItemByID(pConfig->vItems[i].nItemID,pConfig->vItems[i].nCount) ;
// 				}
// 				// give vip prize ;
// 				m_stBaseData.nDiamoned += pConfig->nDiamoned ;
// 				msgBack.nDiamoned = GetAllDiamoned();
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				m_bGivedLoginReward = true ;
// 				break;
// 			}
// 			else if( pGetR->cRewardType == 0 )
// 			{
// 				// gvie common prize ;
// 				m_stBaseData.nCoin += pConfig->nGiveCoin ;
// 				msgBack.nFinalCoin = GetAllCoin() ;
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				m_bGivedLoginReward = true ;
// 				break;
// 			}
// 			else
// 			{
// 				msgBack.nRet = 3 ;
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				break;
// 			}
		}
		break;
	case MSG_PLAYER_REQUEST_CHARITY_STATE:
		{
 			stMsgPlayerRequestCharityStateRet msgBack ;
 			 // 0 can get charity , 1 you coin is enough , do not need charity, 2 time not reached ;
 			msgBack.nState = 0 ;
 			msgBack.nLeftSecond = 0 ;
 			if ( GetAllCoin() > COIN_CONDITION_TO_GET_CHARITY )
 			{
 				msgBack.nState = 1 ;
 			}
 			else if ( time(NULL) - m_stBaseData.tLastTakeCharityCoinTime < TIME_GET_CHARITY_ELAPS )
 			{
 				msgBack.nState = 2 ;
 				msgBack.nLeftSecond = m_stBaseData.tLastTakeCharityCoinTime + TIME_GET_CHARITY_ELAPS - time(NULL) ;
 			}
 			SendMsg(&msgBack,sizeof(msgBack)) ;
		}
		break;
	case MSG_PLAYER_GET_CHARITY:
		{
 			stMsgPlayerGetCharityRet msgBack ;
 			// 0 success ,  1 you coin is enough , do not need charity, 2 time not reached ;
 			msgBack.nRet = 0 ;
 			msgBack.nFinalCoin = GetAllCoin();
 			msgBack.nGetCoin = 0;
 			msgBack.nLeftSecond = 0 ;
 			if ( GetAllCoin() > COIN_CONDITION_TO_GET_CHARITY )
 			{
 				msgBack.nRet = 1 ;
 			}
 			else if ( time(NULL) - m_stBaseData.tLastTakeCharityCoinTime < TIME_GET_CHARITY_ELAPS )
 			{
 				msgBack.nRet = 2 ;
 				msgBack.nLeftSecond = m_stBaseData.tLastTakeCharityCoinTime + TIME_GET_CHARITY_ELAPS - time(NULL) ;
 			}
 			else
 			{
 				msgBack.nGetCoin = COIN_FOR_CHARITY;
 				msgBack.nLeftSecond = TIME_GET_CHARITY_ELAPS ;
 				m_stBaseData.tLastTakeCharityCoinTime = time(NULL) ;
				ModifyMoney(msgBack.nGetCoin);
				msgBack.nFinalCoin = GetAllCoin();
				CLogMgr::SharedLogMgr()->PrintLog("player uid = %d get charity",GetPlayer()->GetUserUID());
				m_bCommonLogicDataDirty = true ;
 			}
			CLogMgr::SharedLogMgr()->SystemLog("uid = %d , final coin = %I64d",GetPlayer()->GetUserUID(),GetAllCoin());
 			SendMsg(&msgBack,sizeof(msgBack)) ;
		}
		break;
	default:
		{
			return false ;
		}
		break;
	}
	return true ;
}
Exemple #5
0
bool CPlayerBaseData::OnMessage( stMsg* pMsg , eMsgPort eSenderPort )
{
	if ( IPlayerComponent::OnMessage(pMsg,eSenderPort) )
	{
		return true ;
	}

	switch( pMsg->usMsgType )
	{
	case MSG_PLAYER_USE_ENCRYPT_NUMBER:
		{
			stMsgPlayerUseEncryptNumberRet msgBack ;
			stMsgPlayerUseEncryptNumber* pRet = (stMsgPlayerUseEncryptNumber*)pMsg ;
			if ( 1 || CEncryptNumber::isNumberValid(pRet->nNumber) )
			{
				stMsgVerifyEncryptNumber msgVerifyEncrypt ;
				msgVerifyEncrypt.nNumber = pRet->nNumber ;
				msgVerifyEncrypt.nUserUID = GetPlayer()->GetUserUID() ;
				SendMsg(&msgVerifyEncrypt,sizeof(msgVerifyEncrypt)) ;
				break;
			}

			msgBack.nRet = 1 ;
			msgBack.nAddCoin = 0 ;
			msgBack.nFinalcoin = getCoin();
			SendMsg(&msgBack,sizeof(msgBack)) ;
			LOGFMTD("invalid number uid = %u",GetPlayer()->GetUserUID());
		}
		break ;
	case MSG_VERIFY_ENCRYPT_NUMBER:
		{
			stMsgPlayerUseEncryptNumberRet msgBack ;
			stMsgVerifyEncryptNumberRet* pRet = (stMsgVerifyEncryptNumberRet*)pMsg ;
			if ( pRet->nRet )
			{
				stMsgPlayerUseEncryptNumberRet msgBack ;
				msgBack.nRet = pRet->nRet ;
				msgBack.nFinalcoin = getCoin();
				SendMsg(&msgBack,sizeof(msgBack)) ;
				break;
			}
			msgBack.nRet = 0 ;
			msgBack.nAddCoin = pRet->nAddCoin ;
			msgBack.nCoinType = pRet->nCoinType ;
			AddMoney(pRet->nAddCoin,pRet->nCoinType == 0 ) ;
			msgBack.nFinalcoin = GetAllCoin();
			msgBack.nDiamond = GetAllDiamoned() ;
			SendMsg(&msgBack,sizeof(msgBack)) ;
			LOGFMTD("uid = %u add coin via encrypt number" , GetPlayer()->GetUserUID());
		}
		break;
	case MSG_REQ_TOTAL_GAME_OFFSET:
		{
			stMsgReqRobotTotalGameOffsetRet msgBack ;
			msgBack.nTotalGameOffset = m_stBaseData.nTotalGameCoinOffset ;
			SendMsg(&msgBack,sizeof(msgBack)) ;
			LOGFMTD("robot uid = %u req total offset = %d",GetPlayer()->GetUserUID(),msgBack.nTotalGameOffset) ;
 		}
		break;
	case MSG_TELL_PLAYER_TYPE:
		{
			stMsgTellPlayerType* pRet = (stMsgTellPlayerType*)pMsg ;
			m_ePlayerType = (ePlayerType)pRet->nPlayerType ;
			LOGFMTD("uid = %u , tell player type = %u",GetPlayer()->GetUserUID(),m_ePlayerType);
		}
		break;
	case MSG_GET_VIP_CARD_GIFT:
		{
			stMsgGetVipcardGift* pRet = (stMsgGetVipcardGift*)pMsg ;
			stMsgGetVipcardGiftRet msgBack ;
			msgBack.nVipCardType = pRet->nVipCardType ;
			msgBack.nAddCoin = 0 ;

			if ( m_stBaseData.nCardType != pRet->nVipCardType )
			{
				msgBack.nRet = 1 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				LOGFMTD("player uid = %d get vip card coin ret = %d",GetPlayer()->GetUserUID(),msgBack.nRet) ;
				break; 
			}

			time_t tNow = time(nullptr) ;
			if ( m_stBaseData.nCardEndTime < tNow )
			{
				msgBack.nRet = 2 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				LOGFMTD("player uid = %d get vip card coin ret = %d",GetPlayer()->GetUserUID(),msgBack.nRet) ;
				break; 
			}

			struct tm pTempNow,pLastTake ;
			pTempNow = *localtime(&tNow) ;
			time_t nLastTake = m_stBaseData.tLastTakeCardGiftTime ;
			pLastTake = *localtime(&nLastTake) ;
			if ( pTempNow.tm_year == pLastTake.tm_year && pTempNow.tm_mon == pLastTake.tm_mon && pTempNow.tm_yday == pLastTake.tm_yday )
			{
				msgBack.nRet = 3 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				LOGFMTD("player uid = %d get vip card coin ret = %d",GetPlayer()->GetUserUID(),msgBack.nRet) ;
				break; 
			}

			msgBack.nRet = 0 ;
			msgBack.nAddCoin = COIN_FOR_VIP_CARD ;
			AddMoney(COIN_FOR_VIP_CARD);
			m_stBaseData.tLastTakeCardGiftTime = tNow ;
			SendMsg(&msgBack,sizeof(msgBack)) ;
			m_bCommonLogicDataDirty = true ;
			LOGFMTD("player uid = %d get vip card coin ret = %d",GetPlayer()->GetUserUID(),msgBack.nRet) ;
		}
		break;
	case MSG_PLAYER_CHECK_INVITER:
		{
			stMsgCheckInviterRet msgBack ;
			stMsgCheckInviter* pRet = (stMsgCheckInviter*)pMsg ;
			msgBack.nInviterUID = pRet->nInviterUID ;

			if ( m_stBaseData.nUserUID == pRet->nInviterUID )
			{
				msgBack.nRet = 1 ;
				LOGFMTE("can not invite self , uid = %d",GetPlayer()->GetUserUID()) ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				break; 
			}

			if ( m_stBaseData.nInviteUID )
			{
				msgBack.nRet = 2 ;
				LOGFMTD("you already have invite = %d , uid = %d",m_stBaseData.nInviteUID,GetPlayer()->GetUserUID()) ;
				SendMsg(&msgBack,sizeof(msgBack)) ; 
				break; 
			}

			auto tPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerByUserUID(pRet->nInviterUID);
			if ( tPlayer )
			{
				LOGFMTD("do invite = %d ,player = %d",pRet->nInviterUID,GetPlayer()->GetUserUID()) ;
				onBeInviteBy(pRet->nInviterUID) ;
				msgBack.nRet = 0 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
			}
			else
			{
				stMsgDBCheckInvite msgCheck ;
				msgCheck.nInviteUserUID = pRet->nInviterUID ;
				SendMsg(&msgCheck,sizeof(msgCheck)) ;
				LOGFMTD("invite = %d not online, so ask db i am uid = %d",pRet->nInviterUID,GetPlayer()->GetUserUID()) ;
			}
		}
		break;
	case MSG_DB_CHECK_INVITER:
		{
			stMsgCheckInviterRet msgBack ;
			stMsgDBCheckInviteRet* pRet = (stMsgDBCheckInviteRet*)pMsg ;
			msgBack.nInviterUID = pRet->nInviteUseUID ;
			if ( pRet->nRet )
			{
				msgBack.nRet = 1 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
			}
			else
			{
				onBeInviteBy(pRet->nInviteUseUID) ;
				msgBack.nRet = 0 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
			}
		}
		break;
	case MSG_REQUEST_CLIENT_IP:
		{
			stMsgRequestClientIpRet* pRet = (stMsgRequestClientIpRet*)pMsg ;
			if ( pRet->nRet == 0 )
			{
				m_strCurIP = pRet->vIP ;
				LOGFMTD("get client ip = %s session id = %d",m_strCurIP.c_str(),GetPlayer()->GetSessionID()) ;
			}
			else
			{
				LOGFMTE("cant not request client ip , uid = %d",GetPlayer()->GetUserUID()) ;
			}
		}
		break;
	case MSG_SHOP_BUY_ITEM_ORDER:
		{
			stMsgPlayerShopBuyItemOrder* pRet = (stMsgPlayerShopBuyItemOrder*)pMsg ;
			stMsgPlayerShopBuyItemOrderRet msgBack ;
			msgBack.nChannel = pRet->nChannel ;
			msgBack.nShopItemID = pRet->nShopItemID ;
			msgBack.nRet = 0 ;
			memset(msgBack.cOutTradeNo,0,sizeof(msgBack.cOutTradeNo)) ;
			memset(msgBack.cPrepayId,0,sizeof(msgBack.cPrepayId)) ;
			CShopConfigMgr* pMgr = (CShopConfigMgr*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Shop);
			stShopItem* pItem = pMgr->GetShopItem(pRet->nShopItemID);
			if ( pItem == nullptr )
			{
				msgBack.nRet = 1 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				LOGFMTE("can not find shop item , for order uid = %d",GetPlayer()->GetUserUID()) ;
				break;
			}

			if ( msgBack.nChannel != ePay_WeChat )
			{
				msgBack.nRet = 4 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				LOGFMTE("current must be wechat channel for order channel = %d, uid = %d",msgBack.nChannel,GetPlayer()->GetUserUID() );
				break;
			}

			if ( m_strCurIP.empty() )
			{
				msgBack.nRet = 2 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				LOGFMTE("cur rent ip = null , for order uid = %d",GetPlayer()->GetUserUID()) ;
				break;
			}

			stMsgVerifyItemOrder msgOrder ;
			memset(msgOrder.cShopDesc,0,sizeof(msgOrder.cShopDesc));
			sprintf_s(msgOrder.cShopDesc,sizeof(msgOrder.cShopDesc),"%s",pItem->strItemName.c_str()) ;

			memset(msgOrder.cOutTradeNo,0,sizeof(msgOrder.cOutTradeNo));
			sprintf_s(msgOrder.cOutTradeNo,sizeof(msgOrder.cOutTradeNo),"%dE%dE%u",pItem->nShopItemID,GetPlayer()->GetUserUID(),(uint32_t)time(nullptr)) ;
			
			msgOrder.nPrize = pItem->nPrize * 100 ; 
			msgOrder.nChannel = pRet->nChannel ;

			memset(msgOrder.cTerminalIp,0,sizeof(msgOrder.cTerminalIp));
			sprintf_s(msgOrder.cTerminalIp,sizeof(msgOrder.cTerminalIp),"%s",m_strCurIP.c_str()) ;
			
			SendMsg(&msgOrder,sizeof(msgOrder)) ;
			LOGFMTI("order shop item to verify shop item = %d , uid = %d",pItem->nShopItemID,GetPlayer()->GetUserUID()) ;
		} 
		break;
	case MSG_VERIFY_ITEM_ORDER:
		{
			stMsgVerifyItemOrderRet* pRet = (stMsgVerifyItemOrderRet*)pMsg ;
			stMsgPlayerShopBuyItemOrderRet msgBack ;
			memset(msgBack.cOutTradeNo,0,sizeof(msgBack.cOutTradeNo)) ;
			memset(msgBack.cPrepayId,0,sizeof(msgBack.cPrepayId)) ;
			msgBack.nChannel = pRet->nChannel ;
			
			std::string strTradeNo(pRet->cOutTradeNo,sizeof(pRet->cOutTradeNo));
			std::string shopItem = strTradeNo.substr(0,strTradeNo.find_first_of('E')) ;
			if ( shopItem.empty() )
			{
				msgBack.nShopItemID = 0 ;
				LOGFMTE("outTradeNo shop item is null , uid = %d",GetPlayer()->GetUserUID()) ;
			}
			else
			{
				msgBack.nShopItemID = atoi(shopItem.c_str()) ;
			}
			
			if ( pRet->nRet )
			{
				msgBack.nRet = 3 ;
			}
			else
			{
				msgBack.nRet = 0;
				memcpy(msgBack.cOutTradeNo,pRet->cOutTradeNo,sizeof(pRet->cOutTradeNo));
				memcpy(msgBack.cPrepayId,pRet->cPrepayId,sizeof(pRet->cPrepayId));
			}
			LOGFMTI("shopitem id = %d shop order ret = %d, uid = %d",msgBack.nShopItemID,pRet->nRet,GetPlayer()->GetUserUID()) ;
			SendMsg(&msgBack,sizeof(msgBack)) ;
		}
		break;
	case MSG_BUY_SHOP_ITEM:
		{
			stMsgPlayerBuyShopItem* pRet = (stMsgPlayerBuyShopItem*)pMsg ;
			CShopConfigMgr* pMgr = (CShopConfigMgr*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Shop);
			stShopItem* pItem = pMgr->GetShopItem(pRet->nShopItemID);
			
			
			stMsgPlayerBuyShopItemRet msgBack ;
			msgBack.nBuyShopItemForUserUID = pRet->nBuyShopItemForUserUID ;
			msgBack.nDiamoned = 0 ;
			msgBack.nSavedMoneyForVip = 0 ;
			msgBack.nShopItemID = pRet->nShopItemID ;
			msgBack.nRet = 0 ;

			if( pItem == nullptr )
			{
				LOGFMTE("uid = %u buy shop id = %u not exsit",GetPlayer()->GetUserUID(),pRet->nShopItemID) ;
				msgBack.nRet = 5 ;
				msgBack.nDiamoned = GetAllDiamoned();
				msgBack.nFinalyCoin = GetAllCoin() ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				break;
			}

			if ( 0 == pItem->nPrizeType )
			{
				stMsgToVerifyServer msgVerify ;
				msgVerify.nBuyerPlayerUserUID = GetPlayer()->GetUserUID();
				msgVerify.nBuyForPlayerUserUID = msgVerify.nBuyerPlayerUserUID ;
				msgVerify.nMiUserUID = pRet->nMiUserUID ;
				msgVerify.nShopItemID = pRet->nShopItemID ;
				msgVerify.nTranscationIDLen = pRet->nBufLen ;
				msgVerify.nChannel = pRet->nChannelID ;

				CAutoBuffer buffer(sizeof(stMsgPlayerBuyShopItem) + pRet->nBufLen ) ;
				buffer.addContent(&msgVerify,sizeof(msgVerify));
				buffer.addContent(((char*)pRet) + sizeof(stMsgPlayerBuyShopItem),pRet->nBufLen);
				SendMsg((stMsg*)buffer.getBufferPtr(),buffer.getContentSize());
				break;
			}

			 // 0 RMB ,1 diamoned ,2 coin ;

			// do diamond purchase
			if ( pItem->nPrize > GetAllDiamoned() )
			{
				msgBack.nRet = 1 ;
				msgBack.nDiamoned = GetAllDiamoned();
				msgBack.nFinalyCoin = GetAllCoin() ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				LOGFMTD("uid = %u buy item diamond is not enough shop id = %u" , GetPlayer()->GetUserUID(),pItem->nShopItemID) ;
				break;
			}

			if ( pRet->nShopItemID == 16 )
			{
				LOGFMTI("uid = %d buy a vip card month card ",GetPlayer()->GetUserUID()) ;
				updateCardLife();
				if ( eCard_LV1 == m_stBaseData.nCardType )
				{
					m_stBaseData.nCardEndTime = m_stBaseData.nCardEndTime + 60 * 60 * 24 * 31;
				}
				else if ( eCard_LV1 < m_stBaseData.nCardType )
				{
					msgBack.nRet = 6 ;
					msgBack.nDiamoned = GetAllDiamoned();
					msgBack.nFinalyCoin = GetAllCoin() ;
					SendMsg(&msgBack,sizeof(msgBack)) ;
					LOGFMTD("uid = %u buy item eCard_LV1 < m_stBaseData.nCardType shop id = %u" , GetPlayer()->GetUserUID(),pItem->nShopItemID) ;
					break;
				}
				else
				{
					m_stBaseData.nCardEndTime = time(nullptr) + 60 * 60 * 24 * 31;
				}

				m_stBaseData.nCardType = eCard_LV1 ;
				m_bCommonLogicDataDirty = true ;
			}
			else if ( 17 == pRet->nShopItemID )
			{
				LOGFMTI("uid = %d buy a vip card month card ",GetPlayer()->GetUserUID()) ;
				updateCardLife();
				if ( eCard_LV2 == m_stBaseData.nCardType )
				{
					m_stBaseData.nCardEndTime = m_stBaseData.nCardEndTime + 60 * 60 * 24 * 31;
				}
				else if ( eCard_LV2 < m_stBaseData.nCardType )
				{
					msgBack.nRet = 6 ;
					msgBack.nDiamoned = GetAllDiamoned();
					msgBack.nFinalyCoin = GetAllCoin() ;
					SendMsg(&msgBack,sizeof(msgBack)) ;
					LOGFMTD("uid = %u buy item eCard_LV2 < m_stBaseData.nCardType shop id = %u" , GetPlayer()->GetUserUID(),pItem->nShopItemID) ;
					break;
				}
				else
				{
					m_stBaseData.nCardEndTime = time(nullptr) + 60 * 60 * 24 * 31;
				}
				m_stBaseData.nCardType = eCard_LV2 ;
				m_bCommonLogicDataDirty = true ;
			}
			else
			{
				LOGFMTD("player uid = %u buy coin use diamond",GetPlayer()->GetUserUID());
				AddMoney(pItem->nCount);
			}
			decressMoney(pItem->nPrize,true) ;
			msgBack.nDiamoned = GetAllDiamoned();
			msgBack.nFinalyCoin = GetAllCoin() ;
			SendMsg(&msgBack,sizeof(msgBack)) ;
			LOGFMTD("uid = %u buy item ok shop id = %u" , GetPlayer()->GetUserUID(),pItem->nShopItemID) ;
			break;
		}
		break;
	case MSG_VERIFY_TANSACTION:
		{
			stMsgFromVerifyServer* pRet = (stMsgFromVerifyServer*)pMsg ;
			stMsgPlayerBuyShopItemRet msgBack ;
			msgBack.nBuyShopItemForUserUID = pRet->nBuyForPlayerUserUID ;
			msgBack.nDiamoned = 0 ;
			msgBack.nSavedMoneyForVip = 0 ;
			msgBack.nShopItemID = pRet->nShopItemID ;
			msgBack.nRet = 0 ;
			if ( pRet->nRet == 4 ) // success 
			{
				{
					CShopConfigMgr* pMgr = (CShopConfigMgr*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Shop);
					stShopItem* pItem = pMgr->GetShopItem(pRet->nShopItemID);
					if ( pItem == nullptr )
					{
						msgBack.nRet = 5 ;
						LOGFMTE("can not find shop id = %d , buyer uid = %d",pRet->nShopItemID,pRet->nBuyerPlayerUserUID) ;
					}
					else
					{
						AddMoney(pItem->nCount,true) ;
						LOGFMTI("add coin with shop id = %d for buyer uid = %d ",pRet->nShopItemID,pRet->nBuyerPlayerUserUID) ;
					}
				}

				// save log 
				stMsgSaveLog msgLog ;
				memset(msgLog.vArg,0,sizeof(msgLog.vArg));
				msgLog.nJsonExtnerLen = 0 ;
				msgLog.nLogType = eLog_Purchase ;
				msgLog.nTargetID = GetPlayer()->GetUserUID() ;
				memset(msgLog.vArg,0,sizeof(msgLog.vArg)) ;
				msgLog.vArg[0] = GetAllCoin() ;
				msgLog.vArg[1] = pRet->nShopItemID ;
				SendMsg(&msgLog,sizeof(msgLog)) ;
			}
			else
			{
				msgBack.nRet = 2 ;
				LOGFMTE("uid = %d ,shop id = %d , verify error ",pRet->nBuyerPlayerUserUID,pRet->nShopItemID) ;
			}

			msgBack.nDiamoned = GetAllDiamoned();
			msgBack.nFinalyCoin = GetAllCoin() ;
			SendMsg(&msgBack,sizeof(msgBack)) ;
		}
		break;
	case MSG_ON_PLAYER_BIND_ACCOUNT:
		{
			m_stBaseData.isRegister = true ;
			m_bPlayerInfoDataDirty = true ;
			LOGFMTD("player bind account ok uid = %u",GetPlayer()->GetUserUID());
		}
		break;
	case MSG_READ_PLAYER_BASE_DATA:   // from db server ;
		{
			stMsgDataServerGetBaseDataRet* pBaseData = (stMsgDataServerGetBaseDataRet*)pMsg ;
			if ( pBaseData->nRet )
			{
				LOGFMTE("do not exsit playerData") ;
				return true; 
			}
			memcpy(&m_stBaseData,&pBaseData->stBaseData,sizeof(m_stBaseData));
			LOGFMTD("recived base data uid = %d",pBaseData->stBaseData.nUserUID);
			nReadingDataFromDB = 2 ;
			SendBaseDatToClient();
			CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->getPlayerDataCaher().removePlayerDataCache(pBaseData->stBaseData.nUserUID) ;
			return true ;
		}
		break;
//	case MSG_PLAYER_REQUEST_NOTICE:
//		{
//// 			CGameServerApp::SharedGameServerApp()->GetBrocaster()->SendInformsToPlayer(GetPlayer()) ;
//// 			CInformConfig* pConfig = (CInformConfig*)CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetConfig(CConfigManager::eConfig_Informs) ;
//// 			m_stBaseData.nNoticeID = pConfig->GetMaxInformID();
//		}
//		break;
	case MSG_PLAYER_MODIFY_SIGURE:
		{
			stMsgPLayerModifySigure* pMsgRet = (stMsgPLayerModifySigure*)pMsg ;
			memcpy(m_stBaseData.cSignature,pMsgRet->pNewSign,sizeof(m_stBaseData.cSignature));
			stMsgPlayerModifySigureRet ret ;
			ret.nRet = 0 ;
			SendMsg(&ret,sizeof(ret)) ;
			m_bPlayerInfoDataDirty = true ;
		}
		break;
	case MSG_PLAYER_MODIFY_NAME:
		{
			stMsgPLayerModifyName* pMsgRet = (stMsgPLayerModifyName*)pMsg ;
			stMsgPlayerModifyNameRet ret ;
			ret.nRet = 0 ;
			memcpy(ret.pName,pMsgRet->pNewName,sizeof(ret.pName));
			if ( pMsgRet->pNewName[sizeof(pMsgRet->pNewName) -1 ] != 0 )
			{
				ret.nRet = 1 ;
				LOGFMTE("name is too long uid = %d",GetPlayer()->GetUserUID());
			}
			else if ( strcmp(pMsgRet->pNewName,m_stBaseData.cName) == 0 )
			{

			}
			else
			{
				memcpy(m_stBaseData.cName,pMsgRet->pNewName,sizeof(m_stBaseData.cName)) ;
				m_bPlayerInfoDataDirty = true ;
			}
			SendMsg(&ret,sizeof(ret)) ;
		}
		break;
	case MSG_PLAYER_MODIFY_PHOTO:
		{
			stMsgPlayerModifyPhoto* pPhoto = (stMsgPlayerModifyPhoto*)pMsg ;
			m_stBaseData.nPhotoID = pPhoto->nPhotoID ;
			stMsgPlayerModifyPhotoRet msgRet ;
			msgRet.nRet = 0 ;
			SendMsg(&msgRet,sizeof(msgRet)) ;
			m_bPlayerInfoDataDirty = true ;
		}
		break;
	case MSG_PLAYER_MODIFY_SEX:
		{
			stMsgPlayerModifySex* pRet = (stMsgPlayerModifySex*)pMsg ;
			m_stBaseData.nSex = pRet->nNewSex ;
			stMsgPlayerModifySexRet msgback ;
			msgback.nRet = 0 ;
			SendMsg(&msgback,sizeof(msgback)) ;
			m_bPlayerInfoDataDirty = true ;
			LOGFMTI("change sex uid = %d , new sex = %d",GetPlayer()->GetUserUID(),pRet->nNewSex) ;
		}
		break;
	case MSG_PLAYER_UPDATE_MONEY:
		{
 			stMsgPlayerUpdateMoney msgUpdate ;
 			msgUpdate.nFinalCoin = GetAllCoin();
 			msgUpdate.nFinalDiamoned = GetAllDiamoned();
			msgUpdate.nCupCnt = m_stBaseData.nCupCnt ;
 			SendMsg(&msgUpdate,sizeof(msgUpdate));
		}
		break;
	case MSG_GET_CONTINUE_LOGIN_REWARD:
		{
// 			stMsgGetContinueLoginReward* pGetR = (stMsgGetContinueLoginReward*)pMsg ;
// 			stMsgGetContinueLoginRewardRet msgBack ;
// 			msgBack.nRet = 0 ; //  // 0 success , 1 already getted , 2 you are not vip  ;
// 			msgBack.cRewardType = pGetR->cRewardType;
// 			msgBack.nDayIdx = m_stBaseData.nContinueDays ;
// 			msgBack.nDiamoned = GetAllDiamoned();
// 			msgBack.nFinalCoin = GetAllCoin() ;
// 			if ( m_bGivedLoginReward )
// 			{
// 				msgBack.nRet = 1 ; 
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				break;
// 			}
// 
// 			stConLoginConfig* pConfig = CGameServerApp::SharedGameServerApp()->GetConfigMgr()->GetContinueLoginConfig()->GetConfigByDayIdx(m_stBaseData.nContinueDays) ;
// 			if ( pConfig == NULL )
// 			{
// 				LOGFMTE("there is no login config for dayIdx = %d",m_stBaseData.nContinueDays ) ;
// 				msgBack.nRet = 4 ;
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				break;
// 			}
// 
// 			// give item  deponed on nContinuedDays ;
// 			if (pGetR->cRewardType == 1 )
// 			{
// 				if ( GetVipLevel() < 1 )
// 				{
// 					msgBack.nRet = 2 ;
// 					SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 					break;
// 				}
// 				// give item ;
// 				for ( int i = 0 ; i < pConfig->vItems.size(); ++i )
// 				{
// 					CPlayerItemComponent* pc = (CPlayerItemComponent*)GetPlayer()->GetComponent(ePlayerComponent_PlayerItemMgr) ;
// 					pc->AddItemByID(pConfig->vItems[i].nItemID,pConfig->vItems[i].nCount) ;
// 				}
// 				// give vip prize ;
// 				m_stBaseData.nDiamoned += pConfig->nDiamoned ;
// 				msgBack.nDiamoned = GetAllDiamoned();
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				m_bGivedLoginReward = true ;
// 				break;
// 			}
// 			else if( pGetR->cRewardType == 0 )
// 			{
// 				// gvie common prize ;
// 				m_stBaseData.nCoin += pConfig->nGiveCoin ;
// 				msgBack.nFinalCoin = GetAllCoin() ;
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				m_bGivedLoginReward = true ;
// 				break;
// 			}
// 			else
// 			{
// 				msgBack.nRet = 3 ;
// 				SendMsgToClient((char*)&msgBack,sizeof(msgBack)) ;
// 				break;
// 			}
		}
		break;
	case MSG_PLAYER_REQUEST_CHARITY_STATE:
		{
 			stMsgPlayerRequestCharityStateRet msgBack ;
 			 // 0 can get charity , 1 you coin is enough , do not need charity, 2 time not reached ;
 			msgBack.nState = 0 ;

			// check times limit state ;
			time_t tNow = time(nullptr) ;
			struct tm pTimeCur, pTimeLast ;
			pTimeCur = *localtime(&tNow);
			time_t nLastTakeTime = m_stBaseData.tLastTakeCharityCoinTime;
			pTimeLast = *localtime(&nLastTakeTime);
			if ( pTimeCur.tm_year == pTimeLast.tm_year && pTimeCur.tm_yday == pTimeLast.tm_yday ) // the same day ; do nothing
			{

			}
			else
			{
				m_stBaseData.nTakeCharityTimes = 0 ; // new day reset times ;
			}

			msgBack.nLeftTimes = TIMES_GET_CHARITY_PER_DAY - m_stBaseData.nTakeCharityTimes ;
			if ( GetAllCoin() > COIN_CONDITION_TO_GET_CHARITY )
			{
				msgBack.nState = 1 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				break;
			}

			if ( m_stBaseData.nTakeCharityTimes >= TIMES_GET_CHARITY_PER_DAY  )
			{
				msgBack.nState = 2 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				break;
			}
 			SendMsg(&msgBack,sizeof(msgBack)) ;
		}
		break;
	case MSG_PLAYER_GET_CHARITY:
		{
 			stMsgPlayerGetCharityRet msgBack ;
 			// 0 success ,  1 you coin is enough , do not need charity, 2 time not reached ;
 			msgBack.nRet = 0 ;
 			msgBack.nFinalCoin = GetAllCoin();
 			msgBack.nGetCoin = 0;
 			msgBack.nLeftTimes = 0 ;
 			if ( GetAllCoin() > COIN_CONDITION_TO_GET_CHARITY )  
 			{
				msgBack.nRet = 1 ;
 				SendMsg(&msgBack,sizeof(msgBack)) ;
				break;
 			}
			
			// check times limit state ;
			time_t tNow = time(nullptr) ;
			struct tm pTimeCur ;
			struct tm pTimeLast ;
			pTimeCur = *localtime(&tNow);
			time_t nLastTakeTime = m_stBaseData.tLastTakeCharityCoinTime;
			pTimeLast = *localtime(&nLastTakeTime);
			if ( pTimeCur.tm_year == pTimeLast.tm_year && pTimeCur.tm_yday == pTimeLast.tm_yday ) // the same day ; do nothing
			{

			}
			else
			{
				m_stBaseData.nTakeCharityTimes = 0 ; // new day reset times ;
			}

 			if ( m_stBaseData.nTakeCharityTimes >= TIMES_GET_CHARITY_PER_DAY  )
 			{
				msgBack.nRet = 2 ;
				SendMsg(&msgBack,sizeof(msgBack)) ;
				break;
 			}
 
			++m_stBaseData.nTakeCharityTimes;
			msgBack.nGetCoin = COIN_FOR_CHARITY;
			msgBack.nLeftTimes = TIMES_GET_CHARITY_PER_DAY - m_stBaseData.nTakeCharityTimes ;
			m_stBaseData.tLastTakeCharityCoinTime = time(NULL) ;
			AddMoney(msgBack.nGetCoin);
			msgBack.nFinalCoin = GetAllCoin();
			LOGFMTD("player uid = %d get charity",GetPlayer()->GetUserUID());
			m_bCommonLogicDataDirty = true ;
			m_bMoneyDataDirty = true ;

			// save log 
			stMsgSaveLog msgLog ;
			memset(msgLog.vArg,0,sizeof(msgLog.vArg));
			msgLog.nJsonExtnerLen = 0 ;
			msgLog.nLogType = eLog_GetCharity ;
			msgLog.nTargetID = GetPlayer()->GetUserUID() ;
			memset(msgLog.vArg,0,sizeof(msgLog.vArg)) ;
			msgLog.vArg[0] = GetAllCoin() ;
			SendMsg(&msgLog,sizeof(msgLog)) ;

			LOGFMTI("uid = %d , final coin = %I64d",GetPlayer()->GetUserUID(),GetAllCoin());
 			SendMsg(&msgBack,sizeof(msgBack)) ;
		}
		break;
	default:
		{
			return false ;
		}
		break;
	}
	return true ;
}