import com.enqualcomm.support.utils.Util;
import com.enqualcomm.support.utils.WifiSupport;
import com.enqualcomm.support.utils.regexUtil;
+import com.ic.fzd.weather.FZDWeatherInfo;
import com.sina.util.dnscache.AppConfigUtil;
import java.io.ByteArrayOutputStream;
*/
public class protocol_fzd {
private static final String TAG = "ICSrv." + protocol_fzd.class.getSimpleName();
- private static final String PrivKEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P";
- private static final String CMDHEADER = "[";
- private static final String CMDCOMPANY = "IC";
- private static final String CMDEND = "]";
- private static final String CMDHEADERSPLIT = "*";
- private static final String CMDSPLIT = ",";
+ 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_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");
- public static final String defaultServerIP = "fzd.xcloudtech.com";
+ public static final String defaultServerIP = "api.xcloudtech.com";
public static final int defaultServerPort = 9000;
private final SharedPreferences sharedPreferences;
private final Handler mHandler;
StringBuilder sb = new StringBuilder();
if (doEncryption) {
String keyHeader = keyheader(cmd, tkLength);
- sb.append(CMDHEADER).append(keyHeader).append(header);
+ sb.append(CMD_HEADER).append(keyHeader).append(header);
} else {
- sb.append(CMDHEADER).append(header);
+ sb.append(CMD_HEADER).append(header);
}
//头部构造好了,添加逗号
- sb.append(CMDSPLIT);
+ sb.append(CMD_SPLIT);
//转成byte
bos.write(sb.toString().getBytes());
//追加数据
bos.write(result);
//追加结尾
- bos.write(CMDEND.getBytes());
+ bos.write(CMD_END.getBytes());
} else {
//单聊
cmd = cmdMap.get(CMD_TYPE.TKOne);
StringBuilder sb = new StringBuilder();
if (doEncryption) {
String keyHeader = keyheader(cmd, tkLength);
- sb.append(CMDHEADER).append(keyHeader).append(header);
+ sb.append(CMD_HEADER).append(keyHeader).append(header);
} else {
- sb.append(CMDHEADER).append(header);
+ sb.append(CMD_HEADER).append(header);
}
//头部构造好了,添加逗号
- sb.append(CMDSPLIT);
+ sb.append(CMD_SPLIT);
//添加APP账号
sb.append(remoteNum);
- sb.append(CMDSPLIT);
+ sb.append(CMD_SPLIT);
//秒数
ICLogger.d("duration == > " + duration);
sb.append(duration);
- sb.append(CMDSPLIT);
+ sb.append(CMD_SPLIT);
//加入数据
bos.write(sb.toString().getBytes());
//数据包数据
bos.write(result);
//结尾数据
- bos.write(CMDEND.getBytes());
+ bos.write(CMD_END.getBytes());
}
//发送数据
mConnection.send(cmd, bos.toByteArray());
//发送消息
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyMMddHHmmss");
String timeFormat = simpleDateFormat.format(System.currentTimeMillis());
- int cmdLength = cmd.length() + CMDSPLIT.length() + "5".length() + CMDSPLIT.length()
- + timeFormat.length() + CMDSPLIT.length() + result.length;
+ int cmdLength = cmd.length() + CMD_SPLIT.length() + "5".length() + CMD_SPLIT.length()
+ + timeFormat.length() + CMD_SPLIT.length() + result.length;
ICLogger.d("cmdLength == > " + cmdLength);
String header = genHeader(cmdLength, cmd);
StringBuilder sb = new StringBuilder();
if (doEncryption) {
String keyHeader = keyheader(cmd, cmdLength);
- sb.append(CMDHEADER).append(keyHeader).append(header);
+ sb.append(CMD_HEADER).append(keyHeader).append(header);
} else {
- sb.append(CMDHEADER).append(header);
+ sb.append(CMD_HEADER).append(header);
}
//头部构造好了,添加逗号
- sb.append(CMDSPLIT);
+ sb.append(CMD_SPLIT);
//追加x
sb.append("5");
- sb.append(CMDSPLIT);
+ sb.append(CMD_SPLIT);
//追加Y
sb.append(timeFormat);
- sb.append(CMDSPLIT);
+ sb.append(CMD_SPLIT);
//转成byte
bos.write(sb.toString().getBytes());
//追加数据Z
bos.write(result);
//追加结尾
- bos.write(CMDEND.getBytes());
+ bos.write(CMD_END.getBytes());
//发送数据
mConnection.send(cmd, bos.toByteArray());
bos.reset();
*/
public static String isCmdStr(String msg) {
String cmd_msgbuf = msg;
- int cmdindex = cmd_msgbuf.indexOf(CMDCOMPANY + CMDHEADERSPLIT);
+ int cmdindex = cmd_msgbuf.indexOf(CMD_COMPANY + CMD_HEADER_SPLIT);
if (cmdindex > 0) { //如果开头不是CMDHEADER但是包含CMDHEADER则删除前面的数据
String cmd = cmd_msgbuf.substring(cmdindex);
cmd_msgbuf = cmd;
}
- cmdindex = cmd_msgbuf.indexOf(CMDEND);
+ cmdindex = cmd_msgbuf.indexOf(CMD_END);
if (cmdindex > 0) {
String cmd = cmd_msgbuf.substring(0, cmdindex);
cmd_msgbuf = cmd;
}
- cmdindex = cmd_msgbuf.indexOf(CMDSPLIT);
+ cmdindex = cmd_msgbuf.indexOf(CMD_SPLIT);
if (cmdindex > 0) {
String cmd = cmd_msgbuf.substring(0, cmdindex);
cmd_msgbuf = cmd;
//by TrillGates
ICLogger.d("添加第" + dataPart + "部分数据.");
dataPart++;
- if (dataStr.startsWith(CMDHEADER + CMDCOMPANY + CMDHEADERSPLIT)) {
+ if (dataStr.startsWith(CMD_HEADER + CMD_COMPANY + CMD_HEADER_SPLIT)) {
ICLogger.d("头部数据,开始接收数据了...");
//命令开始,准备好容器,开始保存数据
dataPart = 1;
totalByte = byteMerger(totalByte, bytes);
}
//命令结束,开始处理内容
- if (dataStr.endsWith(CMDEND)) {
+ if (dataStr.endsWith(CMD_END)) {
ICLogger.d("数据接收结束..开始处理数据." + totalByte.length);
//处理数据了
//获取指令
String content = new String(totalByte);
ICLogger.d("total content == > " + content);
//切割出指令
- int cmdIndex = content.indexOf(CMDSPLIT);
+ 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(CMDHEADER) && content.endsWith(CMDEND)) {
+ } else if (content.startsWith(CMD_HEADER) && content.endsWith(CMD_END)) {
//纯指令的:[IC*860314001009830*0002*LK],没有逗号的
cmd = content.replace("[", "").replace("]", "");
}
} else if (key == CMD_TYPE.TKIMG) {
handleImage(totalByte);
} else {
- String data = content.replace(CMDHEADER, "").replace(cmd, "").replace(CMDEND, "");
- if (data.startsWith(CMDSPLIT)) {
+ String data = content.replace(CMD_HEADER, "").replace(cmd, "").replace(CMD_END, "");
+ if (data.startsWith(CMD_SPLIT)) {
data = data.substring(1);
}
handleCmd(key, cmd, data);
}
String imei = CoreService.getInstance().getRuntime().IMEI();
- return new StringBuilder().append(CMDCOMPANY).append(CMDHEADERSPLIT)
- .append(imei).append(CMDHEADERSPLIT)
- .append(getHexLen(len)).append(CMDHEADERSPLIT).append(cmd).toString();
+ return new StringBuilder().append(CMD_COMPANY).append(CMD_HEADER_SPLIT)
+ .append(imei).append(CMD_HEADER_SPLIT)
+ .append(getHexLen(len)).append(CMD_HEADER_SPLIT).append(cmd).toString();
}
private static String keyheader(String cmd, int len) {
String header = genHeader(len, cmd);
- String key = MD5.getCMDStringMD5(header + PrivKEY);
+ String key = MD5.getCMDStringMD5(header + PRIVATE_KEY);
return key;
}
String header = genHeader(len, CMD);
if (doEncryption) {
String keyheader = keyheader(CMD, len);
- sb.append(CMDHEADER).append(keyheader).append(header).append(CMDEND);
+ sb.append(CMD_HEADER).append(keyheader).append(header).append(CMD_END);
} else {
- sb.append(CMDHEADER).append(header).append(CMDEND);
+ sb.append(CMD_HEADER).append(header).append(CMD_END);
}
return genStringMessage(CMD, sb.toString());
}
public static StringMessage genFZDCMD(String CMD, String data) {
StringBuilder sb = new StringBuilder();
- String data_buf = CMD + CMDSPLIT + data;
+ String data_buf = CMD + CMD_SPLIT + data;
int data_buf_len = data_buf.length();
String header = genHeader(data_buf_len, CMD);
if (doEncryption) {
String keyheader = keyheader(CMD, data_buf_len);//计算header md5值
- sb.append(CMDHEADER).append(keyheader).append(header).append(CMDSPLIT).append(data).append(CMDEND);
+ sb.append(CMD_HEADER).append(keyheader).append(header).append(CMD_SPLIT).append(data).append(CMD_END);
} else {
- sb.append(CMDHEADER).append(header).append(CMDSPLIT).append(data).append(CMDEND);
+ sb.append(CMD_HEADER).append(header).append(CMD_SPLIT).append(data).append(CMD_END);
}
return genStringMessage(CMD, sb.toString());
}
public static StringMessage KA(Runtime runtime) {
StringBuilder sb = new StringBuilder();
String cmd = cmdMap.get(CMD_TYPE.KA);
- sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
- .append(runtime.getTotalStepCount()).append(CMDSPLIT)
- .append(runtime.getRolltimes()).append(CMDSPLIT)
+ sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMD_SPLIT)
+ .append(runtime.getTotalStepCount()).append(CMD_SPLIT)
+ .append(runtime.getRolltimes()).append(CMD_SPLIT)
.append(runtime.getBattery());
return genFZDCMD(cmd, sb.toString());
}
*/
public void handleSILENCETIME2(Connection connection, Runtime runtime, String cmd, String data) {
connection.send(SILENCETIME2(runtime));
- String[] silent_items = data.split(CMDSPLIT);
+ String[] silent_items = data.split(CMD_SPLIT);
ArrayList<Silent> slist = new ArrayList<>();
if (silent_items.length > 0) {
for (String si : silent_items) {
* 实例: [XT*1234567890*001D*LGZONE,+8,08:00:00,2016-01-12]
*/
public void handleLGZONE(Runtime runtime, String data) {
- String[] list = data.split(CMDSPLIT);
+ String[] list = data.split(CMD_SPLIT);
if (list.length == 3) {
String timeZone = list[0].trim();
String date = list[2].trim();
*/
private static String getLocationData(Runtime runtime) {
StringBuilder sb = new StringBuilder();
- sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
- .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT)
- .append(runtime.getFZDGPSData()).append(CMDSPLIT)
- .append(String.format("%03d", abs(runtime.getSignalStrength()))).append(CMDSPLIT)
- .append(runtime.getBattery()).append(CMDSPLIT)
- .append(runtime.getTotalStepCount()).append(CMDSPLIT)
- .append(runtime.getRolltimes()).append(CMDSPLIT)
- .append(runtime.getFZDDevStatus(runtime)).append(CMDSPLIT)
- .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT)
+ sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMD_SPLIT)
+ .append(TimeUtil.getSystemTimeHHmmss()).append(CMD_SPLIT)
+ .append(runtime.getFZDGPSData()).append(CMD_SPLIT)
+ .append(String.format("%03d", abs(runtime.getSignalStrength()))).append(CMD_SPLIT)
+ .append(runtime.getBattery()).append(CMD_SPLIT)
+ .append(runtime.getTotalStepCount()).append(CMD_SPLIT)
+ .append(runtime.getRolltimes()).append(CMD_SPLIT)
+ .append(runtime.getFZDDevStatus(runtime)).append(CMD_SPLIT)
+ .append(runtime.getFZDLBSMultiStationData()).append(CMD_SPLIT)
.append(runtime.getFZDWifiData());
return sb.toString();
}
public static StringMessage AL(Runtime runtime) {
StringBuilder sb = new StringBuilder();
String cmd = cmdMap.get(CMD_TYPE.AL);
- sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMDSPLIT)
- .append(TimeUtil.getSystemTimeHHmmss()).append(CMDSPLIT)
- .append(runtime.getFZDGPSData()).append(CMDSPLIT)
- .append(String.format("%03d", abs(runtime.getSignalStrength()))).append(CMDSPLIT)
- .append(runtime.getBattery()).append(CMDSPLIT)
- .append(runtime.getTotalStepCount()).append(CMDSPLIT)
- .append(runtime.getRolltimes()).append(CMDSPLIT)
- .append(runtime.getFZDDevStatus(runtime)).append(CMDSPLIT)
- .append(runtime.getFZDLBSMultiStationData()).append(CMDSPLIT)
+ sb.append(TimeUtil.getSystemDateYYMMDD()).append(CMD_SPLIT)
+ .append(TimeUtil.getSystemTimeHHmmss()).append(CMD_SPLIT)
+ .append(runtime.getFZDGPSData()).append(CMD_SPLIT)
+ .append(String.format("%03d", abs(runtime.getSignalStrength()))).append(CMD_SPLIT)
+ .append(runtime.getBattery()).append(CMD_SPLIT)
+ .append(runtime.getTotalStepCount()).append(CMD_SPLIT)
+ .append(runtime.getRolltimes()).append(CMD_SPLIT)
+ .append(runtime.getFZDDevStatus(runtime)).append(CMD_SPLIT)
+ .append(runtime.getFZDLBSMultiStationData()).append(CMD_SPLIT)
.append(runtime.getFZDWifiData());
return genFZDCMD(cmd, sb.toString());
}
public static StringMessage blood(int pbl, int pbh) {
- String data = pbh + CMDSPLIT + pbl;
+ String data = pbh + CMD_SPLIT + pbl;
return genFZDCMD(cmdMap.get(CMD_TYPE.blood), data);
}
connection.send(SOS());
//TODO:保存到fzd的联系人里,类型为SOS
if (data != null && data.length() > 0) {
- String[] list = data.split(CMDSPLIT);
+ String[] list = data.split(CMD_SPLIT);
ArrayList<Contact> contactArray = new ArrayList<Contact>();
ContentValues contentValues = new ContentValues();
contentValues.put(FZDDatabaseHelper.fType, FZDDatabaseHelper.MemberType.SOS);
* 终端回复:[IC*334588000000156*0003*PHL]
*/
public void handlePHL(Connection connection, Runtime runtime, String cmd, String data) {
- String list[] = data.split(CMDSPLIT);
+ String list[] = data.split(CMD_SPLIT);
int listLen = list.length;
boolean isPared = ((listLen >= 0) && (listLen % 2 == 0));
if (isPared) {
private void handlerPPQ(String data, Runtime mRuntime) {
ICLogger.d("PPQ data ====> " + data);
//解析数据,三个为一组
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
if (split.length % 3 == 0) {
//1,2,3,4,5,6,7
for (int i = 0; i < split.length - 2; i += 3) {
//第一种情况[XT*8800000015*000A*PP, 5F204E0,555]
//另外一种情况 情况[XT*8800000015*0001*PP,1]/[XT*8800000015*0002*PP,2]
//
- boolean contains = data.contains(CMDSPLIT);
+ boolean contains = data.contains(CMD_SPLIT);
int result = 0;
String friendName = "";
String friendId = "";
if (contains) {
result = 0;
//成功的结果
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
friendId = split[0];
friendName = Util.decodeUnicode2Utf8(split[1]);
if (split.length == 3) {
private void handleWIFISET(String cmd, String data, Runtime mRuntime) {
ICLogger.d("WIFISET == > " + data);
//解析数据
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
ICLogger.d("length == > " + split.length);
Context context = mRuntime.getContextProxy()
.context;
*/
private void handleBOOTOFF(String cmd, String data, Runtime mRuntime) {
//解析数据
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
if (split.length == 3) {
try {
//3部分内容
*/
private void handleSettingsInfo(String data) {
//对数据进行切割
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
//长度肯定是双数的,所以-1吧,
for (int i = 0; i < split.length - 1; i += 2) {
//每2个为一组
*/
private void handleWG(String data) {
//先切割,再解码
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
if (split.length == 4) {
String latitude = split[0];
String longitude = split[1];
//转码
String result = Util.decodeUnicode2Utf8(data);
ICLogger.d("data ==> " + result);
- String[] split = result.split(CMDSPLIT);
+ String[] split = result.split(CMD_SPLIT);
if (split.length == 7) {
- String city = split[0];
- String wtDesc = split[1];
- String temperature = split[2];
- String windDirection = split[3];
- String windLev = split[4];
- String date = split[5];
- String time = split[6];
- ICLogger.d("city == > " + city);
- ICLogger.d("wtDesc == > " + wtDesc);
- ICLogger.d("temperature == > " + temperature);
- ICLogger.d("windDirection == > " + windDirection);
- ICLogger.d("windLev == > " + windLev);
- ICLogger.d("date == > " + date);
- ICLogger.d("time == > " + time);
+ try {
+ String city = split[0];
+ String wtDesc = split[1];
+ String temperature = split[2];
+ String windDirection = split[3];
+ String windLev = split[4];
+ String date = split[5];
+ String time = split[6];
+ ICLogger.d("city == > " + city);
+ ICLogger.d("wtDesc == > " + wtDesc);
+ ICLogger.d("temperature == > " + temperature);
+ ICLogger.d("windDirection == > " + windDirection);
+ ICLogger.d("windLev == > " + windLev);
+ ICLogger.d("date == > " + date);
+ ICLogger.d("time == > " + time);
+ FZDWeatherInfo fzdWeatherInfo = new FZDWeatherInfo(
+ wtDesc, "-1", temperature, temperature,
+ temperature, city, windDirection,
+ windLev, date + " " + time
+ );
+ if (mRuntime.mFZDWeatherCallback != null) {
+ mRuntime.mFZDWeatherCallback.onWeatherInfoLoaded(fzdWeatherInfo);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
} else {
ICLogger.d("data -WT2- > split size " + split.length);
ICLogger.d("parse data error..." + data);
/**
* 处理天气结果,后面得通知到远程
- * //TODO:
* 年-月-日,时:分:秒,天气描述,天气编号,当前温度,最低温,最高温,城 市名
* 21-04-07,11:08:10,b6e0d4c6,1,23,-1,40,6DF157335E02
*
* @param data
*/
private void handleWT(String data) {
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
if (split.length == 8) {
- //获取数据
- String date = split[0];
- String time = split[1];
- String wtDesc = Util.UrlGB2312ToUTF8(split[2]);
- String wtCode = split[3];
- String currentTemp = split[4];
- String lowTemp = split[5];
- String highTemp = split[6];
- String cityName = Util.decodeUnicode2Utf8(split[7]);
- ICLogger.d("date == > " + date);
- ICLogger.d("time == > " + time);
- ICLogger.d("wtDesc == > " + wtDesc);
- ICLogger.d("wtCode == > " + wtCode);
- ICLogger.d("currentTemp == > " + currentTemp);
- ICLogger.d("lowTemp == > " + lowTemp);
- ICLogger.d("highTemp == > " + highTemp);
- ICLogger.d("cityName == > " + cityName);
+ try {
+ //获取数据
+ String date = split[0];
+ String time = split[1];
+ String wtDesc = Util.UrlGB2312ToUTF8(split[2]);
+ String wtCode = split[3];
+ String currentTemp = split[4];
+ String lowTemp = split[5];
+ String highTemp = split[6];
+ String cityName = Util.decodeUnicode2Utf8(split[7]);
+ ICLogger.d("date == > " + date);
+ ICLogger.d("time == > " + time);
+ ICLogger.d("wtDesc == > " + wtDesc);
+ ICLogger.d("wtCode == > " + wtCode);
+ ICLogger.d("currentTemp == > " + currentTemp);
+ ICLogger.d("lowTemp == > " + lowTemp);
+ ICLogger.d("highTemp == > " + highTemp);
+ ICLogger.d("cityName == > " + cityName);
+ FZDWeatherInfo fzdWeatherInfo = new FZDWeatherInfo(
+ null, wtCode, currentTemp, lowTemp,
+ highTemp, cityName, null, null, date + " " + time
+ );
+ if (mRuntime.mFZDWeatherCallback != null) {
+ mRuntime.mFZDWeatherCallback.onWeatherInfoLoaded(fzdWeatherInfo);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
} else {
ICLogger.d("data -WT- > split size " + split.length);
ICLogger.d("parse data error..." + data);
* @param data
*/
private void handleCallRequest(Connection mConnection, Runtime mRuntime, String data) {
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
if (split.length == 3) {
needResponseCalling = true;
//1、准备数据:对方的id,来电类型
int i = fzdCallback.beginBroadcast();
try {
ICLogger.d("data == > " + data);
- String[] split = data.split(CMDSPLIT);
+ String[] split = data.split(CMD_SPLIT);
while (i > 0) {
i--;
if (split.length == 3) {
*/
public static StringMessage TALK(int type, int remoteAccount) {
//准备数据
- String data = type + CMDSPLIT + remoteAccount + CMDSPLIT;
+ String data = type + CMD_SPLIT + remoteAccount + CMD_SPLIT;
ICLogger.d("request talk == > " + data);
return genFZDCMD(cmdMap.get(CMD_TYPE.TALK), data);
}
String str = Util.decodeUnicode2Utf8(data);
ICLogger.d("members result == > " + str);
//对数据进行切割
- String[] split = str.split(CMDSPLIT);
+ String[] split = str.split(CMD_SPLIT);
//每3个为一组
ICLogger.d("split.length = > " + split.length);
if (split.length % 3 != 0) {