private byte[] merge(Hashtable msght) { int s = msght.size(); // System.out.println("--------------------s="+s); byte[] tmpb = (byte[]) msght.get("" + s + "_" + (s - 1)); int tmpi = tmpb.length; // System.out.println("-----------------1tmpi="+tmpi); int len = (s - 1) * MAX_PACKET_LENGTH + tmpi; byte[] tmpbuf = new byte[len]; // System.out.println("-----------------1---"); System.arraycopy(tmpb, 0, tmpbuf, (s - 1) * MAX_PACKET_LENGTH, tmpi); for (int i = 0; i < (s - 1); i++) { tmpb = (byte[]) msght.get("" + s + "_" + i); System.arraycopy(tmpb, 0, tmpbuf, i * MAX_PACKET_LENGTH, MAX_PACKET_LENGTH); } return tmpbuf; }
private void processMsg(byte[] msgbyte) { // 得到主题 HeaderItem hi = HeaderItem.fetchHeaderItem(msgbyte); String strtop = hi.getContentStr(); // System.out.println("recved header="+strtop); if (!msgTopic.isMatch(strtop)) { return; } byte[] tmpbytes = HeaderItem.cutHeaderItem(msgbyte, hi); // 得到唯一id hi = HeaderItem.fetchHeaderItem(tmpbytes); String tmpid = hi.getContentStr(); // System.out.println("recved id="+tmpid); Hashtable tmph = (Hashtable) idMsgBuf.get(tmpid); if (tmph == null) { tmph = new Hashtable(); idMsgBuf.put(tmpid, tmph); } tmpbytes = HeaderItem.cutHeaderItem(tmpbytes, hi); // 得到顺序号 hi = HeaderItem.fetchHeaderItem(tmpbytes); tmpbytes = HeaderItem.cutHeaderItem(tmpbytes, hi); String strord = hi.getContentStr(); // System.out.println("recved order id="+strord); tmph.put(strord, tmpbytes); // System.out.println("recved ="+new String(tmpbytes)); int d = strord.indexOf('_'); int pknum = Integer.parseInt(strord.substring(0, d)); if (tmph.size() == pknum) { // 一个主题的信息收齐,通知顶层 int s = callBack.size(); byte[] tmprecv = merge(tmph); // System.out.println ("Recving-----"+strtop+"["+tmprecv.length+"]") ; if (DEBUG) { log("UdpBase Recved<<----[" + strtop + "][" + tmprecv.length + "]"); } for (int k = 0; k < s; k++) { ((UDPBaseCallback) callBack.elementAt(k)).OnMsg(this, strtop, tmprecv); } idMsgBuf.remove(tmpid); } }