private static final String PRIVATE_KEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P";
private static final String CMD_HEADER = "[";
private static final String CMD_COMPANY = "IC";
+// private static final String CMD_COMPANY = "DW";
private static final String CMD_END = "]";
private static final String CMD_HEADER_SPLIT = "*";
private static final String CMD_SPLIT = ",";
- private static final boolean doEncryption = Util.getSystemProperties("persist.sys.encrypt_fzd", "true").equals("true");
+ private static final boolean doEncryption = Util.getSystemProperties("persist.sys.encrypt_fzd", "false").equals("true");
public static final String defaultServerIP = "fzd.xcloudtech.com";
public static final int defaultServerPort = 9000;
private final SharedPreferences sharedPreferences;
String cmd = cmd_msgbuf.substring(0, cmdindex);
cmd_msgbuf = cmd;
}
-
- if (regexUtil.isFZDCMD(cmd_msgbuf)) {
+ if (regexUtil.isFZDCompanyCMD(CMD_COMPANY,cmd_msgbuf)) {
for (CMD_TYPE key : cmdMap.keySet()) {
- if (regexUtil.isFZDCMD(cmdMap.get(key), cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动
+ if (regexUtil.isFZDCompanyCMD(CMD_COMPANY,cmdMap.get(key), cmd_msgbuf)) { //如果是FZD命令,则进行处理,否则保留数据动
ICLogger.i("found cmd keyid=" + key + " ,keyname=" + cmdMap.get(key));
return cmdMap.get(key);
}
}
private int dataPart = 1;
-
+ private StringBuffer cmdbuf = new StringBuffer();
private byte[] totalByte;
-
/*
- 返回true 表示 cmd 全部解析成功
- 返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用
- 字符串通过#号进行识别。
- 每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃
- */
+ 返回true 表示 cmd 全部解析成功
+ 返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用
+ 字符串通过#号进行识别。
+ 每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃
+ */
public boolean parserCmd(byte[] bytes) {
- ICLogger.d("source byte size == > " + bytes.length);
- String dataStr = new String(bytes);
- //因为buffer有限,所以以[判断开头,以]判断结尾,这些数据要叠加起来
- //这样才是完整的数据
- //by TrillGates
- ICLogger.d("添加第" + dataPart + "部分数据.");
- dataPart++;
- if (dataStr.startsWith(CMD_HEADER + CMD_COMPANY + CMD_HEADER_SPLIT)) {
- ICLogger.d("头部数据,开始接收数据了...");
- //命令开始,准备好容器,开始保存数据
- dataPart = 1;
- totalByte = bytes;
- } else {
- //对数据进行合并
- totalByte = byteMerger(totalByte, bytes);
- }
- //命令结束,开始处理内容
- if (dataStr.endsWith(CMD_END)) {
- ICLogger.d("数据接收结束..开始处理数据." + totalByte.length);
- //处理数据了
- //获取指令
- String content = new String(totalByte);
- ICLogger.d("total content == > " + content);
- //切割出指令
- int cmdIndex = content.indexOf(CMD_SPLIT);
- ICLogger.d("cmdIndex == > " + cmdIndex);
- //指令带数据的
- String cmd = null;
- if (cmdIndex > 0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据
- cmd = content.substring(1, cmdIndex);
- } else if (content.startsWith(CMD_HEADER) && content.endsWith(CMD_END)) {
- //纯指令的:[IC*860314001009830*0002*LK],没有逗号的
- cmd = content.replace("[", "").replace("]", "");
+
+ ICLogger.d("bytes.size " + bytes.length);
+ cmdbuf.append( new String(bytes));
+ ICLogger.d("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString());
+
+ while( !isCmdStr(cmdbuf.toString()).isEmpty()) {
+ String cmd_msgbuf = "";
+ int cmdindexHead = cmdbuf.indexOf(CMD_HEADER);
+ int cmdindexEnd = cmdbuf.indexOf(CMD_END);
+ if (cmdindexEnd > 0 && cmdindexHead >= 0) {
+ cmd_msgbuf = cmdbuf.substring(cmdindexHead+1, cmdindexEnd);
}
- ICLogger.d("cmd ---> " + cmd);
- //处理内容
+
+// if (cmdbuf.toString().split(CMD_COMPANY + CMD_HEADER_SPLIT).length > 1) {
+// ICLogger.d("More than 1 cmd in buffer ! just log it");
+// }
+ String cmdname=isCmdStr(cmd_msgbuf);
for (CMD_TYPE key : cmdMap.keySet()) {
- //如果是FZD命令,则进行处理,否则保留数据动
- if (regexUtil.isFZDCMD(cmdMap.get(key), cmd)) {
+// ICLogger.d("key " + cmdMap.get(key) +" "+cmdname+" cmdbuf " + cmd_msgbuf);
+ if (cmdMap.get(key).equals(cmdname)) { //如果是FZD命令,则进行处理,否则保留数据动
+
ICLogger.d("key is == > " + key);
- if (key == CMD_TYPE.TK) {
- handlerGroupChatVoiceContent(totalByte);
- } else if (key == CMD_TYPE.TKOne) {
- handlerOneChatVoiceContent(totalByte);
- } else if (key == CMD_TYPE.TKIMG) {
- handleImage(totalByte);
- } else {
- String data = content.replace(CMD_HEADER, "").replace(cmd, "").replace(CMD_END, "");
- if (data.startsWith(CMD_SPLIT)) {
- data = data.substring(1);
- }
- handleCmd(key, cmd, data);
+// if (key == CMD_TYPE.TK) {
+// handlerGroupChatVoiceContent(totalByte);
+// } else if (key == CMD_TYPE.TKOne) {
+// handlerOneChatVoiceContent(totalByte);
+// } else if (key == CMD_TYPE.TKIMG) {
+// handleImage(totalByte);
+// }
+// else
+ {
+
+ handleCmd(key, cmdname, cmd_msgbuf);
}
+ cmdbuf.delete(0, cmd_msgbuf.length()+2);//处理后清空
+ break;
}
}
}
+ ICLogger.d("parserCmd done");
return true;
}