ソースを参照

如果是模拟分机呼叫,则由手机端建立通话

weizhengliang 3 年 前
コミット
76f9c0d461

+ 14 - 7
home/src/main/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -37,6 +37,7 @@ import com.wdkl.ncs.android.middleware.tcp.channel.ChannelImUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
 import com.wdkl.ncs.android.middleware.tcp.channel.ImUtil
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
+import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.middleware.utils.ContactHelper
@@ -209,12 +210,18 @@ class WdKeepAliveService : AbsWorkService() {
 
                         DeviceChannel.calling = true
                         var roomId: String
-                        if (interactionVO.fromDeviceId.equals(Constants.deviceId)) {
-                            DeviceChannel.callId = interactionVO.toDeviceId
-                            roomId = interactionVO.toSipId
-                        } else {
+                        if (interactionVO.fromDeviceType == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
+                            //模拟分机呼叫,通话由手机端创建
                             DeviceChannel.callId = interactionVO.fromDeviceId
-                            roomId = interactionVO.fromSipId
+                            roomId = Constants.sipId!!
+                        } else {
+                            if (interactionVO.fromDeviceId.equals(Constants.deviceId)) {
+                                DeviceChannel.callId = interactionVO.toDeviceId
+                                roomId = interactionVO.toSipId
+                            } else {
+                                DeviceChannel.callId = interactionVO.fromDeviceId
+                                roomId = interactionVO.fromSipId
+                            }
                         }
                         Log.i(TAG, "来电:" + JSON.toJSONString(interactionVO))
 
@@ -234,7 +241,7 @@ class WdKeepAliveService : AbsWorkService() {
                 }
             }
 
-            11 -> {
+            /*11 -> {
                 //取消掉语音留言录音
                 RecordHelper.getInstance().stopCancelRecordByOther(true)
 
@@ -266,7 +273,7 @@ class WdKeepAliveService : AbsWorkService() {
                     startActivity(intent)
 
                 }
-            }
+            }*/
 
             Constants.EVENT_NEW_TCP -> {
                 //先点亮屏幕,然后再通知到界面

+ 24 - 4
home/src/main/code/com/wdkl/ncs/android/component/home/ui/CallSingleActivity.java

@@ -42,6 +42,7 @@ import com.wdkl.ncs.android.middleware.tcp.NettyClient;
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel;
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
+import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum;
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction;
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType;
 import com.wdkl.rtc.util.Constant;
@@ -79,6 +80,7 @@ public class CallSingleActivity extends AppCompatActivity {
     JanusClient janusClient;
     ILogUpload iLogUpload = new LogUpload();
     VideoRoomCallback videoRoomCallback;
+    boolean isSimulateBed = false;
 
     private SingleCallFragment currentFragment;
     //振动
@@ -120,7 +122,12 @@ public class CallSingleActivity extends AppCompatActivity {
         isAudioOnly = intent.getBooleanExtra(EXTRA_AUDIO_ONLY,true);
         recTcpModel = (TcpModel) intent.getSerializableExtra(EXTRA_TCPMODEL);
         showName = intent.getStringExtra(EXTRA_SHOWNAME);
-        Log.d(TAG, recTcpModel.toJson());
+
+        if (recTcpModel !=null && recTcpModel.getData() != null) {
+            Log.d(TAG, recTcpModel.toJson());
+            InteractionVO interactionVO = new Gson().fromJson(recTcpModel.getData().toString(), InteractionVO.class);
+            isSimulateBed = (interactionVO.getFromDeviceType() == DeviceTypeEnum.SIMULATE_BED_DEVICE.value());
+        }
 
         // 权限检测
         String[] perms;
@@ -247,9 +254,16 @@ public class CallSingleActivity extends AppCompatActivity {
             //MediaPlayHelper.getInstance().playResMusic(R.raw.outgoing_call, 0.8f, true);
             //RingPlayHelper.playRingTone(this, R.raw.ring_back2, true);
             janusClient.setCallState(EnumType.CallState.Outgoing);
-            //janusClient.connect();
+            janusClient.connect();
         } else {
-            janusClient.setCallState(EnumType.CallState.Incoming);
+            //模拟分机呼叫由主机建立通话
+            if (isSimulateBed) {
+                janusClient.setCallState(EnumType.CallState.Outgoing);
+                janusClient.connect();
+            } else {
+                janusClient.setCallState(EnumType.CallState.Incoming);
+            }
+
             //MediaPlayHelper.getInstance().playResMusic(R.raw.incoming_call, 1.0f, true);
             //RingPlayHelper.playRingTone(this, R.raw.incoming_call, true);
             /*long[] pattern = new long[]{100L, 2000L, 1000L, 2000L, 1000L, 2000L};
@@ -388,7 +402,13 @@ public class CallSingleActivity extends AppCompatActivity {
                     janusClient.destroyRoom(janusClient.getCurrentHandleId(), null);
                 }
             } else {
-                janusClient.leaveRoom();
+                if (isSimulateBed) {
+                    if (janusClient.getCurrentHandleId()!=null) {
+                        janusClient.destroyRoom(janusClient.getCurrentHandleId(), null);
+                    }
+                } else {
+                    janusClient.leaveRoom();
+                }
             }
             janusClient.disConnect();
         }

+ 1 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/ui/SingleCallFragment.java

@@ -217,7 +217,7 @@ public abstract class SingleCallFragment extends Fragment {
         InteractionVO interactionVO = new Gson().fromJson(tcpModel.getData().toString(), InteractionVO.class);
         Constants.Companion.setInteractionId(interactionVO.getId());
         callSuccess = true;
-        callSingleActivity.janusClient.connect();
+        //callSingleActivity.janusClient.connect();
         Log.d(TAG,"voice#success =>" + callSingleActivity.recTcpModel.toJson());
         runOnUiThread(new Runnable() {
             @Override

+ 82 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/DeviceTypeEnum.java

@@ -0,0 +1,82 @@
+package com.wdkl.ncs.android.middleware.tcp.enums;
+
+/**
+ * @author wuyunfeng
+ * 2021-05-12 09:49
+ * 设备类型枚举
+ */
+
+public enum DeviceTypeEnum {
+
+    NURSE_HOST(1, "护士主机"),
+    DOCTOR_HOST(2, "医生主机"),
+    DOOR_DEVICE(3, "门口机"),
+    DIGIT_BED_DEVICE(4, "病床分机"),
+    LCD_SCREEN(5, "LCD走廊屏"),
+    LED_SCREEN(6, "LED点阵屏"),
+    NURSE_WATCH(7, "护士移动"),
+    WORKER_WATCH(8, "护工移动"),
+    USER_WATCH(9, "用户移动"),
+    CELL_PHONE(10, "手机App"),
+    TRANSFER_DEVICE(11, "总线转换盒"),
+    SIMULATE_BED_DEVICE(12, "模拟分机"),
+    SIMULATE_EMERGENCY_BUTTON(13, "模拟紧急按钮"),
+    SIMULATE_DOOR_LIGHT(14, "模拟门灯"),
+    REMOTE_CONTROL(15, "遥控器"),
+    BEACON(16, "信标"),
+    INFORMATION_BOARD(17, "信息看版"),
+    ENTRACE_GUARD(18,"门禁设备"),
+    VISITATION(19,"探视机"),
+    RS485_TRANSFER(20,"485转换盒"),
+    EMERGENCY_BUTTON(21, "紧急按钮");
+    private int value;
+    private String typeName;
+
+
+    DeviceTypeEnum(int value, String typeName) {
+        this.value = value;
+        this.typeName = typeName;
+    }
+
+    public int value() {
+        return this.value;
+    }
+
+    public String typeName() {
+        return this.typeName;
+    }
+
+    /**
+     * 通过typeName 转换成枚举
+     *
+     * @param typeName
+     * @return
+     */
+    public static DeviceTypeEnum parse(String typeName) {
+        DeviceTypeEnum[] values = DeviceTypeEnum.values();
+        for (DeviceTypeEnum value : values) {
+            if (value.typeName().equals(typeName)) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 通过value值转换成枚举
+     *
+     * @param value
+     * @return
+     */
+    public static DeviceTypeEnum parse(int value) {
+        DeviceTypeEnum[] values = DeviceTypeEnum.values();
+        for (DeviceTypeEnum deviceTypeEnum : values) {
+            if (deviceTypeEnum.value() == value) {
+                return deviceTypeEnum;
+            }
+        }
+        return null;
+    }
+
+
+}