/** 是否还有战斗未结束 */
public static boolean hasWarNotEnd(long roleId) {
WarBean wb = getWarByRole(roleId);
if(wb == null) {
WarEndListenerBase listener = getCacheWarEndListener(roleId);
if (listener == null) {
return false;
}
} else {
long gapTime = System.currentTimeMillis()-wb.getWarBeginTime();
// 结束掉超过两个小时的战斗
if(gapTime >= 3600*1000*2) {
//代码注释掉,导致死循环
try {
warEnd(roleId, -1, new WarEndInfoBean(false), true);
} catch (Exception e) {
e.printStackTrace();
logger.error("自动结束玩家["+roleId+"]上一场战斗发生错误,因为战斗时间超过2小时!", e);
}
return false;
}
}
return true;
}
该段代码喜欢在判断战斗是否结束的情况下,把超过2小时的战斗偷偷的结束,在用户登录,需要判断用户是否在战斗中的代码还是在引用是否这个方法,导致出现了死循环 。这个方法在方法命名上只判断是否结束,而不应该做操作,方法的命名和方法的实现应该尽量的遵循统一的规则,不然很容易造成歧义而写出类似的代码
at com.game.business.listener.SingleWarEndListener.doProcess(SingleWarEndListener.java:98)
at com.game.business.manager.WarManager.doWarEndListener(WarManager.java:734)
at com.game.business.manager.WarManager.warEnd(WarManager.java:848)
at com.game.business.manager.WarManager.hasWarNotEnd(WarManager.java:2087)
at com.game.business.listener.SingleWarEndListener.doProcess(SingleWarEndListener.java:98)
at com.game.business.manager.WarManager.doWarEndListener(WarManager.java:734)
at com.game.business.manager.WarManager.warEnd(WarManager.java:848)
at com.game.business.manager.WarManager.hasWarNotEnd(WarManager.java:2087)
at com.game.business.listener.SingleWarEndListener.doProcess(SingleWarEndListener.java:98)
at com.game.business.manager.WarManager.doWarEndListener(WarManager.java:734)
at com.game.business.manager.WarManager.warEnd(WarManager.java:848)
at com.game.business.manager.WarManager.hasWarNotEnd(WarManager.java:2087)
at com.game.business.listener.SingleWarEndListener.doProcess(SingleWarEndListener.java:98)
at com.game.business.manager.WarManager.doWarEndListener(WarManager.java:734)
at com.game.business.manager.WarManager.warEnd(WarManager.java:848)
at com.game.business.manager.WarManager.hasWarNotEnd(WarManager.java:2087)
at com.game.business.listener.SingleWarEndListener.doProcess(SingleWarEndListener.java:98)
at com.game.business.manager.WarManager.doWarEndListener(WarManager.java:734)
at com.game.business.manager.WarManager.warEnd(WarManager.java:848)
at com.game.business.manager.WarManager.hasWarNotEnd(WarManager.java:2087)
at com.game.business.listener.SingleWarEndListener.doProcess(SingleWarEndListener.java:98)
at com.game.business.manager.WarManager.doWarEndListener(WarManager.java:734)
at com.game.business.manager.WarManager.warEnd(WarManager.java:848)
at com.game.business.manager.WarManager.hasWarNotEnd(WarManager.java:2087)
at com.game.business.listener.SingleWarEndListener.doProcess(SingleWarEndListener.java:98)
at com.game.business.manager.WarManager.doWarEndListener(WarManager.java:734)
at com.game.business.manager.WarManager.warEnd(WarManager.java:848)
at com.game.business.manager.WarManager.hasWarNotEnd(WarManager.java:2087)
at com.game.business.listener.SingleWarEndListener.doProcess(SingleWarEndListener.java:98)
at com.game.business.manager.WarManager.doWarEndListener(WarManager.java:734)
at com.game.business.manager.WarManager.warEnd(WarManager.java:848)
at com.game.business.manager.WarManager.hasWarNotEnd(WarManager.java:2087)