void RceUpdateSocialItemHandle::handle(Event* e)
{
	int64 uid = e->uid();
	GameDataHandler* pUserManager = eh_->getDataHandler();
	if(!pUserManager)
	{
		return;
	}
	User *pUser = pUserManager->getUser(uid);
	if ( !pUser)
	{
		return;
	}

	Player* pPlayer = pUser->GetPlayer();
	if ( !pPlayer || !pPlayer->CanUse())
	{
		return ;
	}

	RceUpdateSocialItem* req = e->mutable_ce_rceupdatesocialitem();
	if( !req )
	{
		return;
	}

	RseUpdateSocialItem rse;
	rse.set_ret(RseUpdateSocialItemRet_Success);
	
	int planetId = req->planetid();
	string strAction = req->action();
	MsgTransaction* MT = req->mutable_transaction();
	if(MT)
	{
		for(int i = 0;i<MT->socialitems_size();i++)
		{
			MsgSocialItems* MSI = MT->mutable_socialitems(i);
			if(!pPlayer->CostSocialItem(MSI->sku(), 1))
			{
				SendRet2User(pUser,RseUpdateSocialItemRet_SocialItemNotEnough,rse);
			}
		}
	}

	if(strAction == "nextStep")
	{
		int quantity = 0;
		int tm = 0;
		if(req->postion() == 1)//爆出物品
		{
			CFG_Item* Tbl = ItemTblInst::instance().GetItem(req->sku());
			if(!Tbl)
				return;
			string givenCondition = Tbl->givenCondition;
			tm = Tbl->timeToGive * 1000;
			string currentCount = toString(req->currentcount());
			if(givenCondition.find("listSequence") >= 0 &&givenCondition.find("listSequence") <= givenCondition.size()&& givenCondition.find(currentCount))
			{
				quantity = 1;
			}
		}
		if(!pPlayer->AddSocialItem(req->sku(),quantity,req->currentquantity(),tm))
		{
			SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse);
			return;
		}
		SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
		eh_->getDataHandler()->markUserDirty(pUser);
	}
	else if(strAction == "addItem")
	{
		MsgSocialItems* MSI = NULL;
		for(int i = 0;i<MT->socialitems_size();i++)
		{
			MSI = MT->mutable_socialitems(i);
			if(!pPlayer->AddSocialItem(MSI->sku(),req->currentquantity()))
			{
				SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse);
				return ;
			}
		}
		eh_->getDataHandler()->markUserDirty(pUser);
		SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
	}
	else if(strAction == "useItem")
	{
		DB_Model* model = pPlayer->GetDBPlayer()->mutable_model();
		int Sku = 0;
		string randomSku = req->num();
		safe_atoi(req->sku(),Sku);
		DB_SocialItem* pDBSI = pPlayer->GetSocialItem(req->sku());
		if(!pDBSI || !model)
		{
			SendRet2User(pUser,RseUpdateSocialItemRet_SocialItemNotEnough,rse);
			return;
		}

		if(Sku == SocialItem_worker_freeWorker)//雇佣工人
		{
			if(!pPlayer->AddDroid(planetId))
			{
				SendRet2User(pUser,RseUpdateSocialItemRet_AddDroidFailed,rse);
				return;
			}
			SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
			return;
		}

		if(Sku >= SocialItem_coins && Sku <= 5006)
		{
			switch (Sku) {
			case SocialItem_coins:// 金币×1000
				pPlayer->CostRes(RC_Coin,1000);
				break;
			case SocialItem_minerals:// 矿石×1000
				pPlayer->CostRes(RC_Mineral,1000);;
				break;
			case 5003:// 金币×10000
				pPlayer->CostRes(RC_Coin,10000);
				break;
			case 5004:// 金币×100000
				pPlayer->CostRes(RC_Coin,100000);
				break;
			case 5005:// 矿石×10000
				pPlayer->CostRes(RC_Mineral,10000);
				break;
			case 5006:// 矿石×100000
				pPlayer->CostRes(RC_Mineral,100000);
				break;
			default:
				break;
			}
			if(!pPlayer->CostSocialItem(req->sku(), 1))
			{
				SendRet2User(pUser,RseUpdateSocialItemRet_SocialItemNotEnough,rse);
				return;
			}
			SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
			return;
		}
		else
		{
			CFG_Item* Tbl = ItemTblInst::instance().GetItem(req->sku());
			if(!Tbl)
				return;
			string givenCondition = Tbl->givenCondition;
			vector<string> condition = split(givenCondition,":");
			int counter = pDBSI->counter();
			int nextCounter = 0;
			if (condition.size() > 1) {// 不是爆出物品不对counter计算
				nextCounter = (counter + 1) % (condition.size() - 1);
			}
			if(randomSku == "1")// 金币矿石
			{
				int seed = 0;
				safe_atoi(condition[counter + 1],seed);
				if(seed == 1)
				{
					int addCoins = model->coins() * 3 / 100;
					if (addCoins < 1000) {
						addCoins = 1000;
					}
					pPlayer->CostRes(RC_Coin,model->coins() + addCoins);
				}
				else if(seed == 2)
				{
					int addMinerals = model->minerals() * 3 / 100;
					if (addMinerals < 1000) {
						addMinerals = 1000;
					}
					pPlayer->CostRes(RC_Mineral,model->minerals() + addMinerals);
				}
			}
			else
			{
				if(!pPlayer->AddSocialItem(randomSku, 1, 0,0))
				{
					SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse);
					return;
				}
			}
			pDBSI->set_counter(nextCounter);
			if(!pPlayer->CostSocialItem(req->sku(), 1))
			{
				SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse);
				return;
			}
			SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
		}
		eh_->getDataHandler()->markUserDirty(pUser);
	}
	else if(strAction == "buyItem")
	{
		SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
	}
	else if(strAction == "removeItem")
	{
		if(!pPlayer->CostSocialItem(req->sku(), 1))
		{
			SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse);
			return;
		}
		eh_->getDataHandler()->markUserDirty(pUser);
		SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
	}
	else if(strAction == "applyCrafting")// 制作炸弹和落石
	{
		string sku = "";
		if(req->sku() == "1")//洲际导弹
			sku = "7000";
		else
			sku = "7001";
		if(!pPlayer->AddSocialItem(sku, 1))
		{
			SendRet2User(pUser,RseUpdateSocialItemRet_ApplyCraftingFailed,rse);
			return;
		}
		eh_->getDataHandler()->markUserDirty(pUser);
		SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
	}
	else if(strAction == "applyCollectable")// 收藏里兑换物品
	{
		CFG_Collectables* Tbl = CollectablesTblInst::instance().GetItem(req->sku());
		string itemSkuList = Tbl->itemSkuList;
		itemSkuList.erase(0, 1);
		itemSkuList.erase(itemSkuList.size() - 1, 1);
		vector<string> SkuList = split(itemSkuList,",");
		for(int i = 0;i<SkuList.size();i++)
		{
			string Sku = SkuList[i];
			if(!pPlayer->CostSocialItem(Sku, 1))
			{
				SendRet2User(pUser,RseUpdateSocialItemRet_SocialItemNotEnough,rse);
				return;
			}
		}
		
		if(!pPlayer->AddSocialItem(Tbl->reward, 1))
		{
			SendRet2User(pUser,RseUpdateSocialItemRet_AddSocialItemFailed,rse);
			return;
		}
		eh_->getDataHandler()->markUserDirty(pUser);
		SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
	}
	else if(strAction == "addItemToWishList")
	{
		if(!pPlayer->AddItemToWishList(req->sku()))
		{
			SendRet2User(pUser,RseUpdateSocialItemRet_AddToWishListFailed,rse);
			return;
		}
		eh_->getDataHandler()->markUserDirty(pUser);
		SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
	}
	else if(strAction == "removeItemFromWishList")
	{
		if(!pPlayer->RemoveItemFromWishList(req->sku()))
		{
			SendRet2User(pUser,RseUpdateSocialItemRet_RemoveItemFromWishListFailed,rse);
			return;
		}
		eh_->getDataHandler()->markUserDirty(pUser);
		SendRet2User(pUser,RseUpdateSocialItemRet_Success,rse);
	}
	else if(strAction == "sendItemToNeighborWishList")
	{

	}

}