package jdepend.client.ui.circle.domain; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; /** * IpMsg数据包 * * @author Sheldon wang */ public class DataPacket { private String version; private int commandNo; private int packetNo; private String senderName = null; private String senderHost = null; private String additional = null; private String ip = null; public DataPacket() { } public DataPacket(int commandNo) { this.commandNo = commandNo; this.packetNo = (int) new Date().getTime(); this.version = IpMsgConstant.IPMSG_VERSION; this.senderName = SystemVar.USER_NAME; this.senderHost = SystemVar.HOST_NAME; } public String getAdditional() { return additional; } public void setAdditional(String additional) { this.additional = additional; } public int getCommandNo() { return commandNo; } public void setCommandNo(int commandNo) { this.commandNo = commandNo; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPacketNo() { return packetNo; } public void setPacketNo(int packetNo) { this.packetNo = packetNo; } public String getSenderHost() { return senderHost; } public void setSenderHost(String senderHost) { this.senderHost = senderHost; } public String getSenderName() { return senderName; } public void setSenderName(String senderName) { this.senderName = senderName; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } /** * @return Low 8 bits from command number 32 bits */ public int getCommandFunction() { return commandNo & 0x000000FF; } /** * @return (High 24 bits from command number 32 bits) */ public int getOption() { return commandNo & 0xFFFFFF00; } /** * 转换输入的二进制流为数据包 * * @param data * 数据包 * @param ip * 发送端IP * @return */ public static DataPacket createDataPacket(byte[] data, String ip) { if (data == null || ip == null) return null; try { String dataStr = new String(data, SystemVar.DEFAULT_CHARACT); String[] dataArr = dataStr.split(":"); if (dataArr == null) return null; else { DataPacket packet = new DataPacket(); packet.setVersion(dataArr.length >= 1 ? dataArr[0] : ""); packet.setPacketNo((dataArr.length >= 2 ? Integer.parseInt(dataArr[1]) : -1)); packet.setSenderName(dataArr.length >= 3 ? dataArr[2] : ""); packet.setSenderHost(dataArr.length >= 4 ? dataArr[3] : ""); packet.setCommandNo(dataArr.length >= 5 ? Integer.parseInt(dataArr[4]) : 0); if (dataArr.length >= 6) { // 存在附件 StringBuilder strBuf = new StringBuilder(); for (int i = 5; i < dataArr.length; i++) { strBuf.append(dataArr[i]); } packet.setAdditional(strBuf.toString()); } packet.setIp(ip); return packet; } } catch (UnsupportedEncodingException ex) { Logger.getLogger(DataPacket.class.getName()).log(Level.SEVERE, null, ex); return null; } catch (Exception e) { Logger.getLogger(DataPacket.class.getName()).log(Level.SEVERE, null, e); return null; } } public String toString() { return version + ":" + packetNo + ":" + senderName + ":" + senderHost + ":" + commandNo + ":" + additional; } }