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; }
Value Value::removeMember( const std::string &key ) { return removeMember( key.c_str() ); }
void Value::removeMember(const String& key) { removeMember(key.c_str()); }
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 ; }
bool Value::removeMember(const char* key, Value* removed) { return removeMember(key, key + strlen(key), removed); }
bool Value::removeMember(String const& key, Value* removed) { return removeMember(key.data(), key.data() + key.length(), removed); }
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; } }
Value Value::removeMember(const JSONCPP_STRING& key) { return removeMember(key.c_str()); }
bool Value::removeMember(JSONCPP_STRING const& key, Value* removed) { return removeMember(key.data(), key.data() + key.length(), removed); }
bool Configuration::remove(const std::string& key) { Mutex::ScopedLock lock(_mutex); return removeMember(key) != Json::nullValue; }