瀏覽代碼

模拟分机呼叫然后通话需要门口机端发起通话请求

weizhengliang 3 年之前
父節點
當前提交
f085310013

+ 1 - 0
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/activity/CallingdoorActivity.kt

@@ -803,6 +803,7 @@ class CallingdoorActivity :BaseActivity<CallingdoorActivityPresenter, Callingdoo
                             Constant.fromId = tcpModel.fromId
                             Constant.TARGET_SIP = interactionVO.fromSipId
                             Constant.interactionId = interactionVO.id
+                            Constant.fromDeviceType = interactionVO.fromDeviceType
                             Constant.CALL_STATE = Constant.CALL_INCOMING
                             if (Constant.TCP_CONNECTED && !TextUtils.isEmpty(Constant.SIP_ID)) {
                                 //来电界面

+ 27 - 7
callingdoor/src/main/java/com/wdkl/app/ncs/callingdoor/fragment/SkyCallFragment.kt

@@ -17,9 +17,11 @@ import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.common.Constant
 import com.wdkl.ncs.android.middleware.common.MessageEvent
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
+import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
 import com.wdkl.ncs.android.middleware.tcp.channel.VideoUtil
 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.ncs.janus.client.CallSessionCallback
@@ -56,6 +58,8 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
 
     private var callEnded: Boolean = false
 
+    private var outGoing: Boolean = false
+
     override fun getLayId(): Int {
         if ("rk3288".equals(Build.MODEL)) {
             return R.layout.sky_voice_call_layout_rk3288
@@ -80,6 +84,8 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
 
         when (callState) {
             0 -> {
+                //发起通话
+                outGoing = true
                 janusClient!!.callState = EnumType.CallState.Outgoing
                 room = Room(Constant.SIP_ID.toBigInteger())
                 //呼叫主机
@@ -94,16 +100,26 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
             1 -> {
                 //来电
                 showIncomingCall()
-                RingPlayHelper.playRingTone(baseActivity, R.raw.incoming_call, true)
+                RingPlayHelper.playRingTone(baseActivity, R.raw.ring_tone, true)
 
-                janusClient!!.callState = EnumType.CallState.Incoming
-                room = Room(Constant.TARGET_SIP.toBigInteger())
+                //如果是模拟分机呼叫则需要主机来创建房间发起通过
+                if (Constant.fromDeviceType == DeviceTypeEnum.SIMULATE_BED_DEVICE.value()) {
+                    outGoing = true
+                    janusClient!!.callState = EnumType.CallState.Outgoing
+                    room = Room(Constant.SIP_ID.toBigInteger())
+                } else {
+                    outGoing = false
+                    janusClient!!.callState = EnumType.CallState.Incoming
+                    room = Room(Constant.TARGET_SIP.toBigInteger())
+                }
             }
 
             2 -> {
+                //呼叫分机
+                outGoing = true
                 janusClient!!.callState = EnumType.CallState.Outgoing
                 room = Room(Constant.SIP_ID.toBigInteger())
-                //呼叫分机
+
                 RingPlayHelper.playRingTone(baseActivity, R.raw.ring_back2, true)
                 if (!startOutgoing()) {
                     AppTool.Time.delay(2000) {
@@ -154,7 +170,7 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
         sky_voice_call_ring_pickup_audio.setOnClickListener {
             acceptCall()
             RingPlayHelper.stopRingTone()
-            Constant.CALL_STATE = Constant.CALL_INCOMING
+            Constant.CALL_STATE = Constant.CALL_CALLING
             VoiceUtil.acceptAudioCall(Constant.DEVICE_ID, fromId, interactionVO?.id)
             janusClient!!.connect()
         }
@@ -285,12 +301,16 @@ class SkyCallFragment: BaseCallFragment(), CallSessionCallback {
 
             if (janusClient!!.webSocketChannel != null) {
                 janusClient!!.callState = EnumType.CallState.Idle
-                if (callState == 0) {
-                    janusClient!!.destroyRoom(janusClient!!.currentHandleId, null)
+
+                if (outGoing){
+                    if (janusClient!!.currentHandleId !=null) {
+                        janusClient!!.destroyRoom(janusClient!!.currentHandleId, null)
+                    }
                 } else {
                     janusClient!!.leaveRoom()
                 }
 
+                janusClient!!.setJanusCallback(null)
                 janusClient!!.disConnect()
             }
 

+ 5 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constant.java

@@ -1,5 +1,7 @@
 package com.wdkl.ncs.android.middleware.common;
 
+import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum;
+
 public class Constant {
 
     public static String APP_PATH = "";
@@ -124,6 +126,9 @@ public class Constant {
     //来电设备id
     public static Integer fromId = -1;
 
+    //来电设备类型
+    public static int fromDeviceType = DeviceTypeEnum.DIGIT_BED_DEVICE.value();
+
     //Interaction ID
     public static Integer interactionId = -1;
 

+ 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;
+    }
+
+
+}