修改了S123回复转码溢出的问题
authorTrillGates <williamtrillgates@gmail.com>
Tue, 19 Oct 2021 07:38:38 +0000 (15:38 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Tue, 19 Oct 2021 07:38:38 +0000 (15:38 +0800)
app/src/main/aidl/com/enqualcomm/support/IFZDCallback.aidl
app/src/main/aidl/com/enqualcomm/support/IFZDService.aidl
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/utils/Util.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_beehome.java
app/src/main/java/com/ic/protocols/protocol_gator.java
local.properties

index 3535663..084ef1f 100644 (file)
@@ -12,5 +12,6 @@ interface IFZDCallback {
     void onFriendsUnbindResult();
     void onFriendsListLoaded();
     void onCalling(in String callerID,in String roomName,in String type,in String token);
+    void onCallingByUserName(in String userName,in String roomName,in String type,in String token);
     void onServerReady();
 }
\ No newline at end of file
index caebea2..d0913e8 100644 (file)
@@ -12,6 +12,7 @@ interface IFZDService {
     void getServerReady();
     void rejectCallInCome(in String remoteId,in int type);
     void requireCall(in int type,in int remoteUserId);
+    void requireCallByAccount(in int type,in String account);
     void test();
     void setUpEnvState(in int state);
     void makeFriends();
index e0c205f..3080584 100644 (file)
@@ -19,7 +19,6 @@ import android.os.IBinder;
 import android.os.Message;
 import android.os.Messenger;
 import android.os.PowerManager;
-import android.os.RemoteException;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.util.Log;
@@ -1492,7 +1491,7 @@ public class CoreService extends Service {
                         Util.shutdown();
                     }
                 }, 1000);
-            }else if (Constants.ACTION_TEMP_RESULT_SEND_TIMEOUT.equals(paramIntent.getAction())){
+            } else if (Constants.ACTION_TEMP_RESULT_SEND_TIMEOUT.equals(paramIntent.getAction())) {
                 TemperatureUtil.getInstance().sendTempResult();
             }
             this.invokeHandlerServiceChain.processUserRequest(paramIntent, this.connection, this.runtime);
@@ -1875,13 +1874,13 @@ public class CoreService extends Service {
         //定时,3个小时获取一次天气
     }
 
-    public void sendAntiStatus(){
-        if(Config.custom_name.equals("AA")) {
+    public void sendAntiStatus() {
+        if (Config.custom_name.equals("AA")) {
             Intent intent = new Intent();
             if (antiService.getCurrentAntiStatus()) {
                 intent.setAction(ACTION_ANTI_OFF0);
                 intent.putExtra(KEY_ANTI_EVENT, 0);
-            }else {
+            } else {
                 intent.setAction(ACTION_ANTI_OFF0);
                 intent.putExtra(KEY_ANTI_EVENT, 1);
             }
@@ -1922,7 +1921,8 @@ public class CoreService extends Service {
         }
 
         @Override
-        public void getServerReady() throws RemoteException {
+        public void getServerReady() {
+            ICLogger.d("requestServerReady...");
             protocolAPIHelper.requestServerReady();
         }
 
@@ -1942,6 +1942,12 @@ public class CoreService extends Service {
             ICLogger.d("require call == > type is " + type + " remote user id is == > " + remoteUserId);
         }
 
+        @Override
+        public void requireCallByAccount(int type, String account) {
+            StringMessage talk = protocolAPIHelper.requireCallByAccount(runtime, type, account);
+            connection.send(talk);
+        }
+
         @Override
         public void test() {
             //触发测试
index 45eee59..76c33e4 100644 (file)
@@ -243,18 +243,20 @@ public class Util {
             Character.UnicodeBlock ub = Character.UnicodeBlock.of(myBuffer[i]);
             if (ub == Character.UnicodeBlock.BASIC_LATIN) {
                 //英文及数字等
-                short s = (short) myBuffer[i];
+                int s = (int) myBuffer[i];
                 String hexS = Integer.toHexString(s);
                 sb.append("00").append(hexS.toLowerCase());
             } else if (ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
                 //全角半角字符
-                short j = (short) ((short) myBuffer[i] - 65248);
+                int j =  ((int) myBuffer[i] - 65248);
                 String hexS = Integer.toHexString(j);
                 sb.append("00").append(hexS);
             } else {
                 //汉字
-                short s = (short) myBuffer[i];
+                int s = (int) myBuffer[i];
                 String hexS = Integer.toHexString(s);
+                //hexS = hexS.replace("ffff", "");
+                ICLogger.d("hexS ==>" + hexS + "s ==> " + s);
                 sb.append(hexS.toLowerCase());
             }
         }
index 43007c5..efb539c 100644 (file)
@@ -58,6 +58,30 @@ public class protocolAPIHelper {
         }
     }
 
+    public static StringMessage requireCallByAccount(Runtime runtime, int type, String account) {
+        StringMessage result = null;
+        switch (Config.protocol_no) {
+            case Config.PROTOCOL_JIAI:
+                break;
+            case Config.PROTOCOL_BEEHOME:
+                break;
+            case Config.PROTOCOL_IC:
+                break;
+            case Config.PROTOCOL_FZD:
+                break;
+            case Config.PROTOCOL_MQTT:
+                break;
+            case PROTOCOL_ANAN:
+                break;
+            case Config.PROTOCOL_S123:
+                break;
+            case Config.PROTOCOL_GATOR:
+                result = protocolgator_handler.BP50(runtime, type, account);
+                break;
+        }
+        return result;
+    }
+
     public void release() {
         if (protocolanan_handler != null) {
             protocolanan_handler.unregister();
@@ -1298,7 +1322,10 @@ public class protocolAPIHelper {
         switch (Config.protocol_no) {
             case Config.PROTOCOL_FZD:
                 protocolfzd_handler.getServerReady();
-                return;
+                break;
+            case Config.PROTOCOL_GATOR:
+                protocolgator_handler.getServerReady();
+                break;
         }
     }
 
@@ -1362,19 +1389,15 @@ public class protocolAPIHelper {
                 ret = null;
                 break;
             case Config.PROTOCOL_FZD:
-                ret = protocolfzd_handler.RCALLING(remoteId, type);
+                ret = protocol_fzd.RCALLING(remoteId, type);
                 break;
             case Config.PROTOCOL_MQTT:
-                ret = null;
                 break;
             case PROTOCOL_ANAN:
-                ret = null;
                 break;
             case Config.PROTOCOL_S123:
-                ret = null;
                 break;
             case Config.PROTOCOL_GATOR:
-                ret = null;
                 break;
         }
         return ret;
index b6b835e..c104fd9 100644 (file)
@@ -762,19 +762,19 @@ public class protocol_beehome {
     //设置通讯录,白名单(10个)
     public void handleBP14(Connection connection, String cmd, Runtime runtime) {
 //        IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,,
-/**
- * IWBP14,353456789012345,080835,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx,
- * D3590D54|135xxxxxxxxxx#
- */
+        /**
+         * IWBP14,353456789012345,080835,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx,
+         * D3590D54|135xxxxxxxxxx#
+         */
         String[] cmdlist = cmd.split(CMDSPLIT);
         String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""};
         StringBuffer sb = new StringBuffer().append("recv phone Numbs ");
index c1ba47a..a4ce6f9 100644 (file)
@@ -71,6 +71,17 @@ public class protocol_gator {
     private static final String CMDSPLIT = ",";
     public static final String defaultServerIP = "watch.gatorcn.com";
     public static final int defaultServerPort = 27015;
+    private boolean hasLogin = false;
+
+    public void getServerReady() {
+        ICLogger.d("getServerReady...");
+        //在登录的时候,会通知的了
+        //可以加个flag
+        if (hasLogin) {
+            serverReady();
+        }
+    }
+
 
     // public static final String defaultServerIP = "snickersun.oicp.net";
     // public static final int defaultServerPort = 54944;
@@ -105,6 +116,7 @@ public class protocol_gator {
         AP32,//BP32回复
         AP34,//BP34回复
         AP50,//app端发起视频通话到手表
+        BP50,//手表端发起请求到手机
         /*终端发起*/
         BP00,//开机对时
         BP01,//AP01返回
@@ -199,6 +211,7 @@ public class protocol_gator {
         cmdMap.put(CMD_TYPE.BP34, "BP34");
         cmdMap.put(CMD_TYPE.BP35, "BP35");
         cmdMap.put(CMD_TYPE.AP50, "AP50");
+        cmdMap.put(CMD_TYPE.BP50, "BP50");
     }
 
 
@@ -286,7 +299,7 @@ public class protocol_gator {
     }
 
     //根据协议添加头尾以及IMEI号
-    private static String AddHeader(Runtime runtime, String msg) {
+    private static String addHeader(Runtime runtime, String msg) {
         /*
         (    CHAR            1
         %04X   HEX_STRING      4
@@ -295,13 +308,23 @@ public class protocol_gator {
            byte[]              msg.lenght
            )  CHAR             1
            */
-
         String len = String.format("%04X", 1 + 4 + 4 + 15 + msg.length() + 1);
         return new StringBuffer(CMDHEADER).append(len).append("0106").append(runtime.IMEI()).append(msg).append(
                 CMDEND).toString();
 
     }
 
+
+    public StringMessage BP50(Runtime runtime, int type, String account) {
+        StringBuffer sb = new StringBuffer();
+        sb.append(cmdMap.get(CMD_TYPE.BP50));
+        sb.append(CMDSPLIT);
+        sb.append(account);
+        String targetResult = addHeader(runtime, sb.toString());
+        ICLogger.d("targetResult==> " + targetResult);
+        return genStringMessage(cmdMap.get(CMD_TYPE.BP50), targetResult);
+    }
+
     /**/
     public static StringMessage genStringMessage(String cmdName, String msg) {
         //设置cmdName,在这里配置进去的msg没有实际用到
@@ -425,7 +448,7 @@ public class protocol_gator {
                 TimeUtil.getSystemTimeHHmmss() + CMDSPLIT +
                 MakeFriendsBtHelper.getSelfAddress() + CMDSPLIT +
                 split.length + CMDSPLIT + btAddress);
-        String msg = AddHeader(runtime,
+        String msg = addHeader(runtime,
                 sb.toString()
         );
         StringMessage stringMessage = genStringMessage(cmdMap.get(CMD_TYPE.BP35), msg);
@@ -438,9 +461,9 @@ public class protocol_gator {
     public StringMessage BPXX_REPLY(Runtime ds, CMD_TYPE type, String index, boolean success) {
         StringMessage ret = null;
         if (success) {
-            ret = genStringMessage(cmdMap.get(type), AddHeader(ds, cmdMap.get(type) + index + "1"));
+            ret = genStringMessage(cmdMap.get(type), addHeader(ds, cmdMap.get(type) + index + "1"));
         } else {
-            ret = genStringMessage(cmdMap.get(type), AddHeader(ds, cmdMap.get(type) + index + "0"));
+            ret = genStringMessage(cmdMap.get(type), addHeader(ds, cmdMap.get(type) + index + "0"));
         }
         return ret;
     }
@@ -479,7 +502,7 @@ public class protocol_gator {
                 .append(ds.getMccAndMnc())
                 .toString();
 
-        return genStringMessage(cmdMap.get(CMD_TYPE.BP00), AddHeader(ds, msg));
+        return genStringMessage(cmdMap.get(CMD_TYPE.BP00), addHeader(ds, msg));
     }
 
     //时间同步,等同于登录成功回复
@@ -636,6 +659,22 @@ public class protocol_gator {
                     }
                 }
                 appendContact(ds, numbers, names);
+                //不管有没有数据,都要通知UI。
+                RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getVideoCallCallback();
+                ICLogger.d("onContractsLoaded...");
+                int i = fzdCallback.beginBroadcast();
+                try {
+                    while (i > 0) {
+                        i--;
+                        IFZDCallback broadcastItem = fzdCallback.getBroadcastItem(i);
+                        //通知UI层数据已经准备好了,可以去获取了。
+                        broadcastItem.onContractsLoaded();
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                } finally {
+                    fzdCallback.finishBroadcast();
+                }
             } else {
                 ICLogger.e("AP06 format error1 !");
                 connection.send(BPXX_REPLY(ds, CMD_TYPE.BP06, cmdlist[1], false));
@@ -805,7 +844,7 @@ public class protocol_gator {
         StringMessage ret = null;
         StringBuilder sb = new StringBuilder(cmdMap.get(CMD_TYPE.BP11));
         sb.append(CMDSPLIT).append(MSGType).append(CMDSPLIT).append(MSGCount);
-        ret = genStringMessage(cmdMap.get(CMD_TYPE.BP11), AddHeader(ds, sb.toString()));
+        ret = genStringMessage(cmdMap.get(CMD_TYPE.BP11), addHeader(ds, sb.toString()));
         return ret;
     }
 
@@ -851,7 +890,7 @@ public class protocol_gator {
         } else {
             sb.append(0);
         }
-        ret = genStringMessage(cmdMap.get(CMD_TYPE.BP12), AddHeader(ds, sb.toString()));
+        ret = genStringMessage(cmdMap.get(CMD_TYPE.BP12), addHeader(ds, sb.toString()));
         return ret;
 
     }
@@ -1026,7 +1065,7 @@ public class protocol_gator {
                 .append("0,0,0")
                 .toString();
 
-        StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP33), AddHeader(ds, msg));
+        StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP33), addHeader(ds, msg));
 
         return ret;
     }
@@ -1156,7 +1195,7 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
             return null;
         }
 
-        StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP30), AddHeader(ds, sb.toString()));
+        StringMessage ret = genStringMessage(cmdMap.get(CMD_TYPE.BP30), addHeader(ds, sb.toString()));
         return ret;
     }
 
@@ -1367,7 +1406,7 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
         StringMessage ret = null;
         StringBuilder sb = new StringBuilder(cmdMap.get(CMD_TYPE.BP32));
         sb.append(CMDSPLIT).append(cmdMap.get(CMD_TYPE.AP26));
-        ret = genStringMessage(cmdMap.get(CMD_TYPE.BP32), AddHeader(ds, sb.toString()));
+        ret = genStringMessage(cmdMap.get(CMD_TYPE.BP32), addHeader(ds, sb.toString()));
         return ret;
     }
 
@@ -1517,6 +1556,7 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
         switch (type) {
             case AP03: //登录包
                 handleAP03(mRuntime, mConnection, cmd);
+                hasLogin = true;
                 ICLogger.i("服务器收到登录包");
                 mConnection.DeliverCMDMessageToSystem("login", cmd);//通知下面线程状态变化
                 serverReady();
@@ -1609,23 +1649,38 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
         String[] split = cmd.split(CMDSPLIT);
         //服务器下发AP50,频道创建的秒为单位的时间戳,亲情号,频道ID,加入频道所需的token凭证
         if (split.length == 5) {
-            //开启拨号UI
-            Intent intent = new Intent();
-            //在VideoCall里有个接收者,收到了消息会拉起视频通话
-            intent.setAction("com.ic.video_call.action.DO_CALL");
             //调用声网SDK 加入频道的uid参数 手表端暂时固定为2
-            intent.putExtra("targetId", split[1]);
-            intent.putExtra("selfId", 2);
-            intent.putExtra("channel", split[3]);
-            intent.putExtra("token", split[4]);
-            mRuntime.getContextProxy().context.sendBroadcast(intent);
+            String targetId = split[2];
+            String channel = split[3];
+            String token = split[4];
+            ICLogger.d("targetId ==> " + targetId);
+            ICLogger.d("channel ==> " + channel);
+            ICLogger.d("token ==> " + token);
             //TODO:回复服务器
             ICLogger.d("send broadcast...to video call...");
+            dispatchAP50(targetId, channel, token);
         } else {
             ICLogger.d("parse cmd error == > " + split.length);
         }
     }
 
+    private void dispatchAP50(String userName, String channel, String token) {
+        //收到服务器时间消息的时候认为服务器已经准备好了
+        RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getVideoCallCallback();
+        int i = fzdCallback.beginBroadcast();
+        try {
+            while (i > 0) {
+                i--;
+                //1是视频通话,0是语音通话
+                fzdCallback.getBroadcastItem(i).onCallingByUserName(userName, channel, "1", token);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            fzdCallback.finishBroadcast();
+        }
+    }
+
     private void serverReady() {
         //收到服务器时间消息的时候认为服务器已经准备好了
         RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getVideoCallCallback();
@@ -1634,6 +1689,7 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
             while (i > 0) {
                 i--;
                 fzdCallback.getBroadcastItem(i).onServerReady();
+                fzdCallback.getBroadcastItem(i).onBRIdLoaded("0");
             }
         } catch (Exception e) {
             e.printStackTrace();
index c15156f..a5707c5 100644 (file)
@@ -5,4 +5,4 @@
 # For customization when using a Version Control System, please read the\r
 # header note.\r
 #Fri Oct 15 10:40:33 CST 2021\r
-sdk.dir=D\:\\android\\Android\\sdk\r
+sdk.dir=E\:\\Android\\Sdk\r