|  |  | 
 |  |  |  | 
 |  |  | public class PrefixedDataAvailableHandleImp implements PrefixedDataAvailableHandle { | 
 |  |  |     | 
 |  |  |    private static Logger log = LogManager.getLogger(PrefixedDataAvailableHandleImp.class) ; | 
 |  |  |    private static final Logger log = LogManager.getLogger(PrefixedDataAvailableHandleImp.class) ; | 
 |  |  |     | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 在多线程环境中运行 | 
 |  |  |     * 分析上线数据(网络连接后第一包数据)是否可获得 | 
 |  |  |     * @param in | 
 |  |  |     * @return | 
 |  |  |     * @throws Exception | 
 |  |  |     * @param in IoBuffer | 
 |  |  |     * @return PrefixedDataAvailableStatus | 
 |  |  |     */ | 
 |  |  |    public PrefixedDataAvailableStatus forOnLine(IoBuffer in){ | 
 |  |  |        int remain = in.remaining() ; | 
 |  |  | 
 |  |  |           try{ | 
 |  |  |              PrefixedDataAvailableStatus pds = null ; | 
 |  |  |               | 
 |  |  |              HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = ProtocolCach.getPrefixedDataAvailableMap() ; | 
 |  |  |              HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = ProtocolCache.getPrefixedDataAvailableMap() ; | 
 |  |  |              Collection<AnnotationPrefixedDataAvailableVo> set = prefixedDataAvailableMap.values() ; | 
 |  |  |              if(set == null || set.size() == 0){ | 
 |  |  |              if(set.size() == 0){ | 
 |  |  |                 throw new Exception("上线数据完整性检查时,得到的协议完整性检查类集合为空。") ; | 
 |  |  |              } | 
 |  |  |              int prority = ProtocolConstant.firstPriority ; | 
 |  |  |              int priority = ProtocolConstant.firstPriority ; | 
 |  |  |  | 
 |  |  |              while(true){ | 
 |  |  |                 Object[] objs = this.getClassObjAndAnnotationVo(prority, set) ; | 
 |  |  |                 Object[] objs = this.getClassObjAndAnnotationVo(priority, set) ; | 
 |  |  |                 PrefixedDataAvailable pda = (PrefixedDataAvailable)objs[0] ; | 
 |  |  |                 if(pda == null && prority == ProtocolConstant.firstPriority){ | 
 |  |  |                    throw new Exception("上线数据完整性检查时,未得到优先级为" + prority + "上线数据完整性检查类!") ; | 
 |  |  |                 if(pda == null && priority == ProtocolConstant.firstPriority){ | 
 |  |  |                    throw new Exception("上线数据完整性检查时,未得到优先级为" + priority + "上线数据完整性检查类!") ; | 
 |  |  |                 }else if(pda == null){ | 
 |  |  |                    //说明上线数据完整性检查类集合已经遍历完了。 | 
 |  |  |                    break ; | 
 |  |  | 
 |  |  |                 if(pds == null){ | 
 |  |  |                   //说明不是对应的协议数据,需要另外的协议来处理上线 | 
 |  |  |                   //循环继续 | 
 |  |  |                   prority++ ; | 
 |  |  |                   priority++ ; | 
 |  |  |                }else{ | 
 |  |  |                   //停止循环,返回结果 | 
 |  |  |                   break ; | 
 |  |  | 
 |  |  |    /** | 
 |  |  |     * 在多线程环境中运行 | 
 |  |  |     * 分析上行数据(网络连接后第二(包含)包以后数据)是否可获得 | 
 |  |  |     * @param in | 
 |  |  |     * @param clientProtocol | 
 |  |  |     * @param maxDataLength | 
 |  |  |     * @return | 
 |  |  |     * @throws Exception | 
 |  |  |     * @param in IoBuffer | 
 |  |  |     * @return PrefixedDataAvailableStatus | 
 |  |  |     */ | 
 |  |  |    public PrefixedDataAvailableStatus forUpData(IoBuffer in){ | 
 |  |  |       int remain = in.remaining() ; | 
 |  |  | 
 |  |  |           try{ | 
 |  |  |             PrefixedDataAvailableStatus pds = null ; | 
 |  |  |               | 
 |  |  |              HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = ProtocolCach.getPrefixedDataAvailableMap() ; | 
 |  |  |              HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = ProtocolCache.getPrefixedDataAvailableMap() ; | 
 |  |  |              Collection<AnnotationPrefixedDataAvailableVo> set = prefixedDataAvailableMap.values() ; | 
 |  |  |              if(set == null || set.size() == 0){ | 
 |  |  |              if(set.size() == 0){ | 
 |  |  |                 throw new Exception("上线数据完整性检查时,得到的协议集合为空。") ; | 
 |  |  |              } | 
 |  |  |              int prority = ProtocolConstant.firstPriority ; | 
 |  |  | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 得到处理类对象 | 
 |  |  |     * @param prority | 
 |  |  |     * @param set | 
 |  |  |     * @return | 
 |  |  |     * @throws Exception | 
 |  |  |     * @param prority 优先级 | 
 |  |  |     * @param set 集合 | 
 |  |  |     * @return Object[] | 
 |  |  |     * @throws Exception 异常 | 
 |  |  |     */ | 
 |  |  |    private Object[] getClassObjAndAnnotationVo(int prority, Collection<AnnotationPrefixedDataAvailableVo> set) throws Exception{ | 
 |  |  |       PrefixedDataAvailable obj = null ; |