adjust service.
authorTrillGates <williamtrillgates@gmail.com>
Tue, 23 Feb 2021 12:46:32 +0000 (20:46 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Tue, 23 Feb 2021 12:46:32 +0000 (20:46 +0800)
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/utils/NettyConnection.java
app/src/main/java/com/ic/protocols/protocol_fzd.java

index 191dcf2..43d4afd 100644 (file)
@@ -1639,6 +1639,11 @@ public class CoreService extends Service {
         //判断来源,如果是ICVideoCall的则返回对应的
         String action = intent.getAction();
         if ("com.ic.action.VIDEO_CALL".equals(action)) {
+            try {
+                mFZDService.getBRId();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
             return mFZDService;
         }
         return null;
@@ -1699,7 +1704,6 @@ public class CoreService extends Service {
         public void test() {
             //触发测试
             StringMessage MEMBERS = protocol_fzd.MEMBERS();
-            //获取佰锐ID
             Deliver.sendLocationMSG(MEMBERS);
         }
 
index 1d419f1..b7b0f6d 100644 (file)
@@ -2,6 +2,7 @@ package com.enqualcomm.support.bean;
 
 
 import android.content.Context;
+import android.os.RemoteCallbackList;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.IFZDCallback;
@@ -178,12 +179,13 @@ public class Runtime {
     public int Anti_off_flag = 0;
     public int Cut_off_flag = 0;
 
-    private IFZDCallback mFZDCallback = null;
 
-    public IFZDCallback getFZDCallback() {
-        return mFZDCallback;
+    public RemoteCallbackList<IFZDCallback> getFZDCallback() {
+        return fzdCallbackList;
     }
 
+    private final RemoteCallbackList<IFZDCallback> fzdCallbackList = new RemoteCallbackList<>();
+
     /**
      * 这个通知远程UI更新的callback,主要是负责音视频通讯相关的功能
      * 防走丢的协议。
@@ -191,7 +193,7 @@ public class Runtime {
      * @param callback
      */
     public void setFZDRemoteCallback(IFZDCallback callback) {
-        this.mFZDCallback = callback;
+        fzdCallbackList.register(callback);
     }
 
     /**
@@ -201,8 +203,7 @@ public class Runtime {
      * @param callback
      */
     public void removeFZDRemoteCallback(IFZDCallback callback) {
-        //如果以后有多个界面需要,可以通过集合的方式管理这些回调
-        this.mFZDCallback = null;
+        fzdCallbackList.unregister(callback);
     }
 
     public enum AlarmType {
index 3f65074..bbbb2b0 100644 (file)
@@ -181,8 +181,7 @@ public class Deliver extends AbstractConnectionService {
                     .append("\ntopic ").append(msg.cmd())
                     .append("\ncmd ").append(msg.isFromCache()).append("\n");
         }
-//    ICLogger.i(sb.toString());
-
+        ICLogger.i(sb.toString());
     }
 
     public static boolean getAndSendMsgFromQueue() {
@@ -196,12 +195,9 @@ public class Deliver extends AbstractConnectionService {
             try {
                 String str;
                 //如果没有数据从缓存中尝试读取
-
                 //检查刚刚发送出去的包是否需要检查server response
-
                 StringMessage msgWait = mRuntime.getDbHelper().queryWaitCMDRecord();
                 dumpMessage(msgWait);
-
                 if (msgWait != null) {
                     //如果需要,且没有服务器反馈
                     //刚刚发送的包不为空,且检测次数小于3,则保留数据,进行下一次重试。
index e6a2b18..22fb2bd 100644 (file)
@@ -161,7 +161,7 @@ public class NettyConnection implements Connection {
             if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " skiped " + cmd);
             return false;
         } else {
-            log("send  " + cmd);
+            log("send  ===> " + cmd);
             if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " sent " + cmd);
             //向RxSocket写数据
             //示例数据:IWAP00867155030001063#
index 996360f..eecf463 100644 (file)
@@ -5,6 +5,7 @@ import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.os.RemoteCallbackList;
 import android.text.TextUtils;
 
 import com.enqualcomm.support.Config;
@@ -43,7 +44,7 @@ public class protocol_fzd {
     private static final String CMDHEADERSPLIT = "*";
     private static final String CMDSPLIT = ",";
     private static final boolean doEncryption = Util.getSystemProperties("persist.sys.encrypt_fzd", "true").equals("true");
-    public static final String defaultServerIP = "api.xcloudtech.com";
+    public static final String defaultServerIP = "fzd.xcloudtech.com";
     public static final int defaultServerPort = 9000;
     private final SharedPreferences sharedPreferences;
 
@@ -107,11 +108,6 @@ public class protocol_fzd {
     static {
         cmdMap = new HashMap<>();
         cmdMap.put(CMD_TYPE.LK, "LK");
-        cmdMap.put(CMD_TYPE.MEMBERS, "MEMBERS");
-        cmdMap.put(CMD_TYPE.RTALK, "RTALK");
-        cmdMap.put(CMD_TYPE.RCALLING, "RCALLING");
-        cmdMap.put(CMD_TYPE.TALK, "TALK");
-        cmdMap.put(CMD_TYPE.CALLING, "CALLING");
         cmdMap.put(CMD_TYPE.PING, "PING");
         cmdMap.put(CMD_TYPE.KA, "KA");
         cmdMap.put(CMD_TYPE.UD, "UD");
@@ -154,7 +150,11 @@ public class protocol_fzd {
         cmdMap.put(CMD_TYPE.heart, "heart");
         cmdMap.put(CMD_TYPE.PRACTICE, "PRACTICE");
         cmdMap.put(CMD_TYPE.BRREG, "BRREG");
-
+        cmdMap.put(CMD_TYPE.MEMBERS, "MEMBERS");
+        cmdMap.put(CMD_TYPE.RTALK, "RTALK");
+        cmdMap.put(CMD_TYPE.RCALLING, "RCALLING");
+        cmdMap.put(CMD_TYPE.TALK, "TALK");
+        cmdMap.put(CMD_TYPE.CALLING, "CALLING");
     }
 
     private Connection mConnection = null;
@@ -762,11 +762,13 @@ public class protocol_fzd {
                 //保存一份到sp里
                 //通知一callback
                 handleBRREG(mRuntime, data);
+                mConnection.DeliverCMDMessageToSystem(cmdMap.get(CMD_TYPE.BRREG), cmd);
                 break;
             case MEMBERS:
                 ICLogger.i("收到群成员数据  ==>  " + data);
                 //处理一下数据
                 handleMEMBERS(mRuntime, data);
+                mConnection.DeliverCMDMessageToSystem(cmdMap.get(CMD_TYPE.MEMBERS), cmd);
                 break;
             case RTALK:
                 //拒绝通话请求,当我们通过TALK向对方发起通话请求的时候,如果对方拒绝,则会收到此指令
@@ -777,7 +779,8 @@ public class protocol_fzd {
             case TALK:
                 //0 表示可正常通话,-1 表示余额不足,不能通话,1 表示对方不在线或未登陆成功
                 ICLogger.i("收到向对方请求音视频通话的结果 ==> " + data);
-                handlerTalkRequestResult(mRuntime, data);
+                handlerTalkRequestResult(mConnection, mRuntime, data);
+                mConnection.DeliverCMDMessageToSystem(cmdMap.get(CMD_TYPE.TALK), cmd);
                 break;
             case CALLING:
                 //有音视频聊天请求,此指令由平台发送,也就是被动通知
@@ -786,6 +789,7 @@ public class protocol_fzd {
                 break;
             case RCALLING:
                 ICLogger.i("服务器收到了我拒绝音视频通话的消息");
+                mConnection.DeliverCMDMessageToSystem(cmdMap.get(CMD_TYPE.RCALLING), cmd);
                 break;
             case LK: //登录包
                 ICLogger.i("服务器收到登录包LK");
@@ -898,17 +902,23 @@ public class protocol_fzd {
      * @param data
      */
     private void handleBRREG(Runtime runtime, String data) {
-        IFZDCallback fzdCallback = runtime.getFZDCallback();
+        RemoteCallbackList<IFZDCallback> fzdCallback = runtime.getFZDCallback();
         if (fzdCallback == null) {
             return;
         }
         try {
-            if (TextUtils.isEmpty(data)) {
-                ICLogger.i("佰锐ID为空...");
-                fzdCallback.onBRIdEmpty();
-            } else {
-                fzdCallback.onBRIdLoaded(data);
+            int i = fzdCallback.beginBroadcast();
+            while (i > 0) {
+                i--;
+                IFZDCallback broadcastItem = fzdCallback.getBroadcastItem(i);
+                if (TextUtils.isEmpty(data)) {
+                    ICLogger.i("佰锐ID为空...");
+                    broadcastItem.onBRIdEmpty();
+                } else {
+                    broadcastItem.onBRIdLoaded(data);
+                }
             }
+            fzdCallback.finishBroadcast();
             //保存到sp里面
             sharedPreferences.edit().putString(BRREG_ID, data).apply();
         } catch (Exception e) {
@@ -986,13 +996,18 @@ public class protocol_fzd {
      */
     private void handleRTalk(Connection mConnection, Runtime mRuntime, String data) {
         try {
-            IFZDCallback fzdCallback = mRuntime.getFZDCallback();
+            RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getFZDCallback();
             if (fzdCallback != null && !TextUtils.isEmpty(data)) {
+                int i = fzdCallback.beginBroadcast();
                 ICLogger.d("data == > " + data);
                 String[] split = data.split(CMDSPLIT);
-                if (split.length == 3) {
-                    fzdCallback.onRemoteReject(split[0], Integer.parseInt(split[1]));
+                while (i > 0) {
+                    i--;
+                    if (split.length == 3) {
+                        fzdCallback.getBroadcastItem(i).onRemoteReject(split[0], Integer.parseInt(split[1]));
+                    }
                 }
+                fzdCallback.finishBroadcast();
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -1011,9 +1026,9 @@ public class protocol_fzd {
      */
     public static StringMessage TALK(int type, String remoteAccount) {
         //准备数据
-        String data = type + CMDSPLIT + remoteAccount;
+        String data = type + CMDSPLIT + remoteAccount + CMDSPLIT;
         ICLogger.d("request talk == > " + data);
-        return genFZDCMD(cmdMap.get(CMD_TYPE.MEMBERS), data);
+        return genFZDCMD(cmdMap.get(CMD_TYPE.TALK), data);
     }
 
 
@@ -1043,21 +1058,26 @@ public class protocol_fzd {
      * <p>
      * 0 表示可正常通话,-1 表示余额不足,不能通话,1 表示对方不在线或未登陆成功
      *
+     * @param mConnection
      * @param mRuntime
      * @param data
      */
-    private void handlerTalkRequestResult(Runtime mRuntime, String data) {
+    private void handlerTalkRequestResult(Connection mConnection, Runtime mRuntime, String data) {
         ICLogger.d("handlerTalkRequestResult == > " + data);
         //可以正常通话,可以不处理
         //如果不能正常通话,则要提示用户了
         try {
-
-            IFZDCallback fzdCallback = mRuntime.getFZDCallback();
-            if (fzdCallback != null) {
-                int result = Integer.parseInt(data);
-                ICLogger.d("0 表示可正常通话,-1 表示余额不足,不能通话,1 表示对方不在线或未登陆成功 === > " + data);
-                fzdCallback.onCallRequestResult(result);
+            RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getFZDCallback();
+            int i = fzdCallback.beginBroadcast();
+            while (i > 0) {
+                i--;
+                if (fzdCallback != null) {
+                    int result = Integer.parseInt(data);
+                    ICLogger.d("0 表示可正常通话,-1 表示余额不足,不能通话,1 表示对方不在线或未登陆成功 === > " + data);
+                    fzdCallback.getBroadcastItem(i).onCallRequestResult(result);
+                }
             }
+            fzdCallback.finishBroadcast();
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -1087,7 +1107,8 @@ public class protocol_fzd {
             ICLogger.d("members data == > " + data);
             String s = Util.decodeUnicode2Utf8(data);
             ICLogger.d("members result == > " + s);
-            //TODO:
+            //对数据进行切割
+            String[] split = data.split(CMDSPLIT);
         }
     }