Example #1
0
int
main(int argc, char* argv[])
{
    bool add = false, create = false, destroy = false, erase = false, header = false;
    bool list = false, lvcreate = false, lvdestroy = false, lvlist = false, lvmodify = false, lvresize = false, lvsnap = false;
    bool modify = false, remove = false, spare = false, watch = false;
    char * setLevel = 0, * setName = 0; 

    /* options descriptor */
    static struct option longopts[] = {
	{ "add",	required_argument,	0,	'a' },
	{ "create",	no_argument,		0,	'c' },
	{ "destroy",	required_argument,	0,	'd' },
	{ "erase",	no_argument,		0,	'e' },
	{ "header",	no_argument,		0,	'h' },
	{ "list",	no_argument,		0,	'l' },
	{ "modify",	required_argument,	0,	'm' },
	{ "remove",	required_argument,	0,	'r' },
	{ "spare",	required_argument,	0,	's' },
	{ "watch",	no_argument,		0,	'w' },
	
	{ "lvcreate",	required_argument,	0,	'C' },
	{ "lvdestroy",	required_argument,	0,	'D' },
	{ "lvlist",	no_argument,		0,	'L' },
	{ "lvmodify",	required_argument,	0,	'M' },
	{ "lvresize",	required_argument,	0,	'R' },
	{ "lvsnap",	required_argument,	0,	'S' },
	
	{ "auto-rebuild",required_argument,	0,	'A' },
	{ "block-size", required_argument,	0,	'B' },
	{ "extents",	no_argument,		0,	'E' },
	{ "hint",	required_argument,	0,	'H' },
	{ "level",	required_argument,	0,	'V' },
	{ "name",	required_argument,	0,	'N' },
	{ "quick-rebuild",required_argument,	0,	'Q' },
	{ "size",	required_argument,	0,	'Z' },
	{ "timeout",	required_argument,	0,	'T' },

	{ "verbose",	no_argument,		0,	'v' },
	{ "help",	no_argument,		0,	'?' },
	{ 0,		0,			0,	0   }
    };

    int ch;
    while ((ch = getopt_long(argc, argv, "a:cd:ehlm:r:s:wC:D:LM:R:S:A:B:EH:V:N:Q:Z:T:v?", longopts, NULL)) != -1) {
	
	switch(ch) {

	case 'a':
	    add = true;
	    setName = strdup(optarg);
	    break;
	case 'c':
	    create = true;
	    break;
	case 'd':
	    destroy = true;
	    setName = strdup(optarg);
	    break;
	case 'e':
	    erase = true;
	    break;
	case 'h':
	    header = true;
	    break;
	case 'l':
	    list = true;
	    break;
	case 'm':
	    modify = true;
	    setName = strdup(optarg);
	    break;
	case 'r':
	    remove = true;
	    setName = strdup(optarg);
	    break;
	case 's':
	    spare = true;
	    setName = strdup(optarg);
	    break;
	case 'w':
	    watch = true;
	    break;

	    
	case 'C':
	    lvcreate = true;
	    setName = strdup(optarg);
	    break;
	case 'D':
	    lvdestroy = true;
	    setName = strdup(optarg);
	    break;
	case 'L':
	    lvlist = true;
	    break;
	case 'M':
	    lvmodify = true;
	    setName = strdup(optarg);
	    break;
	case 'R':
	    lvresize = true;
	    setName = strdup(optarg);
	    break;
	case 'S':
	    lvsnap = true;
	    setName = strdup(optarg);
	    break;


	case 'A':
	    autoRebuild = ((optarg[0] == 'Y') || (optarg[0] == 'y')) ? AUTO_YES : AUTO_NO;
	    break;
	case 'B':
	    sscanf(optarg, "%lli", &blockSize);
	    break;
	case 'E':
	    extents = true;
	    break;
	case 'H':
	    hint = strdup(optarg);
	    break;
	case 'V':
	    setLevel = strdup(optarg);
	    break;
	case 'N':
	    nickname = strdup(optarg);
	    break;
	case 'Q':
	    quickRebuild = ((optarg[0] == 'Y') || (optarg[0] == 'y')) ? AUTO_YES : AUTO_NO;
	    break;
	case 'Z':
	    sscanf(optarg, "%lli", &volSize);
	    break;
	case 'T':
	    sscanf(optarg, "%lli", &timeout);
	    break;


	case 'v':
	    verbose = true;
	    break;
	case 0:
	case '?':
	default:
	    usage();
	    exit(0);
	}
    }
    argc -= optind;
    argv += optind;

    if (!add && !create && !destroy && !erase && !header && !list && !modify && !remove && !spare && !watch &&
	!lvcreate && !lvdestroy && !lvlist && !lvmodify && !lvresize && !lvsnap) {
	usage();
	exit(0);
    }

    if (list) {
	listRAIDSets();
	exit(0);
    }

    if (lvlist) {
	listLogicalVolumes(NULL, argc, argv);
	exit(0);
    }

    if (geteuid()) {
	printf("ERROR: you must be super user for this operation.\n");
	exit(1);
    }
	
    if (erase) {
	erasePartition(argc, argv);
	exit(0);
    };

    if (header) {
	dumpHeader(argc, argv);
	exit(0);
    };

    if (watch) {

	CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
					NULL,					// const void *observer
					callBack,
					CFSTR(kAppleRAIDNotificationSetDiscovered),
					NULL,					// const void *object
					CFNotificationSuspensionBehaviorHold);

	CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
					NULL,					// const void *observer
					callBack,
					CFSTR(kAppleRAIDNotificationSetTerminated),
					NULL,					// const void *object
					CFNotificationSuspensionBehaviorHold);

	CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
					NULL,					// const void *observer
					callBack,
					CFSTR(kAppleRAIDNotificationSetChanged),
					NULL,					// const void *object
					CFNotificationSuspensionBehaviorHold);

	CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
					NULL,					// const void *observer
					callBack,
					CFSTR(kAppleLVMNotificationVolumeDiscovered),
					NULL,					// const void *object
					CFNotificationSuspensionBehaviorHold);

	CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
					NULL,					// const void *observer
					callBack,
					CFSTR(kAppleLVMNotificationVolumeTerminated),
					NULL,					// const void *object
					CFNotificationSuspensionBehaviorHold);

	CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
					NULL,					// const void *observer
					callBack,
					CFSTR(kAppleLVMNotificationVolumeChanged),
					NULL,					// const void *object
					CFNotificationSuspensionBehaviorHold);

	// this will not fail if there is no raid controller, ie, if AppleRAID class is not instantiated in the kernel

	AppleRAIDEnableNotifications();
    }


    if (add) addMember(setName, CFSTR(kAppleRAIDMembersKey), argc, argv);
    if (create) createSet(setLevel, nickname, argc, argv);
    if (destroy) destroySet(setName, argc, argv);
    if (modify) modifySet(setName, argc, argv);
    if (remove) removeMember(setName, argc, argv);
    if (spare) addMember(setName, CFSTR(kAppleRAIDSparesKey), argc, argv);

    
    if (lvcreate) createLogicalVolume(setName, setLevel, argc, argv);
    if (lvdestroy) destroyLogicalVolume(setName, argc, argv);
    if (lvmodify) modifyLogicalVolume(setName, argc, argv);
    if (lvresize) resizeLogicalVolume(setName, argc, argv);
    if (lvsnap) snapshotLogicalVolume(setName, setLevel, argc, argv);

    
    if (watch) {

	printf("watching...\n");

	// Set up a signal handler so we can clean up when we're interrupted from the command line
	// Otherwise we stay in our run loop forever.
	sig_t oldHandler = signal(SIGINT, signalHandler);
	if (oldHandler == SIG_ERR) {
	    printf("Could not establish new signal handler");
	    exit(1);
	}

	// Start the run loop. Now we'll receive notifications.
	//
	printf("Starting run loop.\n");
	CFRunLoopRun();
        
	printf("Unexpectedly back from CFRunLoopRun()!\n");
    }

    return 0;
}
Example #2
0
Value
Value::removeMember( const std::string &key )
{
   return removeMember( key.c_str() );
}
Example #3
0
void Value::removeMember(const String& key) { removeMember(key.c_str()); }
Example #4
0
bool CGroup::onMsg(Json::Value& prealMsg ,uint16_t nMsgType, eMsgPort eSenderPort , uint32_t nSessionID)
{
	if ( IGlobalModule::onMsg(prealMsg,nMsgType,eSenderPort,nSessionID) )
	{
		return true ;
	}
	
	switch ( nMsgType )
	{
	case MSG_CREATE_CLUB:
		{
			auto pPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID) ;
			if ( pPlayer == nullptr )
			{
				LOGFMTE("session id = %u , player is null , can not create club",nSessionID) ;
				return true ;
			}

			uint16_t nOwnClubCnt = getClubCntByUserUID(pPlayer->GetUserUID());
			uint16_t nMaxCanCreate = pPlayer->GetBaseData()->getMaxCanCreateClubCount() ;

			Json::Value jsMsgBack ;
			jsMsgBack["newClubID"] = prealMsg["newClubID"].asUInt() ;
			if ( nOwnClubCnt >= nMaxCanCreate )
			{
				jsMsgBack["ret"] = 1 ;
				CGameServerApp::SharedGameServerApp()->sendMsg(nSessionID,jsMsgBack,nMsgType) ;
				return true ;
			}
			jsMsgBack["ret"] = 0 ;
			stGroupItem* pItem = new stGroupItem() ;
			pItem->nCityCode = prealMsg["cityCode"].asUInt() ;
			pItem->nCreaterUID = pPlayer->GetUserUID() ;
			pItem->nGroupID = prealMsg["newClubID"].asUInt() ;
			pItem->addMember(pPlayer->GetUserUID());
			addGroup(pItem) ;
			LOGFMTD("player uid = %u create new club id = %u city code = %u",pPlayer->GetUserUID(),pItem->nGroupID,pItem->nCityCode) ;
			CGameServerApp::SharedGameServerApp()->sendMsg(nSessionID,jsMsgBack,nMsgType) ;
		}
		break ;
	case MSG_DISMISS_CLUB:
		{
			uint32_t nClubID = prealMsg["clubID"].asUInt() ;
			auto pPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID) ;
			auto pClub = getGroupByID(nClubID) ;

			Json::Value jsMsgBack ;
			jsMsgBack["ret"] = 0 ;
			if ( pClub == nullptr || pClub->nCreaterUID != pPlayer->GetUserUID() )
			{
				jsMsgBack["ret"] = 1 ;
				CGameServerApp::SharedGameServerApp()->sendMsg( nSessionID,jsMsgBack,nMsgType) ;
				return true ;
			}

			if ( pClub->isRoomKeepRunning() )
			{
				jsMsgBack["ret"] = 2 ;
				CGameServerApp::SharedGameServerApp()->sendMsg(nSessionID,jsMsgBack,nMsgType) ;
				return true ;
			}
			dismissGroup(nClubID) ;
			CGameServerApp::SharedGameServerApp()->sendMsg( nSessionID,jsMsgBack,nMsgType) ;
			LOGFMTD("player uid = %u dismiss club id = %u",pPlayer->GetUserUID(),nClubID) ;
		}
		break ;
	case MSG_REQ_PLAYER_JOINED_CLUBS:
		{
			uint32_t nReqUID = prealMsg["uid"].asUInt() ;

			Json::Value jsJoinedClubs ;
			for ( auto vclub : m_vGroups )
			{
				if ( vclub.second->isHaveMember(nReqUID) )
				{
					jsJoinedClubs[jsJoinedClubs.size()] = vclub.second->nGroupID ;
				}
			}
			prealMsg["clubIDs"] = jsJoinedClubs ;
			getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
		}
		break;
	case MSG_REQ_CLUB_ROOM:
		{
			Json::Value jsMsgBack; 
			jsMsgBack["ret"] = 0 ;
			auto pg = getGroupByID(prealMsg["clubID"].asUInt()) ;
			if ( pg == nullptr )
			{
				jsMsgBack["ret"] = 1 ;
				getSvrApp()->sendMsg(nSessionID,jsMsgBack,MSG_REQ_CLUB_ROOM) ;
				break ;
			}

			Json::Value jsRoomIDs ;
			auto pgameCenter = CGameServerApp::SharedGameServerApp()->getGameRoomCenter() ;
			std::vector<uint32_t> vAllRoomIDs ;
			pgameCenter->getClubOwnRooms(vAllRoomIDs,pg->nGroupID) ;
			for ( auto rid : vAllRoomIDs )
			{
				jsRoomIDs[jsRoomIDs.size()] = rid ;
			}
			jsMsgBack["rooms"] = jsRoomIDs ;
			getSvrApp()->sendMsg(nSessionID,jsMsgBack,MSG_REQ_CLUB_ROOM) ;
		}
		break;
	case MSG_REQ_CLUB_INFO:
		{
			uint32_t nGroupID = prealMsg["groupID"].asUInt() ;
			auto pGroup = getGroupByID(nGroupID) ;
			if ( !pGroup )
			{
				prealMsg["ret"] = 1 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				break ;
			}

			prealMsg["ret"] = 0 ;
			prealMsg["curCnt"] = pGroup->getMemberCnt() ;
			prealMsg["capacity"] = pGroup->getCapacity();
			prealMsg["level"] = pGroup->nLevel ;
			prealMsg["deadTime"] = pGroup->m_tLevelRunOutTime ;
			getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
		}
		break;
	case MSG_CLUB_DELETE_MEMBER:
		{
			uint32_t nGroupID = prealMsg["groupID"].asUInt();
			uint32_t nAccountUID = prealMsg["userAccount"].asUInt() ;
			auto pClub = getGroupByID(nGroupID) ;
			prealMsg["ret"] = 0 ;
			if ( pClub == nullptr )
			{
				prealMsg["ret"] = 1 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				break ;
			}

			if ( pClub->isHaveMember(nAccountUID) == false )
			{
				prealMsg["ret"] = 2 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				break;
			}

			auto pPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID) ;
			if ( !pPlayer || ( pPlayer->GetUserUID() != nAccountUID && pPlayer->GetUserUID() != pClub->getOwnerUID() ))
			{
				prealMsg["ret"] = 3 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				break;
			}

			// do add member 
			/*Json::Value cValue ;*/
//			cValue["email"] = "*****@*****.**" ;
//			cValue["devpwd"] = "bill007" ;
//#ifndef ONLINE_APP_KEY
//			cValue["appkey"] = "e87f31bb-e86c-4d87-a3f3-57b3da76b3d6";
//#else
//			cValue["appkey"] = "abffee4b-deea-4e96-ac8d-b9d58f246c3f" ;
//#endif // DEBUG

			//cValue["appkey"] = "abffee4b-deea-4e96-ac8d-b9d58f246c3f" ;
			//cValue["group_id"] = std::to_string(nGroupID);
			//cValue["user_account"] = std::to_string(nAccountUID);
			//Json::StyledWriter sWrite ;
			//std::string str = sWrite.write(cValue);

			auto pQinJia = CGameServerApp::SharedGameServerApp()->getQinjiaModule();
			Json::Value cValue ;
			cValue["group_id"] = std::to_string(nGroupID);
			cValue["user_account"] = std::to_string(nAccountUID);

			Json::Value jUserData ;
			jUserData["clubID"] = nGroupID ;
			jUserData["delUID"] = nAccountUID ;
			jUserData["actSID"] = nSessionID;
			pQinJia->sendQinJiaRequest("DelGroupMember",cValue,[this](Json::Value& jsResult, Json::Value& jsUserData){
				auto nClubID = jsUserData["clubID"].asUInt();
				uint32_t nUID = jsUserData["delUID"].asUInt() ;
				auto nSessionID = jsUserData["actSID"].asUInt();

				Json::Value jsmsgBack ;
				jsmsgBack["groupID"] = nClubID ;
				jsmsgBack["userAccount"] = nUID ;
				jsmsgBack["ret"] = 0 ;
				auto nActUID =  CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID)->GetUserUID() ;
				if ( jsResult.isNull() )
				{
					LOGFMTE("del member club gotype request result is null , uid = %u ,clubID = %u", nUID,nClubID) ;
					return ;
				}
				if ( jsResult["errcode"].asUInt() != 200 )
				{
					LOGFMTE("del member club gotype request failed error code = %u,uid = %u ,clubID = %u", jsResult["errcode"].asUInt(), nUID,nClubID) ;
					return ;
				}
				auto pClub = getGroupByID(nClubID);
				pClub->removeMember(nUID);
				if ( nActUID != nUID )
				{
					CPlayerMailComponent::PostDlgNotice(eNotice_BeRemoveFromClub,jsUserData,nUID ) ;
				}
	
				LOGFMTD("del club = %u member ok uid = %u ",nClubID,nUID) ;
				m_isSortDirty = true ;
				getSvrApp()->sendMsg(nSessionID,jsmsgBack,MSG_CLUB_DELETE_MEMBER) ;
			},jUserData) ;

			//if ( nMsgType == MSG_CLUB_ADD_MEMBER )
			//{
			//	//if ( pClub->isGroupFull() )
			//	//{
			//	//	prealMsg["ret"] = 3 ;
			//	//	getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
			//	//	LOGFMTD("group is full") ;
			//	//	break ;
			//	//}

			//	//if ( pClub->isHaveMember(nAccountUID) )
			//	//{
			//	//	prealMsg["ret"] = 4 ;
			//	//	getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
			//	//	LOGFMTD("already in group ") ;
			//	//	break ;
			//	//}

			//	//stClubMemberChangeReqArg* pArg = new stClubMemberChangeReqArg ;
			//	//pArg->nMsgType = nMsgType ;
			//	//pArg->nTargetUID = nAccountUID;
			//	//pArg->pOwenClub = pClub ;

			//	//m_pGoTyeAPI.performRequest("AddGroupMember",str.c_str(),str.size(),pArg,eReq_AddMember );
			//	//LOGFMTD("add member accountUid  = %u",nAccountUID) ;
			//}
			//else
			//{


			//	stClubMemberChangeReqArg* pArg = new stClubMemberChangeReqArg ;
			//	pArg->nMsgType = nMsgType ;
			//	pArg->nTargetUID = nAccountUID;
			//	pArg->pOwenClub = pClub ;

			//	m_pGoTyeAPI.performRequest("DelGroupMember",str.c_str(),str.size(),pArg,eReq_DeleteMember );
			//	LOGFMTD("delete member accountUid  = %u",nAccountUID) ;
			//}
		}
		break ;
	case MSG_REQ_LEVEL_UP_CLUB:
		{
			static uint32_t vLevelPriceDiamon[] = { 15,30,3000,4500,7200 } ;
			
			uint32_t nclubID = prealMsg["clubID"].asUInt();
			uint32_t nLevel = prealMsg["level"].asUInt() ;
			auto pClub = getGroupByID(nclubID) ;
			if ( !pClub )
			{
				prealMsg["ret"] = 1 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				break ;
			}

			pClub->getCapacity() ; // update the level and time;
			uint16_t nTargetLevel = prealMsg["level"].asUInt() ;
			if ( nTargetLevel == 0 || nTargetLevel < pClub->nLevel )
			{
				prealMsg["ret"] = 4 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				break ;
			}

			if ( nTargetLevel > sizeof(vLevelPriceDiamon) / sizeof(uint32_t) )
			{
				prealMsg["ret"] = 3 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				break ;
			}

			uint32_t nDiamondPrice = vLevelPriceDiamon[nTargetLevel-1] ;
			auto pPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID) ;
			if ( !pPlayer )
			{
				prealMsg["ret"] = 3 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				LOGFMTE("session id = %u not online , so can not do this operate") ;
				break ;
			}

			if ( pPlayer->GetBaseData()->GetAllDiamoned() < nDiamondPrice )
			{
				prealMsg["ret"] = 2 ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
				break ;
			}

			pPlayer->GetBaseData()->decressMoney(nDiamondPrice,true) ;
			uint32_t nAddDuiringTime = 15 * 24 * 60 * 60;
			if ( pClub->nLevel == nTargetLevel )
			{
				pClub->m_tLevelRunOutTime += nAddDuiringTime;
			}
			else
			{
				pClub->m_tLevelRunOutTime = (uint32_t)time(nullptr) + nAddDuiringTime ;
			}
			pClub->nLevel = nTargetLevel ;
			pClub->isDirty = true ;

			prealMsg["ret"] = 0 ;
			prealMsg["deadTime"] = pClub->m_tLevelRunOutTime ;
			getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;

			m_isSortDirty = true ;
			break ;
		}
		break ;
	case MSG_REQ_RECORMED_CLUB:
		{
			sortGroup();
			Json::Value jsArray ;
			auto iter = m_vSortedGroups.begin();
			for ( ; iter != m_vSortedGroups.end() ; ++iter )
			{               
				jsArray[jsArray.size()] = (*iter)->nGroupID;
				if ( jsArray.size() >= 10 )
				{
					break; 
				}
			}

			prealMsg["clubIDs"] = jsArray ;
			getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType) ;
		}
		break ;
	case MSG_REQ_CLUB_MEMBER:
		{
			uint32_t nClubID = prealMsg["clubID"].asUInt();
			uint32_t nPageIdx = prealMsg["pageIdx"].asUInt() ;
			auto pGroup = getGroupByID(nClubID) ;
			Json::Value jsMembers ;
			prealMsg["ret"] = 0 ;
			do 
			{
				if ( pGroup == nullptr )
				{
					prealMsg["ret"] = 1 ;
					break;
				}

				uint32_t nSkipCnt = CNT_PER_PAGE * nPageIdx ;
				if (nSkipCnt >= pGroup->getMemberCnt() )
				{
					break;
				}

				for ( auto& ref : pGroup->vMembers )
				{
					if ( nSkipCnt > 0 )
					{
						--nSkipCnt;
						continue;
					}

					jsMembers[jsMembers.size()] = ref ;

					if ( jsMembers.size() >= CNT_PER_PAGE )
					{
						break;
					}
				}
			} while (0);

			prealMsg["members"] = jsMembers ;
			getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType);
		}
		break ;
	case MSG_REQ_CITY_CLUB:
		{
			sortGroup() ;
			uint32_t nCityCode = prealMsg["cityCode"].asUInt();
			uint32_t nPageIdx = prealMsg["pageIdx"].asUInt() ;
			uint32_t nSkipCnt = CNT_PER_PAGE * nPageIdx ;

			Json::Value jsClubs ;
			if ( nSkipCnt >= m_vSortedGroups.size() )
			{
				prealMsg["clubs"] = jsClubs ;
				getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType);
				break ;
			}

			for ( auto& pClub : m_vSortedGroups )
			{
				if ( pClub->nCityCode != nCityCode )
				{
					continue;
				}

				if ( nSkipCnt > 0 )
				{
					--nSkipCnt;
					continue;
				}

				jsClubs[jsClubs.size()] = pClub->nGroupID ;

				if ( jsClubs.size() >= CNT_PER_PAGE )
				{
					break;
				}
			}
			prealMsg["clubs"] = jsClubs ;
			getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType);
		}
		break;
	case MSG_CLUB_APPLY_TO_JOIN:
		{
			uint32_t nClubID = prealMsg["clubID"].asUInt() ;
			auto text = prealMsg["text"];
			auto pClub = getGroupByID(nClubID);
			uint8_t nRet = 0 ;
			do 
			{
				if ( pClub == nullptr )
				{
					nRet = 1 ;
					break;
				}
				
				if ( pClub->isGroupFull() )
				{
					nRet = 2 ;
					break; 
				}

				auto pPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID);
				if ( !pPlayer )
				{
					nRet = 3 ;
					break;
				}

				if ( pClub->isHaveMember(pPlayer->GetUserUID()) )
				{
					nRet = 4 ;
					break;
				}
				
				Json::Value jArg ;
				jArg["applicantUID"] = pPlayer->GetUserUID() ;
				jArg["clubID"] = nClubID ;
				jArg["text"] = text ;
			   CPlayerMailComponent::PostDlgNotice(eNotice_RecivedApplyToJoinClub,jArg,pClub->getOwnerUID() ) ;

			   auto ppOwner = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerByUserUID(pClub->getOwnerUID()) ;
			   if ( !ppOwner )
			   {
				   // send push notification ;
				   CSendPushNotification::getInstance()->reset();
				   CSendPushNotification::getInstance()->addTarget(pClub->getOwnerUID()) ;
				   CSendPushNotification::getInstance()->setContent(CServerStringTable::getInstance()->getStringByID(2),1) ;
				   CSendPushNotification::getInstance()->postApns(CGameServerApp::SharedGameServerApp()->getAsynReqQueue(),false,"apply") ;
			   }

			} while (false);
			prealMsg["ret"] = nRet ;
			getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType);
		}
		break;
	case MSG_CLUB_REPLY_APPLY_TO_JOIN:
		{
			uint32_t nClubID = prealMsg["clubID"].asUInt();
			uint32_t nApplyerUID = prealMsg["applicantUID"].asUInt() ;
			uint8_t nIsAgree = prealMsg["isAgree"].asUInt();
			auto text = prealMsg["text"];
			uint8_t nRet = 0 ;
			do 
			{
				// check add 
				if ( !nIsAgree )  // do agree 
				{
					Json::Value jArg ;
					jArg["isAgree"] = nIsAgree ;
					jArg["clubID"] = nClubID ;
					jArg["text"] = text ;
					CPlayerMailComponent::PostDlgNotice(eNotice_RecivedReplyForApplyForJoinClub,jArg,nApplyerUID ) ;
					break;
				}

				auto pGroup = getGroupByID(nClubID) ;
				if ( !pGroup )
				{
					nRet = 2 ;
					break;
				}

				if ( pGroup->isGroupFull() )
				{
					nRet = 1 ;
					break ;
				}

				auto pp = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID) ;
				if ( pp == nullptr || pGroup->getOwnerUID() != pp->GetUserUID() )
				{
					nRet = 3 ;
					break; 
				}

				if ( pGroup->isHaveMember(nApplyerUID) )
				{
					nRet = 4 ;
					break;
				}

				// do add 
				auto pQinJia = CGameServerApp::SharedGameServerApp()->getQinjiaModule();
				Json::Value cValue ;
				cValue["group_id"] = std::to_string(nClubID);
				cValue["user_account"] = std::to_string(nApplyerUID);

				Json::Value jUserData ;
				jUserData["isAgree"] = nIsAgree ;
				jUserData["clubID"] = nClubID ;
				jUserData["text"] = text ;
				jUserData["addUID"] = nApplyerUID ;
				pQinJia->sendQinJiaRequest("AddGroupMember",cValue,[this](Json::Value& jsResult, Json::Value& jsUserData){

					auto nClubID = jsUserData["clubID"].asUInt();
					uint32_t nUID = jsUserData["addUID"].asUInt() ;

					if ( jsResult.isNull() )
					{
						LOGFMTE("add member club gotype request result is null , uid = %u ,clubID = %u", nUID,nClubID) ;
						return ;
					}
					if ( jsResult["errcode"].asUInt() != 200 )
					{
						LOGFMTE("add member club gotype request failed error code = %u,uid = %u ,clubID = %u", jsResult["errcode"].asUInt(), nUID,nClubID) ;
						return ;
					}
					auto pClub = getGroupByID(nClubID);
					pClub->addMember(nUID);
					m_isSortDirty = true ;
					CPlayerMailComponent::PostDlgNotice(eNotice_RecivedReplyForApplyForJoinClub,jsUserData,nUID ) ;
					LOGFMTD("add club member ok uid = %u ",nUID) ;

					auto ppApplyer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerByUserUID(nUID) ;
					if ( !ppApplyer )
					{
						// send push notification ;
						CSendPushNotification::getInstance()->reset();
						CSendPushNotification::getInstance()->addTarget(nUID) ;
						CSendPushNotification::getInstance()->setContent(CServerStringTable::getInstance()->getStringByID(1),1) ;
						CSendPushNotification::getInstance()->postApns(CGameServerApp::SharedGameServerApp()->getAsynReqQueue(),false,"reply Apply") ;
					}

				},jUserData) ;
				 
			} while (false);
			prealMsg["ret"] = nRet ;
			getSvrApp()->sendMsg(nSessionID,prealMsg,nMsgType);
		}
		break ;
	case MSG_CLUB_UPDATE_NAME:
		{
			auto nClubID = prealMsg["clubID"].asUInt() ;
			auto pName = prealMsg["newName"].asCString() ;
			auto pClub = getGroupByID(nClubID) ;
			auto pPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID) ;
			if ( !pPlayer )
			{
				LOGFMTE("player session = %u , is null can not update club name",nSessionID) ;
				break ;
			}

			if ( pClub == nullptr )
			{
				LOGFMTE("club is null how to update name player uid  = %u  ",pPlayer->GetUserUID() ) ;
				break ;
			}

			if ( pClub->getOwnerUID() != pPlayer->GetUserUID() )
			{
				LOGFMTE("player uid = %u , is not club id = %u , owner ,so can not update club name",pPlayer->GetUserUID(),nClubID);
				break ;
			}

			pClub->setName(pName);
			LOGFMTD("club id = %u update name to new = %s", nClubID,pName);
		}
		break;
	case MSG_CLUB_CHAT_MESSAGE:
		{
			auto nClubID = prealMsg["clubID"].asUInt() ;
			auto nType = prealMsg["type"].asUInt() ;
			auto pPlayer = CGameServerApp::SharedGameServerApp()->GetPlayerMgr()->GetPlayerBySessionID(nSessionID) ;
			if ( !pPlayer )
			{
				LOGFMTE("player session id = %u not online , why chat msg",nSessionID ) ;
				break;
			}

			auto pClub = getGroupByID( nClubID );
			if ( !pClub )
			{
				LOGFMTE("club is not exist how can speak id = %u",nClubID ) ;
				break;
			}

			if ( !pClub->isHaveMember(pPlayer->GetUserUID() ) )
			{
				LOGFMTE("uid id = %u not in club id = %u , can not chat",pPlayer->GetUserUID(),nClubID) ;
				break;
			}

			const char* pContent = CServerStringTable::getInstance()->getStringByID(9) ;
			//if ( nType == 0 )
			//{
			//	pContent = "Text Message";
			//}
			//else if ( 1 == nType )
			//{
			//	pContent = "Voice Message";
			//}
 
			auto pAsync = getSvrApp()->getAsynReqQueue();
			Json::Value jsTarget ;
			jsTarget[0u] = nClubID ;
			Json::Value jsapns ;
			jsapns["apnsType"] = 0;
			jsapns["targets"] = jsTarget ;
			std::string strContent = pClub->getName() ;
			strContent.append(":[");
			strContent += pContent ;
			strContent.append("]");
			jsapns["content"] = strContent ;
			jsapns["msgID"] = "clubChat";
			jsapns["msgdesc"] = std::to_string(nClubID) ;
			pAsync->pushAsyncRequest(ID_MSG_PORT_VERIFY,eAsync_Apns,jsapns);
			LOGFMTD("apns club id = %u chat msg = %s",nClubID , pContent) ;
		}
		break;
	default:
		return false ;
	}
	return true ;
}
Example #5
0
bool Value::removeMember(const char* key, Value* removed) {
  return removeMember(key, key + strlen(key), removed);
}
Example #6
0
bool Value::removeMember(String const& key, Value* removed) {
  return removeMember(key.data(), key.data() + key.length(), removed);
}
Example #7
0
void rice::pastry::IdSet::removeId(::rice::p2p::commonapi::Id* id)
{
    removeMember(java_cast< Id* >(id));
}
// guildgumpchoice() branches the results of those checkbox gumps
// Called by: choice() 
void cGuildStone::GumpChoice( UOXSOCKET s, UI16 MenuID, UI16 Choice )
{
//	int member, recruit, war, guild, counter, slot;
	//int members[MAXGUILDMEMBERS];
	//int recruits[MAXGUILDRECRUITS];
	P_CHAR pc_currchar = currchar[s];
	int counter = 1;

	// Truncate the first few bytes
	UI08 Page = (UI08)MenuID;

	if ( pc_currchar->guildstone() != this->serial ) 
		return;

	switch( Page )
	{
	case 0:
	case 1:									// main menu
		switch( Choice )
		{
		case 1: target(s,0,1,0,220,"Select person to invite into the guild.");	break;
		case 2:	Menu(s,7);														break;
		case 3: Menu(s,5);														break;
		case 4: Menu(s,13);														break;
		case 5: ToggleAbbreviation(s);											break;
		case 6: GuildResign(s);													break;
		case 7: Menu(s,6);														break;
		case 8:
		default:
			if( Choice == 8 && Page == 0 ) 
				Menu( s, 2 );

			else if( ( Choice == 8 && Page == 1 ) || ( Choice == 9 && Page == 0 ) ) 
				Menu( s, 11 );
			else if( ( Choice == 9 && Page == 1 ) || ( Choice == 10 && Page == 0 ) ) 
				Menu( s, 16 );
			break;
		}
		return;
	case 2:													// guildmaster menu
		switch( Choice )
		{
		case 1:  entrygump(s,pc_currchar->serial,100,1,40,"Enter a new guildname.");		break;
		case 2:  entrygump(s,pc_currchar->serial,100,2,3,"Enter a new guild abbreviation.");break;
		case 3:  Menu(s,3);																	break;
		case 4:  Menu(s,4);																	break;
		case 5:  Menu(s,8);																	break;
		case 6:  Menu(s,14);																break;
		case 7:  target(s,0,1,0,221,"Select person to declare war to.");					break;
		case 8:  Menu(s,15);																break;
		case 9:	 Menu(s,10);																break;
		case 10: Menu(s,9);																	break;
		case 11: entrygump(s,pc_currchar->serial,100,3,20,"Enter new guildmastertitle.");	break;
		case 12: Menu(s,12);																break;
		case 13: sysmessage(s, "Not yet");													break;
		case 14: Menu(s,1);																	break;
		}
		return;
	case 3:													// set type menu
		Menu(s,2);
		return;
	case 4:													// edit charter menu
		switch( Choice )
		{
		case 1: Menu( s, 2 );																break;
		case 2: entrygump( s, pc_currchar->serial, 100, 5, 50, "Enter a new charter." );	break;
		case 3:	entrygump( s, pc_currchar->serial, 100, 6, 50, "Enter a new URL." );		break;
		}
		return;
	case 5:													// view charter menu
		if ( Choice == 1 ) 
			Menu(s,1);
		else if ( Choice == 2 ) 
			weblaunch(s, (char*)this->webpage.c_str());

		return;
	case 6:													// candidates menu
		Menu(s,1);
		return;
	case 7:													// roster menu
		Menu(s,1);
		return;
	case 8:			// dismiss menu
		if ( static_cast<unsigned int>( Choice ) >= member.size() )
			return;

		if ( member[ Choice ] == pc_currchar->serial)
			sysmessage( s, "You can not dismiss yourself, please resign from the guild instead");

		else
		{
			P_CHAR pc_member = FindCharBySerial( member[ Choice ] );
			removeMember( pc_member );
			sysmessage(s,"Kicked that member out of the guild.");
			if (online(pc_member))
				sysmessage(calcSocketFromChar(pc_member),"You got dismissed out of your guild.");
		}
		Menu(s,2);
		return;
	case 9:													// refuse menu
		counter=1;
		if ( static_cast<unsigned int>( Choice ) >= recruit.size() )
			return;
		else
		{
			recruit.erase( recruit.begin() + Choice );
			sysmessage(s,"Removed candidate from the list.");
		}
		Menu(s,2);
		return;
	case 10:													// accept
		counter=1;
		if ( static_cast<unsigned int>( Choice ) >= recruit.size() )
			return;
		else
		{
			addMember( FindCharBySerial( recruit[ Choice ] ) );
			recruit.erase( recruit.begin() + Choice );
			sysmessage( s, "The candidate is now a guild member");
		}
		Menu(s,2);
		return;
	case 11:													// warlist menu
		Menu(s,1);
		return;
	case 12:													// grant title menu
		if ( Choice == 1 ) Menu( s, 2 );
/*		counter=1;
		for (member = 1; member < MAXGUILDMEMBERS; member++)
		{
			if (guilds[guildnumber].member[member]!=0)
			{
				counter++;
				if (sub == counter)
				{
					guilds[guildnumber].priv = guilds[guildnumber].member[member];
					entrygump(s,pc_currchar->serial,100,3,20,"Enter new guildtitle.");
					return;
				}
			}		
		}
*/		return;
	case 13:													// fealty menu
		if ( static_cast<unsigned int>( Choice ) >= member.size() )
			return;
		else
		{
			pc_currchar->setGuildfealty( member[ Choice ] );
		}
		Menu( s, 1 );
		return;
	case 14:													// declare war menu
		{
			counter=1;
			list<SERIAL>::iterator it;
			for (it = guilds.begin(); it != guilds.end(); ++it)
			{
				if (this->serial != *it)
				{
					++counter;
					if ( Choice == counter)
					{
						if ( find(this->war.begin(), this->war.end(), *it ) != this->war.end() )
							sysmessage(s,"This guild is already in our warlist.");
						else
						{
							this->war.push_back(*it);
							cGuildStone* pStone = dynamic_cast<cGuildStone*>(FindItemBySerial(*it));
							char text[256];
							sprintf(text,"%s declared war to %s", this->name().ascii(), pStone->name().ascii() );
							this->Broadcast(text);
							pStone->Broadcast(text);
							
						}
					}
				}
			}
		}
		Menu( s, 2 );
		return;

	// declare peace menu
	case 15:		
		{
			counter = 1;
			unsigned int i;
			for (i = 0; i < this->war.size(); ++i)
			{
				if (this->war[i] != INVALID_SERIAL) // we don't need a loop here, really.
				{
					++counter;
					if ( Choice == counter )
					{
						char text[256];
						cGuildStone* pStone = dynamic_cast<cGuildStone*>(FindItemBySerial(this->war[i]));
						sprintf(text,"%s declared peace to %s",this->name().ascii(), pStone->name().ascii());
						this->war.erase( this->war.begin() + i );
						this->Broadcast(text);
						pStone->Broadcast(text);
					}
				}
			}
		}
		Menu(s,2);
		return;

	case 16:													// warlist menu 2
		Menu( s, 1 );
		return;
	}
}
Example #9
0
Value Value::removeMember(const JSONCPP_STRING& key)
{
  return removeMember(key.c_str());
}
Example #10
0
bool Value::removeMember(JSONCPP_STRING const& key, Value* removed)
{
  return removeMember(key.data(), key.data() + key.length(), removed);
}
Example #11
0
bool Configuration::remove(const std::string& key)
{
	Mutex::ScopedLock lock(_mutex); 
	
	return removeMember(key) != Json::nullValue;
}