update activity indication

back_recharge
wangyuan 2019-07-30 17:51:04 +08:00
parent 830fc18252
commit 7bb5acac24
2 changed files with 56 additions and 16 deletions

View File

@ -7,6 +7,7 @@ import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.activity.BlessInfoConfig;
import com.ljsd.jieling.ktbeans.KtEventUtils;
import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean;
import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.logic.mission.GameEvent;
@ -38,7 +39,7 @@ public class ActivityLogic {
public void flushForLogin(User user) throws Exception {
checkActivityIsFinish(user);
checkActivityOfUser(user);
checkActivityOfUser(user,null);
}
@ -46,7 +47,7 @@ public class ActivityLogic {
public final static ActivityLogic instance = new ActivityLogic();
}
public void checkActiviyStatus() {
public void checkActiviyStatus() throws Exception {
long now = System.currentTimeMillis();
Map<Integer, SGlobalActivity> sGlobalActivityMap = SGlobalActivity.getsGlobalActivityMap();
for(SGlobalActivity sGlobalActivity:sGlobalActivityMap.values()){
@ -65,13 +66,30 @@ public class ActivityLogic {
}
openActivityIds.add(sGlobalActivity.getId());
}
for(Map.Entry<Integer,ISession> entry:OnlineUserManager.sessionMap.entrySet()){
User user = UserManager.getUserInMem(entry.getKey());
PlayerInfoProto.ActivityUpateIndication.Builder builder = PlayerInfoProto.ActivityUpateIndication.newBuilder();
Set<Integer> openNews = checkActivityOfUser(user,builder);
if(!openNews.isEmpty()){
Map<Integer, ActivityMission> activityMissionMap = user.getActivityManager().getActivityMissionMap();
Map<Integer, ActivityMission> activityUpdateMap = new HashMap<>();
for(Integer activityId : openNews){
activityUpdateMap.put(activityId,activityMissionMap.get(activityId));
}
List<CommonProto.ActivityInfo> activityInfos = getActivityInfos(activityUpdateMap, user.getPlayerInfoManager().getCreateTime());
builder.addAllActivityInfo(activityInfos);
}
if(builder.getActivityInfoCount()>0 || builder.getCloseActivityIdCount() >0 ){
MessageUtil.sendIndicationMessage(entry.getValue(),1, MessageTypeProto.MessageType.ACTIVITY_UPDATE_INDICATION_VALUE,builder.build(),true);
}
}
}
public void newPlayerOpenActivityMission(User user) throws Exception {
checkActivityOfUser(user);
checkActivityOfUser(user,null);
}
public void checkActivityOfUser(User user) throws Exception {
public Set<Integer> checkActivityOfUser(User user, PlayerInfoProto.ActivityUpateIndication.Builder builder) throws Exception {
long now = TimeUtils.now();
ActivityManager activityManager = user.getActivityManager();
Map<Integer, SGlobalActivity> sGlobalActivityMap = SGlobalActivity.getsGlobalActivityMap();
@ -80,6 +98,7 @@ public class ActivityLogic {
}
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
long userCreateTime = user.getPlayerInfoManager().getCreateTime();
Set<Integer> openNewActivityIds = new HashSet<>();
for(SGlobalActivity sGlobalActivity:sGlobalActivityMap.values()){
int activityId = sGlobalActivity.getId();
if(openActivityIds.contains(activityId)){
@ -95,7 +114,11 @@ public class ActivityLogic {
if(endTime!=0 && now>endTime){
ActivityMission activityMission = activityMissionMap.get(activityId);
if(activityMission!=null){
activityMission.updateActivityState(ActivityType.CLOSE_STATE);
activityManager.removeActivity(activityId);
LOGGER.info("the uid={},remove the activity id ={}",user.getId(),activityId);
if(builder!=null){
builder.addCloseActivityId(activityId);
}
}
continue;
}
@ -105,13 +128,19 @@ public class ActivityLogic {
}
activityManager.initAllActivityMission(activityId);
initOtherActivity(user,sGlobalActivity);
openNewActivityIds.add(activityId);
}else{
ActivityMission activityMission = activityMissionMap.get(activityId);
if(activityMission!=null){
activityMission.updateActivityState(ActivityType.CLOSE_STATE);
activityManager.removeActivity(activityId);
LOGGER.info("the uid={},remove the activity id ={}",user.getId(),activityId);
if(builder!=null){
builder.addCloseActivityId(activityId);
}
}
}
}
return openNewActivityIds;
}
@ -197,7 +226,7 @@ public class ActivityLogic {
dropList.add(finalSTreasureConfig.getTreasureReward());
}
activityProgressInfo.setState(changeState);
activityMission.updateProgressInfo(missionId,activityProgressInfo);
activityMission.updateProgressInfo(finalSTreasureConfig.getId(),activityProgressInfo);
KtEventUtils.onKtEvent(user, ParamEventBean.UserActivityEvent,activityId,finalSTreasureConfig.getId());
}
}
@ -343,16 +372,19 @@ public class ActivityLogic {
User user = UserManager.getUser(uid);
long createTime = user.getPlayerInfoManager().getCreateTime();
int rewardResponseValue = MessageTypeProto.MessageType.GET_ALL_ACTIVITY_RESPONSE_VALUE;
checkActivityOfUser(user);
ActivityManager activityManager = user.getActivityManager();
Map<Integer, ActivityMission> activityMissionMap = activityManager.getActivityMissionMap();
checkActivityOfUser(user,null);
List<CommonProto.ActivityInfo> activityInfoList =getActivityInfos(user.getActivityManager().getActivityMissionMap(), createTime);
PlayerInfoProto.GetAllActivityResponse build = PlayerInfoProto.GetAllActivityResponse.newBuilder().addAllActivityInfo(activityInfoList).build();
MessageUtil.sendMessage(session,1,rewardResponseValue,build,true);
}
private List<CommonProto.ActivityInfo> getActivityInfos(Map<Integer, ActivityMission> activityMissionMap, long createTime){
Map<Integer, SGlobalActivity> sGlobalActivityMap = SGlobalActivity.getsGlobalActivityMap();
List<CommonProto.ActivityInfo> activityInfoList = new ArrayList<>(activityMissionMap.size());
for(Map.Entry<Integer,ActivityMission> activityState : activityMissionMap.entrySet()){
Integer activityId = activityState.getKey();
ActivityMission activityMission = activityState.getValue();
int activityStatus = activityMission.getActivityState();
if(SGlobalActivity.getsGlobalActivityMap().get(activityId).getType()!=7&&activityStatus != ActivityType.OPEN_STATE){
continue;
}
@ -368,9 +400,7 @@ public class ActivityLogic {
}
activityInfoList.add(CommonProto.ActivityInfo.newBuilder().setActivityId(activityId).addAllMission(missionInfos).setStartTime(startTime).setEndTime(endTime).setReallyOpen(activityMission.getOpenType()).build());
}
PlayerInfoProto.GetAllActivityResponse build = PlayerInfoProto.GetAllActivityResponse.newBuilder().addAllActivityInfo(activityInfoList).build();
MessageUtil.sendMessage(session,1,rewardResponseValue,build,true);
return activityInfoList;
}
public void openActivityReallyOpen(User user,int activityType){
@ -442,11 +472,11 @@ public class ActivityLogic {
if(activityMission.getActivityState() != ActivityType.OPEN_STATE){
continue;
}
checkActivityMissionFinishAndTaked(activityMission);
checkActivityMissionFinishAndTaked(item.getKey(),activityMission);
}
}
private void checkActivityMissionFinishAndTaked(ActivityMission activityMission){
private void checkActivityMissionFinishAndTaked(int activityId,ActivityMission activityMission){
Map<Integer, ActivityProgressInfo> activityProgressInfoMap = activityMission.getActivityProgressInfoMap();
boolean isAllTaked = true;
for(Map.Entry<Integer,ActivityProgressInfo> item : activityProgressInfoMap.entrySet()){
@ -455,6 +485,11 @@ public class ActivityLogic {
if(missionStatus == ActivityType.WILL_TAKE){
isAllTaked = false;
}
if(SGlobalActivity.getsGlobalActivityMap().get(activityId).getType() == ActivityType.TREASURE){
if(missionStatus == ActivityType.HAD_TAKED){
isAllTaked = false;
}
}
}
if(isAllTaked){
activityMission.updateActivityState(ActivityType.FINISH_STATE);

View File

@ -33,6 +33,11 @@ public class ActivityManager extends MongoBase {
updateString("activityMissionMap." + activityId,activityMission);
}
public void removeActivity(int activityId){
activityMissionMap.remove(activityId);
removeString(getMongoKey() + ".activityMissionMap." + activityId);
}
public long getTrsendTime() {
return trsendTime;
}