`

特定的方法只做特定的事情

阅读更多
/** 是否还有战斗未结束 */
	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)

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics