Пример #1
0
void UserLogin::handle_WG_UserLogin(Event* e)
{
	const NewStar_Rsp& rsp = e->newstarrsp();
	const UserLogin_Req& req = e->userlogin_req();
	int64 uid = req.uid();
	if(uid<=0)
		return;
	int nPhysicsRegion = getPhysicsRegion(uid);
	//判断所属物理分区是否正确
	if(nPhysicsRegion != serverConfig.GetPhysiceRegionByGame(eh_->GetSrvID()))
		return;
	GameDataHandler* dh = eh_->getDataHandler();

	const string& platid = req.platform_id();
	int siteid = req.siteid();
	const string& name = req.name();
	const string& profile_link = req.profile_link();
	int gender = (req.gender() == 0) ? Gender_Girl : Gender_Boy ;
	vector<string> friends_platid;
	for (int i = 0; i < req.friends_platid_size(); i ++)
	{
		friends_platid.push_back(req.friends_platid(i));
	}
	bool isYellowDmd = req.is_yellow_dmd();
	bool isYellowDmdYear = req.is_yellow_dmd_year();
	int lvlYellowDmd = req.yellow_dmd_lv();
	bool isHighYellowDmd = req.is_high_yellow_dmd();
	bool isHighDmdYear = req.is_high_dmd_year();
	int nBlueTime = req.bluetime();
	int nBlueYearTime = req.blueyeartime();
	int nHighBlueTime = req.highbluetime();
	int nHighYearTime = req.highblueyeartime();

	int webfd = req.webfd();
	string sid = req.sid();
	int region = req.region();
	int nCity  = req.city();
	string strVIA = req.via();	//玩家渠道
	bool isRecall = req.isrecall();
	int nCustomFlag = req.customflag();
	int nBackFlowFlag = req.nbackflowflag();
	const WebCrossPromotion* pWebPromotion = e->mutable_userlogin_req()->mutable_promotion();
	string strChanel = pWebPromotion->chanle();
	LOG4CXX_INFO(logger_, "World request UserLogin with openid: " << platid);
	//if(dh->GetUserID(platid,region)!=uid)
	//{
	//	dh->AddUserID(platid,region,uid);
	//}
	LoadStatus state = LOAD_INVALID;
	User* user = processUserLogin(uid,platid, siteid, name, profile_link, gender,
		friends_platid, isYellowDmd, isYellowDmdYear, lvlYellowDmd, state,
		region,nCity,req.isnewplayer(),strVIA,isHighYellowDmd,strChanel,isHighDmdYear,nBlueTime,nBlueYearTime,nHighBlueTime,nHighYearTime,
		rsp.id(), rsp.name(), rsp.type(), rsp.sku());
	if (user != NULL)
	{
		UserLogin_Rsp* rsp = e->mutable_userlogin_rsp();
		rsp->set_server(eh_->getServerIp());
		rsp->set_port(eh_->getServerPort());
		rsp->set_port1(eh_->getServerPort1());
		rsp->set_uid(user->GetUid());
		rsp->set_secret(user->secret(eh_->getReversion()));
		rsp->set_webfd(webfd);
		rsp->set_sid(sid);
		rsp->set_region(region);
		rsp->set_mainload("0");//此项已失效
		rsp->set_version(FlashVersionCfg::Instance().GetCfgVersion(eh_->GetSrvID()));
		rsp->set_gettime(req.gettime());
		rsp->set_platform_id(req.platform_id());
		rsp->set_playerlvl(user->GetUserLevel());
		rsp->set_logintimes(IsSameDay(user->GetLastLoginTime(),time(NULL))?1:0);
		rsp->set_isnewplayer(req.isnewplayer());
		rsp->set_customflag(req.customflag());
		rsp->set_channel(strChanel);
#if 0
		user->SetUndealGiftCount(req.undealgiftcnt());
		user->SetUndealFrdGiftCount(req.undealfrdgiftcnt());
		user->SetInviteFrdCnt(req.invitefrdcnt());
		user->SetDayInviteFrdCnt(req.invitefrdcntday());
		user->SetDayWebGiftSendCnt(req.daysendgiftcnt());
		user->SetChannel(strChanel);
		user->GetDbUser().set_badult((req.nadultflag() >= 100)?true : false);

		bool bIsNewInvite = false;
		if (user->SetPlatInviteFriendOpenid(req.invitefriendid()))
		{
			bIsNewInvite = true;
		}
		user->GetDbUser().mutable_player()->set_yellowdmdtime(req.yellowdmdtime());

		if (req.isnewplayer() && bIsNewInvite)
		{
			HttpRequireHandler::Instance().SafePushHttpAcceptToQQ(user, user->GetPlattype());
		}
		else if (req.isnewplayer())
		{
			HttpRequireHandler::Instance().SafePushHttpSelfRegistToQQ(user, user->GetPlattype());
		}
		HttpRequireHandler::Instance().SafePushHttpLogOnToQQ(user, user->GetPlattype());

		user->GetDbUser().set_isactivelogon( req.isapp51act() );

		RceInviteFriend* pinviteMsg = e->mutable_ce_rceinvitefriend();
		user->GetPlayer()->SetInviteFrdCntGain(pinviteMsg->friendcount(),pinviteMsg->giftgain());

		//交叉推广
		//if(strChanel.size()>0)
		//{
		//	user->m_mapChanlelFirst[strChanel] += 1;
		//}
		user->SetCrossPromotion(pWebPromotion);

		for ( int i = 0; i < req.invitegiftrecord_size(); i++ )
		{
			DB_InvitedFriendLvGift* pDBInvitedFriendLvGift = user->GetPlayer()->GetDBInvitedFriendLvGift(req.invitegiftrecord(i));
			if ( pDBInvitedFriendLvGift == NULL )
			{
				continue;
			}

			pDBInvitedFriendLvGift->set_hasget( true );
		}
#endif

		e->clear_userlogin_req();
		e->set_state(UserLogin_GW_Rsp);
		eh_->sendEventToWorld(e);


		user->InitRc4Key(rsp->logintimes(),sid);

#if 0
		if(user->GetUserLevel() != req.level())
		{
			eh_->SendUserInfo2Plat(user,UpdatePlat_Level);
		}
		//if(user->GetPlayer()->GetDBPlayer()->invite_platid_size()>0)
		//{//分服前后数据同步
		//	eh_->SendUserInfo2Plat(user,1);
		//	user->GetPlayer()->GetDBPlayer()->clear_invite_platid();
		//}

		//召回老友统计
		if ( isRecall )
		{
			SYS_UserStat(user,false,"CallBackFrdBack",1,"","","");
		}

		if ( nCustomFlag > 0 )
		{
			//2015.03.10空间广告位回流
			const CostGiftTbl *pCostTbl = CostGiftCfg::Instance().GetCostGiftTbl(10098);
			DB_QQBackFlow* pDBQQBackFlow = user->GetPlayer()->GetDBPlayer()->mutable_qqrightbackflowflag();
			if (pCostTbl != NULL &&
				pCostTbl->IsCurrentTime() &&
				pDBQQBackFlow != NULL &&
				pDBQQBackFlow->actflag() != pCostTbl->m_tBeginTime)
			{
				//user->GetPlayer()->GetDBPlayer()->set_customflagtime( time(NULL) );
				SYS_LOG(user->GetPlayer()->GetUserID(),LT_COST_GIFT_CUSTOM_FLAG,0,0,0);
				pDBQQBackFlow->Clear();
				pDBQQBackFlow->set_actflag(pCostTbl->m_tBeginTime);
				pDBQQBackFlow->set_curstate(1);
			}
		}

		if (nBackFlowFlag == 1)
		{//空间顶部应用墙回流
			if ( user->GetPlayer()->GetDBPlayer()->qqtopbackflowflag() == 0)
			{
				user->GetPlayer()->GetDBPlayer()->set_qqtopbackflowflag(1);
			}
		}
		else if (nBackFlowFlag == 2)
		{//空间顶部应用墙回流
			if ( user->GetPlayer()->GetDBPlayer()->qqleftbackflowflag() == 0)
			{
				user->GetPlayer()->GetDBPlayer()->set_qqleftbackflowflag(1);
			}
		}
		else if (nBackFlowFlag == 4)
		{
			if(user->GetPlayer()->GetDBPlayer()->qqtenyearbackflowflag() == 0)
			{
				user->GetPlayer()->GetDBPlayer()->set_qqtenyearbackflowflag(1);
			}
		}

		if ( bIsNewInvite )
		{
			ConstantSetUnit* pUnit = GameConstantSetCfg::Instance().GetGameConstantSet(E_GAMECONSTANTSET_DEF_HOLIDAY_INVITE);
			if ( pUnit != NULL )
			{
				time_t now = time(NULL);
				time_t tBeginTime = GetDayTimeByStr( pUnit->m_strArgs[0].c_str(), pUnit->m_strArgs[1].c_str() );
				time_t tEndTime   = GetDayTimeByStr( pUnit->m_strArgs[2].c_str(), pUnit->m_strArgs[3].c_str() );

				if( now >= tBeginTime && now <= tEndTime )
				{
					user->GetPlayer()->GetDBPlayer()->set_canholidayinvitegiftsend(true);
				}
			}
		}

		user->GetPlayer()->GetDBPlayer()->set_qqtaskstep( req.qqtaskstep() );
#endif
		dh->markUserDirty(user);
	}
	else
	{
		if (state == LOAD_WAITING)
		{
			eh_->postBackEvent(e);
		}
	}
}
Пример #2
0
void UserLogin::HandleUserLogout(Event* e)
{

    int64 nUserID = e->uid();
    switch (e->state())
    {
        case Status_Normal_Game:
        {
            GameDataHandler* dh = eh_->getDataHandler();
            User* pUser = dh->getUser(nUserID, NULL, false);
            if (pUser == NULL)
            {
                return;
            }
            WG_UserLeave* pUserLeave = e->mutable_wg_userleave();
            if (pUserLeave->fd() != pUser->fd())
                return;

            pUser->setOnline(false);
//			pUser->OnUserOnOffLine();
			dh->PopOnlineUserID(pUser->GetUid());
//			pUser->GetPlayer()->SetInviteUserID(0,false);

			//pUser->SetFriendCache(pUser->GetPlattype(), dh);
//			pUser->SetGameStarCache(pUser->GetPlattype(),dh,true);
			
			if(pUser->GetPlayer()->IsAttacking()){
				eh_->PushEventAttackFalse(pUser);
			}

			pUser->setFd(0);
           
            time_t lt = time(NULL) - pUser->GetLastLoginTime();

			//设置离线保护时间
// 			if ( pUser->GetPlayer() != NULL )
// 			{
// 				GameDataHandler* pUserManager = eh_->getDataHandler();
// 				GameStarInfo* pStar = pUserManager->getGameStarInfo(pUser->GetUid());
// 				if( pStar == NULL )
// 				{
// 					return;
// 				}
// 				int nProtectTm = 60;
// 				pStar->m_pPlayerBase->set_logoutsafetime((int)(time(NULL) + nProtectTm));
// 				pUser->GetPlayer()->SetLogoutProtectTm( nProtectTm );
// 			}
// 			
// 			SYS_LOG(nUserID, LT_LogOut, 0, 0, lt << pUser->GetUserLevel()
// 				<<pUser->GetPlayer()->GetBaseValue()<<pUser->GetPlayer()->GetBasePoint()
// 				<<pUser->GetPlayer()->GetResCnt(RC_Metal)<<pUser->GetPlayer()->GetResCnt(RC_Oil)
// 				<<pUser->GetPlayer()->GetCredit());
// 			SYS_UserStat(pUser,false,"LogOut","","","",lt,
// 				pUser->GetResStat()->m_nAddMedal,pUser->GetResStat()->m_nAddOil
// 				,pUser->GetResStat()->m_nCostMedal,pUser->GetResStat()->m_nCostOil,
// 				pUser->GetResStat()->m_nPickMedal,pUser->GetResStat()->m_nPickOil);
// 			int nTotalLV = pUser->GetPlayer()->CacuScienceTotalLV();
// 			/*if(nTotalLV>20)
// 			{
// 				SYS_UserStat4WebRank(pUser,"RankScience","",nTotalLV);
// 			}*/
// 
// 			CMsg2QQ::GetInstance()->TellMsg(MQ_Logout,pUser,0,0,0);
// 
// 			Player* pPlayer = pUser->GetPlayer();
// 			
// 			if ( ServerStatMgr::Instance().GetStatUser(nUserID) )
// 			{
// 				pPlayer->SendServerStat( lt );
// 			}
// 
//             HttpRequireHandler::Instance().SafePushHttpLogOutToQQ(pUser, pUser->GetPlattype());

			dh->markUserDirty(pUser);
		}
	}
}