package com.github.yuriyao.FLRMI; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 序列化工具注册中心 * * @author fengjing.yfj * @version $Id: FLRMISerizableCenter.java, v 0.1 2014年1月27日 上午10:52:03 fengjing.yfj Exp $ */ public abstract class FLRMISerizableCenter { /** 所有注册的序列化方法 */ private static final Map<Integer, SerizableMessageMeta> serizables = new ConcurrentHashMap<Integer, SerizableMessageMeta>(); /** * 注册信元的序列化的函数 * * @param smm 序列化函数 * @param override 存在相同的mark的是否进行覆盖 */ public static synchronized void registerSerizableMessageMeta(SerizableMessageMeta smm, boolean override) { if (smm == null) { throw new FLRMIException("序列化信元中心注册空指针"); } //检查是否已经存在相同的信元 if (!override) { if (serizables.get(smm.getMark()) != null) { throw new FLRMIException("序列化信元工具已经存在"); } } //进行注册 serizables.put(smm.getMark(), smm); } /** * 采用覆盖的方法注册信元序列化工具 * * @param smm 信元序列化工具 */ public static void registerSerizableMessageMeta(SerizableMessageMeta smm) { registerSerizableMessageMeta(smm, true); } /** * 只有当不存在指定的序列化工具才会进行注册 * * @param smm 信元序列化工具 */ public static synchronized void registerSerizableMessageMetaIfNotExist(SerizableMessageMeta smm) { if (smm == null) { throw new FLRMIException("序列化信元中心注册空指针"); } if (serizables.get(smm.getMark()) == null) { serizables.put(smm.getMark(), smm); } } /** * 获取指定mark的序列化信元工具 * * @param mark 信元序列化的标志 * @return */ public static synchronized SerizableMessageMeta getSerizableMessageMeta(Integer mark) { return serizables.get(mark); } }