Java8与游戏开发(二)

游戏开发要使用到一些返回码,所以总结一下经验。

开发的时候,会根据条件返回错误码,通常策划还没有配置错误码的数据,应该保留后端和策划两套错误码:

/**
 * 后端与策划的结果码数据独立分来成两套,有利于维护
 * 
 * @author 林子豪
 *
 */
public enum ResultCode implements Serializable {

	SUCCESS(0, "成功"),
	EXCEPTION(1, "系统出错啦"),
	CONN_ERR(2, "连接失败"),
	PARAM_EMPTY(3, "缺少参数"),
	PAPAM_ILLEGAL(4, "参数格式非法"),
	DATA_EMPTY(5, "数据缺失"),
	DATA_NOT_FOUND(6, "没有找到数据"),
	CONDITION_NOT_MATCH(7, "条件不匹配"),
	DATA_ILLEGAL(8, "数据格式非法"),
	DATA_ERROR(9, "数据错误"),
	ERROR(10, "操作失败"),
	OPERATION_UNSUPPORTED(11, "当前版本不支持的操作"),
	LOGIN_REQUIRED(12, "需要登录"),
	SERVER_NOT_START(13, "服务器未启动"),
	TOKEN_ILLEGAL(14, "token验证不通过"),
	SERVER_RESTRICTED(15, "服务器维护中");

	private static final long serialVersionUID = 3952740639419677143L;

	private static final int CODE_SUCCESS = 0;

	private String developDetail = "";

	private String onlineDetail = "";

	private int developCode = 0;

	private int onlineCode = 0;

	//策划还没有配置对应的错误码
	private boolean isDeveloping = true;

	private ResultCode(int developCode, String developDetail) {
		this.developCode = developCode;
		this.developDetail = developDetail;
	}

	private ResultCode(int developCode, String developDetail, int onlineCode, String onlineDetail) {
		this.developCode = developCode;
		this.developDetail = developDetail;
		this.onlineCode = onlineCode;
		this.onlineDetail = onlineDetail;
		this.isDeveloping = false;
	}

	private ResultCode(int developCode, String developDetail, String onlineDetail) {
		this.developCode = developCode;
		this.developDetail = developDetail;
		this.onlineCode = developCode;
		this.onlineDetail = onlineDetail;
		this.isDeveloping = false;
	}

	private ResultCode(int developCode, String developDetail, int onlineCode) {
		this.developCode = developCode;
		this.developDetail = developDetail;
		this.onlineCode = onlineCode;
		this.onlineDetail = developDetail;
		this.isDeveloping = false;
	}

	public String getDevelopDetail() {
		return developDetail;
	}

	public void setDevelopDetail(String developDetail) {
		this.developDetail = developDetail;
	}

	public String getOnlineDetail() {
		return onlineDetail;
	}

	public void setOnlineDetail(String onlineDetail) {
		this.onlineDetail = onlineDetail;
	}

	public int getDevelopCode() {
		return developCode;
	}

	public void setDevelopCode(int developCode) {
		this.developCode = developCode;
	}

	public int getOnlineCode() {
		return onlineCode;
	}

	public void setOnlineCode(int onlineCode) {
		this.onlineCode = onlineCode;
	}

	public boolean isDeveloping() {
		return isDeveloping;
	}

	public void setDeveloping(boolean isDeveloping) {
		this.isDeveloping = isDeveloping;
	}

	////////////////////////////////////////////////////////其他方法
	private static Map<Integer, ResultCode> developCodeCache = new HashMap<>();

	private static Map<Integer, ResultCode> onlineCodeCache = new HashMap<>();

	static {
		Set<Integer> codeSet = new HashSet<>();
		for (ResultCode errCode : values()) {
			if (codeSet.contains(errCode.getDevelopCode())) {
				new Exception("存在相同的错误码" + errCode.getDevelopCode()).printStackTrace();
			} else {
				codeSet.add(errCode.getDevelopCode());
			}

			developCodeCache.put(errCode.getDevelopCode(), errCode);
			if (!errCode.isDeveloping) {
				onlineCodeCache.put(errCode.getOnlineCode(), errCode);
			}
		}
	}

	/**
	 * 约定小于等于0为成功
	 */
	public boolean isSuccess() {
		return developCode <= CODE_SUCCESS;
	}

	public boolean isNotSuccess() {
		return developCode > CODE_SUCCESS;
	}

	public static ResultCode of(int code) {
		ResultCode resultCode = onlineCodeCache.get(code);
		if (resultCode != null && !resultCode.isDeveloping) {
			return resultCode;
		}
		return developCodeCache.get(code);
	}

	public static ResultCode ofOnlineCode(int code) {
		return onlineCodeCache.get(code);
	}

	@Override
	public String toString() {
		return String.format("developCode=%s,onlineCode=%s, developDetail=%s, onlineDetail=%s", developCode, onlineCode, developDetail, onlineDetail);
	}

	public String getDetail() {
		return isDeveloping ? developDetail : onlineDetail;
	}

	public Map<String, Object> transToParamMap() {
		HashMap<String, Object> retMap = new HashMap<String, Object>();
		if (isDeveloping) {
			retMap.put("code", developCode);
			retMap.put("detail", developDetail);
		} else {
			retMap.put("code", onlineCode);
			retMap.put("detail", onlineDetail);
		}
		return retMap;
	}

}

猜你喜欢

转载自blog.csdn.net/lin451791119/article/details/81023220