Pārlūkot izejas kodu

红米手机tcp callback修改

weizhengliang 2 gadi atpakaļ
vecāks
revīzija
2b63ff8463
24 mainītis faili ar 708 papildinājumiem un 226 dzēšanām
  1. 28 3
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/ChannelImActivity.kt
  2. 1 1
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/NewEventListActivity.kt
  3. 5 3
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/SmsReceivedActivity.kt
  4. 25 3
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/VoiceMsgActivity.kt
  5. 16 4
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt
  6. 12 18
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchHome2Activity.kt
  7. 19 3
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchUserSettingActivity.java
  8. 20 5
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/ChannelImItemAdapter.kt
  9. 101 11
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/NewEventItemAdapter.kt
  10. 52 16
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemAdapter.kt
  11. 54 15
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemSearchAdapter.kt
  12. 6 1
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/WatchCallRecordsItemAdapter.kt
  13. 16 4
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/WatchContactsItemAdapter.kt
  14. 3 1
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/service/FloatingService.java
  15. 33 6
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/service/PhoneStateReceiver.java
  16. 116 56
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt
  17. 1 1
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/settingconfig/SettingConfig.java
  18. 36 9
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/CallSingleActivity.java
  19. 74 29
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/FragmentAudio.java
  20. 28 5
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/SingleCallFragment.java
  21. 0 0
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/HandleTcpConnect.kt.bak
  22. 12 4
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/NetWorkChangeReceiver.kt
  23. 48 27
      android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/RecordHelper.java
  24. 2 1
      common/src/main/code/com/wdkl/ncs/android/lib/utils/ConnectionObserver.kt

+ 28 - 3
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/ChannelImActivity.kt

@@ -7,6 +7,7 @@ import android.view.MotionEvent
 import android.view.View
 import com.alibaba.android.vlayout.DelegateAdapter
 import com.alibaba.android.vlayout.VirtualLayoutManager
+import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.net.engine.model.NetState
 import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.adapter.ChannelImItemAdapter
@@ -23,8 +24,9 @@ import com.wdkl.ncs.android.middleware.logic.contract.home.ChannelImContract
 import com.wdkl.ncs.android.middleware.logic.presenter.home.ChannelImPresenter
 import com.wdkl.ncs.android.middleware.model.dos.ChannelImDO
 import com.wdkl.ncs.android.middleware.model.vo.ChannelIMVO
-import com.wdkl.ncs.android.middleware.tcp.NettyClient.Companion.instance
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.ChannelImUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import kotlinx.android.synthetic.main.activity_channel_im_list.*
 import okhttp3.MediaType
 import okhttp3.MultipartBody
@@ -168,7 +170,30 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
         channelImDO.senderMemberId = memberId
         channelImDO.audioPath = result
         val tcpModel = ChannelImUtil.channelImMsg(deviceId, channelImDO)
-        instance.sendMsg(tcpModel.toJson()).subscribe { it: Boolean ->
+        val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+            override fun onSuccess(jsonObject: JSONObject) {
+                SoundPoolManager.getInstance().playSound(3)
+
+                activity.runOnUiThread {
+                    showMessage("留言发送成功!")
+                    //刷新列表
+                    page = 1
+                    presenter.getChannelIm(page, page_size, memberId!!, channelId)
+                }
+            }
+
+            override fun onFailed(jsonObject: JSONObject) {
+                // 这里写发送失败的方法
+                SoundPoolManager.getInstance().playSound(6)
+                val callbackString = jsonObject.getString(CALLBACK)
+                activity.runOnUiThread {
+                    showMessage("Failed: $callbackString")
+                }
+            }
+        }
+        TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
+        /*instance.sendMsg(tcpModel.toJson()).subscribe { it: Boolean ->
             if (it) {
                 if (Locale.CHINESE.getLanguage().equals(language)) {
                     SoundPoolManager.getInstance().playSound(3)
@@ -180,7 +205,7 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
             } else {
                 showMessage(R.string.str_voice_msg_send_fail)
             }
-        }
+        }*/
     }
 
     override fun onResume() {

+ 1 - 1
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/NewEventListActivity.kt

@@ -116,7 +116,7 @@ class NewEventListActivity : BaseActivity<NewEventListPresenter, ActivityEventLi
         Constants.eventList.clear()
     }
 
-    override fun renderData(data: ArrayList<InteractionVO>) {
+    fun renderData(data: ArrayList<InteractionVO>) {
         Log.e(TAG,"返回的数据 "+data.size)
         //data.sortByDescending { it.id }
         //srl_event_list.finishRefresh()

+ 5 - 3
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/SmsReceivedActivity.kt

@@ -9,7 +9,7 @@ import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.util.AppUtils
 import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.common.Constants
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil
 import kotlinx.android.synthetic.main.activity_sms_received.*
 
@@ -57,13 +57,15 @@ class SmsReceivedActivity : Activity() {
             val phoneNo = edit_sms_phone.text.toString()
             if (!TextUtils.isEmpty(phoneNo)) {
                 val tcpModel = DeviceUtil.deviceConnect2(Constants.Companion.imei, phoneNo)
-                NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
+                TcpClient.getInstance().sendMsg(tcpModel.toJson())
+
+                /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
                     if (it) {
                         showMessage(R.string.device_number_update_success)
                     } else {
                         showMessage(R.string.device_number_update_failed)
                     }
-                }
+                }*/
                 finish()
             } else {
                 showMessage(R.string.device_number_update_empty)

+ 25 - 3
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/VoiceMsgActivity.kt

@@ -5,6 +5,7 @@ import android.content.Context
 import android.os.PowerManager
 import android.os.SystemClock
 import android.view.MotionEvent
+import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.android.jrouter.external.annotation.Autowired
 import com.enation.javashop.net.engine.model.NetState
 import com.wdkl.ncs.android.component.home.R
@@ -17,8 +18,9 @@ import com.wdkl.ncs.android.lib.vo.filter
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.middleware.logic.contract.home.VoiceMsgContract
 import com.wdkl.ncs.android.middleware.logic.presenter.home.VoiceMsgPresenter
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.ImUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
@@ -149,7 +151,27 @@ class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>()
         //上传完成后删除本地文件
         RecordHelper.getInstance().deleteAudioFile(voiceFile)
         val tcpModel = ImUtil.imMsg(Constants.deviceId, toDeviceId, result)
-        NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe{
+        val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+            override fun onSuccess(jsonObject: JSONObject) {
+                SoundPoolManager.getInstance().playSound(3)
+                runOnUiThread {
+                    showMessage("留言发送成功!")
+                }
+                finish()
+            }
+
+            override fun onFailed(jsonObject: JSONObject) {
+                // 这里写发送失败的方法
+                SoundPoolManager.getInstance().playSound(6)
+                val callbackString = jsonObject.getString(CALLBACK)
+                runOnUiThread {
+                    showMessage("Failed: $callbackString")
+                }
+            }
+        }
+        TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
+        /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe{
             if (it){
                 if (Locale.CHINESE.getLanguage().equals(language)) {
                     SoundPoolManager.getInstance().playSound(3)
@@ -159,7 +181,7 @@ class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>()
                 showMessage(R.string.str_voice_msg_send_fail)
             }
             finish()
-        }
+        }*/
     }
 
     override fun onError(message: String, type: Int) {

+ 16 - 4
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt

@@ -7,6 +7,7 @@ import android.util.Log
 import android.view.View
 import com.alibaba.android.vlayout.DelegateAdapter
 import com.alibaba.android.vlayout.VirtualLayoutManager
+import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.android.jrouter.external.annotation.Router
 import com.enation.javashop.net.engine.model.NetState
 import com.enation.javashop.utils.base.widget.LoadingDialog
@@ -16,7 +17,6 @@ import com.wdkl.ncs.android.component.home.adapter.WatchCallRecordsItemAdapter
 import com.wdkl.ncs.android.component.home.databinding.WatchActivityCallRecordsBinding
 import com.wdkl.ncs.android.component.home.launch.HomeLaunch
 import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.logic.contract.home.WatchCallRecordsFragmentContract
@@ -29,8 +29,9 @@ import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.lib.vo.MessageEvent
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.PhoneUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum
 import kotlinx.android.synthetic.main.watch_activity_call_records.*
 import kotlinx.android.synthetic.main.watch_activity_call_records.refresh
@@ -148,7 +149,18 @@ class WatchCallRecordsActivity : BaseActivity<WatchCallRecordsFragmentPresenter,
                                 if (!Constants.uploadCalllog) {
                                     //发送tcp
                                     val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, receivedData!!.deviceId)
-                                    NettyClient.instance.sendMsg(tcpModel.toJson())
+                                    val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                        override fun onSuccess(jsonObject: JSONObject) {
+                                            //
+                                        }
+
+                                        override fun onFailed(jsonObject: JSONObject) {
+                                            // 这里写发送失败的方法
+                                        }
+                                    }
+                                    TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
+
+                                    /*NettyClient.instance.sendMsg(tcpModel.toJson())
                                         .subscribe { res: Boolean ->
                                             if (res) {
                                                 Log.d(TAG, "TCP.发送消息完成")
@@ -156,7 +168,7 @@ class WatchCallRecordsActivity : BaseActivity<WatchCallRecordsFragmentPresenter,
                                                 Log.e(TAG, "TCP.发送消息失败")
                                                 HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                             }
-                                        }
+                                        }*/
                                 }
                             } else {
                                 showMessage(R.string.call_phone_failed)

+ 12 - 18
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchHome2Activity.kt

@@ -44,9 +44,9 @@ import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 import com.wdkl.ncs.android.middleware.model.vo.DeviceVO
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.model.vo.WatchContactVO
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
 import com.wdkl.ncs.android.middleware.tcp.TcpClientHandler
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum
+import com.wdkl.ncs.android.middleware.tcp.enums.RoleTypeEnum
 import com.wdkl.ncs.android.middleware.utils.CommonUtils
 import com.wdkl.ncs.android.middleware.utils.ContactHelper
 import com.wdkl.ncs.keepbackground.utils.SpManager
@@ -125,8 +125,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         initCountDownTimer()
 
         //网络强度监听
-        teleManager =
-            (applicationContext.getSystemService(Context.TELEPHONY_SERVICE)) as TelephonyManager
+        teleManager = (applicationContext.getSystemService(Context.TELEPHONY_SERVICE)) as TelephonyManager
         netType = NetHelper.getInstance().getNetworkState(applicationContext)
         Log.i(TAG, "网络类型:" + netType)
         /*
@@ -474,7 +473,8 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         Constants.sipPassword = data.sipPassword
         Constants.memberId = data.memberId
         Constants.userName = data.memberName
-        Constants.userRoleName = data.roleName
+        Constants.roleName = data.roleName
+        Constants.roleId = data.roleId
 
         presenter.getAppVersion(Constants.partId, 7)
         presenter.getWatchContacts(Constants.deviceId)
@@ -513,11 +513,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         } else {
             watch_name_tv.text = Constants.userName
             if (Constants.userName != null) {
-                if (Constants.userRoleName!!.contains("腕表")) {
-                    watch_role_name_tv.text = Constants.userRoleName!!.substring(0, (Constants.userRoleName)!!.indexOf("腕表"))
-                } else {
-                    watch_role_name_tv.text = Constants.userRoleName
-                }
+                watch_role_name_tv.text = Constants.roleName
                 watch_user_phone_tv.text = data.phoneNumber
             }
 
@@ -594,11 +590,13 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         Log.i(TAG, "收到设置设备数据 transferDuration" + partSettingDO.transferDuration)
         Log.i(TAG, "收到设置设备数据 transferDurationLeader" + partSettingDO.transferDurationLeader)
         if (partSettingDO != null && partSettingDO.transferDuration != null && partSettingDO.transferDurationLeader != null) {
-            if (Constants.userRoleName != null) {
-                if (!Constants.userRoleName!!.contains("护士组长") && Constants.userRoleName!!.contains("护士")) {
-                    SettingConfig.setCountdownTime(application, partSettingDO.transferDuration)
-                } else if (Constants.userRoleName!!.contains("护士组长")) {
+            if (Constants.roleId != null) {
+                if (Constants.roleId == RoleTypeEnum.NURSE_HEAD.value()) {
+                    //护士组长
                     SettingConfig.setCountdownTime(application, partSettingDO.transferDurationLeader)
+                } else if (Constants.roleId == RoleTypeEnum.NURSE.value()) {
+                    //护士
+                    SettingConfig.setCountdownTime(application, partSettingDO.transferDuration)
                 }
             }
         }
@@ -645,7 +643,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         //等30秒
         var waitSeconds = 0
         Thread {
-            while (!NettyClient.instance.isConnect()) {
+            while (!TcpClientHandler.getConnected()) {
                 Log.w(TAG, "无网络" + waitSeconds)
                 waitSeconds++
                 if (waitSeconds > 30) {
@@ -653,10 +651,6 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
                 }
                 Thread.sleep(5000)
             }
-
-//            if (NettyClient.instance.isConnect()) {
-//                onTcpConnectSuccess()
-//            }
         }.start()
     }
 

+ 19 - 3
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/activity/WatchUserSettingActivity.java

@@ -17,6 +17,7 @@ import android.widget.Toast;
 
 import androidx.annotation.Nullable;
 
+import com.alibaba.fastjson.JSONObject;
 import com.google.common.base.Strings;
 import com.wdkl.ncs.android.component.home.BuildConfig;
 import com.wdkl.ncs.android.component.home.R;
@@ -31,8 +32,9 @@ import com.wdkl.ncs.android.component.home.util.SpeechUtil;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.lib.base.BaseApplication;
 import com.wdkl.ncs.android.lib.utils.ExtendMethodsKt;
-import com.wdkl.ncs.android.middleware.tcp.NettyClient;
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
 import com.wdkl.ncs.android.middleware.utils.CommonUtils;
 
@@ -151,7 +153,21 @@ public class WatchUserSettingActivity extends Activity {
             @Override
             public void onClick(View view) {
                 TcpModel userChangeModel = DeviceUtil.userChange(Constants.Companion.getDeviceId());
-                NettyClient.Companion.getInstance().sendMsg(userChangeModel.toJson()).subscribe(it->{
+                TcpCallback transaction = new TcpCallback(userChangeModel.getTid()) {
+                    @Override
+                    public void onSuccess(JSONObject jsonObject) {
+                        runOnUiThread(() -> ExtendMethodsKt.showMessage(R.string.user_change_success));
+                        WatchUserSettingActivity.this.finish();
+                    }
+
+                    @Override
+                    public void onFailed(JSONObject jsonObject) {
+                        runOnUiThread(() -> ExtendMethodsKt.showMessage(R.string.user_change_failed));
+                    }
+                };
+                TcpClient.getInstance().sendTcp(userChangeModel, false, transaction);
+
+                /*NettyClient.Companion.getInstance().sendMsg(userChangeModel.toJson()).subscribe(it->{
                     if (it) {
                         Log.d(TAG, "TCP.发送消息完成");
                         ExtendMethodsKt.showMessage(R.string.user_change_success);
@@ -160,7 +176,7 @@ public class WatchUserSettingActivity extends Activity {
                         Log.e(TAG, "TCP.发送消息失败");
                         ExtendMethodsKt.showMessage(R.string.user_change_failed);
                     }
-                });
+                });*/
             }
         });
 

+ 20 - 5
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/ChannelImItemAdapter.kt

@@ -6,9 +6,9 @@ import android.view.View
 import android.view.ViewGroup
 import com.alibaba.android.vlayout.LayoutHelper
 import com.alibaba.android.vlayout.layout.LinearLayoutHelper
+import com.alibaba.fastjson.JSONObject
 import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.databinding.AdapterChannelImRecordsItemBinding
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect
 import com.wdkl.ncs.android.component.home.util.ImPlayDialogHelper
 import com.wdkl.ncs.android.component.home.util.MediaPlayHelper
 import com.wdkl.ncs.android.component.home.util.TimeTransition
@@ -20,8 +20,9 @@ import com.wdkl.ncs.android.middleware.api.ApiManager
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.middleware.model.dos.ChannelImDO
 import com.wdkl.ncs.android.middleware.model.vo.ChannelIMVO
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.ChannelImUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import org.greenrobot.eventbus.EventBus
 
 
@@ -72,7 +73,8 @@ class ChannelImItemAdapter(val data: ArrayList<ChannelIMVO>, val imActivity: Act
      */
     override fun onBindViewHolder(holder: BaseRecyclerViewHolder<AdapterChannelImRecordsItemBinding>, position: Int) {
         holder.bind { binding ->
-            val itemData = getItem(position)
+            val pos = holder.adapterPosition
+            val itemData = getItem(pos)
 
             binding.imCallTimeTv.text = TimeTransition().stampToTime(itemData.sendTime*1000)
             binding.imSickbedTv.text = itemData.senderMemberName
@@ -99,7 +101,20 @@ class ChannelImItemAdapter(val data: ArrayList<ChannelIMVO>, val imActivity: Act
                 //如果是未读留言则回复已读tcp
                 if (!itemData.readed) {
                     val imTcpModel = ChannelImUtil.channelImRead(Constants.deviceId, itemData as ChannelImDO)
-                    NettyClient.instance.sendMsg(imTcpModel.toJson()).subscribe {
+                    val transaction: TcpCallback = object : TcpCallback(imTcpModel.tid) {
+                        override fun onSuccess(jsonObject: JSONObject) {
+                            if (imCallBack != null) {
+                                imCallBack!!.onChannelImRead(itemData, pos)
+                            }
+                        }
+
+                        override fun onFailed(jsonObject: JSONObject) {
+                            // 这里写发送失败的方法
+                        }
+                    }
+                    TcpClient.getInstance().sendTcp(imTcpModel, false, transaction)
+
+                    /*NettyClient.instance.sendMsg(imTcpModel.toJson()).subscribe {
                         if (it) {
                             Log.d(TAG, "TCP.发送消息完成")
                             //EventBus.getDefault().post(MessageEvent("im_update", Constants.EVENT_CHANNEL_IM_UPDATE))
@@ -110,7 +125,7 @@ class ChannelImItemAdapter(val data: ArrayList<ChannelIMVO>, val imActivity: Act
                             Log.e(TAG, "TCP.发送消息失败")
                             HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                         }
-                    }
+                    }*/
                 }
             }
         }

+ 101 - 11
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/NewEventItemAdapter.kt

@@ -9,6 +9,7 @@ import android.view.View
 import android.view.ViewGroup
 import com.alibaba.android.vlayout.LayoutHelper
 import com.alibaba.android.vlayout.layout.LinearLayoutHelper
+import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.utils.base.tool.CommonTool
 import com.enation.javashop.utils.base.widget.LoadingDialog
 import com.google.gson.Gson
@@ -16,7 +17,6 @@ import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.activity.VoiceMsgActivity
 import com.wdkl.ncs.android.component.home.databinding.EventListItemBinding
 import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect
 import com.wdkl.ncs.android.component.home.util.ImPlayDialogHelper
 import com.wdkl.ncs.android.component.home.util.MediaPlayHelper
 import com.wdkl.ncs.android.middleware.common.Constants
@@ -26,10 +26,11 @@ import com.wdkl.ncs.android.lib.utils.BaseRecyclerViewHolder
 import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.api.ApiManager
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.lib.vo.MessageEvent
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.*
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import org.greenrobot.eventbus.EventBus
 
 
@@ -60,10 +61,10 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
     }
 
     override fun onBindViewHolder(holder: BaseRecyclerViewHolder<EventListItemBinding>, position: Int) {
-        holder?.bind { binding ->
+        holder.bind { binding ->
             val itemData = getItem(position)
 
-            var toDeviceId:Int?
+            val toDeviceId:Int?
             binding.eliEventTime.text = TimeTransition().stampToDate(itemData.createDate*1000)
             //binding.eliRoomName.text = itemData.fromFrameFullName
             var showName: String? = ""
@@ -99,7 +100,7 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                     binding.eliImRead.visibility = View.GONE
                     binding.eliEventResponse.visibility = View.VISIBLE
                     binding.eliEventName.text = itemData.data
-                    if (itemData.actionEnd!=null){
+                    if (itemData.actionEndMemberId != null){
                         binding.eliEventResponse.visibility = View.GONE
                         binding.eliEventName.setTextColor(Color.GREEN)
                     } else {
@@ -107,7 +108,33 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                         binding.eliEventResponse.setOnClickListener {
                             loadingDialog.show()
                             val tcpModel = EventUtil.eventResponse(Constants.deviceId, itemData.fromDeviceId, itemData.id)
-                            NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
+                            val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                override fun onSuccess(jsonObject: JSONObject) {
+                                    //操作成功,更新事件列表界面
+                                    updateEventItem(itemData)
+
+                                    if (activity != null) {
+                                        activity.runOnUiThread {
+                                            showMessage("操作成功")
+                                            loadingDialog.dismiss()
+                                        }
+                                    }
+                                }
+
+                                override fun onFailed(jsonObject: JSONObject) {
+                                    // 这里写发送失败的方法
+                                    val callbackString = jsonObject.getString(CALLBACK)
+                                    if (activity != null) {
+                                        activity.runOnUiThread {
+                                            showMessage("Failed: $callbackString")
+                                            loadingDialog.dismiss()
+                                        }
+                                    }
+                                }
+                            }
+                            TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
+                            /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
                                 if (it) {
                                     Log.d(TAG, "TCP.发送消息完成")
                                 } else {
@@ -115,7 +142,7 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                                     HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                 }
                                 loadingDialog.dismiss()
-                            }
+                            }*/
                         }
                     }
                 }
@@ -145,14 +172,37 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                             //如果是自己发的留言则不发送已读tcp
                             if (Constants.memberId != itemData.fromDeviceMemberId) {
                                 val tcpModel = ImUtil.imRead(Constants.deviceId, itemData.fromDeviceId, itemData.id)
-                                NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
+                                val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                    override fun onSuccess(jsonObject: JSONObject) {
+                                        //操作成功,更新事件列表界面
+                                        updateEventItem(itemData)
+
+                                        if (activity != null) {
+                                            activity.runOnUiThread {
+                                                showMessage("消息已读")
+                                            }
+                                        }
+                                    }
+
+                                    override fun onFailed(jsonObject: JSONObject) {
+                                        // 这里写发送失败的方法
+                                        if (activity != null) {
+                                            activity.runOnUiThread {
+                                                showMessage("网络异常,请重试")
+                                            }
+                                        }
+                                    }
+                                }
+                                TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
+                                /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
                                     if (it) {
                                         Log.d(TAG, "TCP.发送消息完成")
                                     } else {
                                         Log.e(TAG, "TCP.发送消息失败")
                                         HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                     }
-                                }
+                                }*/
                             }
                         }
                     }
@@ -170,7 +220,36 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                         binding.eliEventResponse.setOnClickListener {
                             loadingDialog.show()
                             val tcpModel = OtherUtil.SOSCancel(Constants.deviceId, itemData.fromDeviceId, itemData.id)
-                            NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
+                            val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                override fun onSuccess(jsonObject: JSONObject) {
+                                    //操作成功,更新事件列表界面
+                                    updateEventItem(itemData)
+
+                                    if (activity != null) {
+                                        activity.runOnUiThread {
+                                            tcpModel.data = Gson().toJson(itemData)
+                                            EventBus.getDefault().post(MessageEvent(tcpModel, 999))
+
+                                            showMessage("操作成功")
+                                            loadingDialog.dismiss()
+                                        }
+                                    }
+                                }
+
+                                override fun onFailed(jsonObject: JSONObject) {
+                                    // 这里写发送失败的方法
+                                    val callbackString = jsonObject.getString(CALLBACK)
+                                    if (activity != null) {
+                                        activity.runOnUiThread {
+                                            showMessage("Failed: $callbackString")
+                                            loadingDialog.dismiss()
+                                        }
+                                    }
+                                }
+                            }
+                            TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
+                            /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
                                 if (it) {
                                     Log.d(TAG, "TCP.发送消息完成")
                                     tcpModel.data = Gson().toJson(itemData)
@@ -181,7 +260,7 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                                     HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                 }
                                 loadingDialog.dismiss()
-                            }
+                            }*/
                         }
                     }
                 }
@@ -227,4 +306,15 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
         }
     }
 
+    private fun updateEventItem(responseInteractionVO: InteractionVO) {
+        val iterator = Constants.eventList.iterator()
+        while (iterator.hasNext()) {
+            val it = iterator.next()
+            if (it.id == responseInteractionVO.id) {
+                iterator.remove()
+            }
+        }
+
+        EventBus.getDefault().post(MessageEvent("update_event", Constants.EVENT_UPDATE_EVENT))
+    }
 }

+ 52 - 16
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemAdapter.kt

@@ -1,5 +1,6 @@
 package com.wdkl.ncs.android.component.home.adapter
 
+import android.app.Activity
 import android.content.Context
 import android.content.Intent
 import android.net.Uri
@@ -8,6 +9,7 @@ import android.view.View
 import android.view.ViewGroup
 import com.alibaba.android.vlayout.LayoutHelper
 import com.alibaba.android.vlayout.layout.LinearLayoutHelper
+import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.utils.base.tool.CommonTool
 import com.enation.javashop.utils.base.widget.LoadingDialog
 import com.google.common.base.Strings
@@ -17,21 +19,21 @@ import com.wdkl.ncs.android.component.home.activity.VoiceMsgActivity
 import com.wdkl.ncs.android.component.home.databinding.TakeoverItemBinding
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig
 import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.lib.adapter.BaseDelegateAdapter
 import com.wdkl.ncs.android.lib.base.BaseApplication
 import com.wdkl.ncs.android.lib.utils.BaseRecyclerViewHolder
 import com.wdkl.ncs.android.lib.utils.showMessage
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.PhoneUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum
 import com.wdkl.ncs.android.middleware.utils.StringUtil
 
-class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context) : BaseDelegateAdapter<BaseRecyclerViewHolder<TakeoverItemBinding>, JsonObject>(){
+class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val activity: Activity) : BaseDelegateAdapter<BaseRecyclerViewHolder<TakeoverItemBinding>, JsonObject>(){
     val TAG = "TakeoverItemAdapter"
 
     private lateinit var loadingDialog: LoadingDialog
@@ -50,7 +52,7 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context)
 
     override fun onCreateLayoutHelper(): LayoutHelper {
         Log.i(TAG,data.toString())
-        loadingDialog = CommonTool.createLoadingDialog(context, R.layout.custom_loading,R.id.loadding_image)
+        loadingDialog = CommonTool.createLoadingDialog(activity, R.layout.custom_loading,R.id.loadding_image)
         return LinearLayoutHelper(0,data.size)
     }
 
@@ -78,18 +80,41 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context)
                         StringUtil.getResString(R.string.device_change_check),
                         StringUtil.getResString(R.string.str_cancel),
                         StringUtil.getResString(R.string.str_confirm),
-                        context,object : CommonTool.DialogInterface{
+                        activity, object : CommonTool.DialogInterface{
                             override fun yes() {
                                 showMessage(R.string.device_change_tips)
-                                var tcpModel = DeviceUtil.deviceChange(Constants.deviceId, itemData.get("id").asInt)
-                                NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
+                                val tcpModel = DeviceUtil.deviceChange(Constants.deviceId, itemData.get("id").asInt)
+                                val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                    override fun onSuccess(jsonObject: JSONObject) {
+                                        if (activity != null) {
+                                            activity.runOnUiThread {
+                                                showMessage("操作成功")
+                                                loadingDialog.dismiss()
+                                            }
+                                        }
+                                    }
+
+                                    override fun onFailed(jsonObject: JSONObject) {
+                                        // 这里写发送失败的方法
+                                        val callbackString = jsonObject.getString(CALLBACK)
+                                        if (activity != null) {
+                                            activity.runOnUiThread {
+                                                showMessage("Failed: $callbackString")
+                                                loadingDialog.dismiss()
+                                            }
+                                        }
+                                    }
+                                }
+                                TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
+                                /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
                                     if (it) {
                                         Log.d(TAG, "TCP.发送消息完成")
                                     } else {
                                         Log.e(TAG, "TCP.发送消息失败")
                                         HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                     }
-                                }
+                                }*/
                             }
                             override fun no() {
                             }
@@ -104,13 +129,24 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context)
                         try {
                             val number = itemData.get("phone_number")
                             val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number.asString))
-                            context.startActivity(intent)
+                            activity.startActivity(intent)
                             //Constants.phoneState = Constants.PHONE_OUTGOING
 
                             if (!Constants.uploadCalllog) {
                                 //发送tcp
                                 val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, itemData.get("id").asInt)
-                                NettyClient.instance.sendMsg(tcpModel.toJson())
+                                val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                    override fun onSuccess(jsonObject: JSONObject) {
+                                        //
+                                    }
+
+                                    override fun onFailed(jsonObject: JSONObject) {
+                                        // 这里写发送失败的方法
+                                    }
+                                }
+                                TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
+
+                                /*NettyClient.instance.sendMsg(tcpModel.toJson())
                                     .subscribe { res: Boolean ->
                                         if (res) {
                                             Log.d(TAG, "TCP.发送消息完成")
@@ -118,7 +154,7 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context)
                                             Log.e(TAG, "TCP.发送消息失败")
                                             HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                         }
-                                    }
+                                    }*/
                             }
                         } catch (e: Exception) {
                             showMessage(R.string.call_phone_failed)
@@ -132,22 +168,22 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context)
                     } else {
                         //网络电话
                         val tcpModel = VoiceUtil.voiceCall(Constants.deviceId, itemData.get("id").asInt)
-                        val intent = Intent(context, CallSingleActivity::class.java)
+                        val intent = Intent(activity, CallSingleActivity::class.java)
                         intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID, Constants.sipId)
                         intent.putExtra(CallSingleActivity.EXTRA_MO, true)
                         intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY, true)
                         intent.putExtra(CallSingleActivity.EXTRA_TCPMODEL, tcpModel);
                         intent.putExtra(CallSingleActivity.EXTRA_SHOWNAME, itemData.get("clerk_name").asString)
                         //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                        context.startActivity(intent)
+                        activity.startActivity(intent)
                     }
                 }
 
                 binding.tiVoiceRecorder.visibility = View.VISIBLE
-                binding.tiVoiceRecorder.setOnClickListener{
-                    var intent = Intent(context, VoiceMsgActivity::class.java)
+                binding.tiVoiceRecorder.setOnClickListener {
+                    val intent = Intent(activity, VoiceMsgActivity::class.java)
                     intent.putExtra(VoiceMsgActivity.TO_DEVICE_ID,itemData.get("id").asInt)
-                    context.startActivity(intent)
+                    activity.startActivity(intent)
                 }
             }
         }

+ 54 - 15
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemSearchAdapter.kt

@@ -1,5 +1,6 @@
 package com.wdkl.ncs.android.component.home.adapter
 
+import android.app.Activity
 import android.content.Context
 import android.content.Intent
 import android.net.Uri
@@ -11,7 +12,9 @@ import android.widget.Button
 import android.widget.ImageView
 import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
+import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.utils.base.tool.CommonTool
+import com.enation.javashop.utils.base.widget.LoadingDialog
 import com.google.common.base.Strings
 import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.activity.VoiceMsgActivity
@@ -19,20 +22,21 @@ import com.wdkl.ncs.android.component.home.entity.ContactItemEntity
 import com.wdkl.ncs.android.component.home.search.FuzzySearchBaseAdapter
 import com.wdkl.ncs.android.component.home.search.IFuzzySearchRule
 import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect
 import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.common.Constants
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.PhoneUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum
 import com.wdkl.ncs.android.middleware.utils.StringUtil
 
 class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, TakeoverItemSearchAdapter.ItemHolder> {
     val TAG = "TakeoverItem"
 
-    lateinit var context: Context
+    lateinit var activity: Activity
+    private lateinit var loadingDialog: LoadingDialog
 
     constructor() : super(null)
 
@@ -40,12 +44,13 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
 
     constructor(data: ArrayList<ContactItemEntity>) : super(null, data)
 
-    constructor(rule: IFuzzySearchRule?, data: ArrayList<ContactItemEntity>, context: Context) : super(rule, data) {
-        this.context = context
+    constructor(rule: IFuzzySearchRule?, data: ArrayList<ContactItemEntity>, activity: Activity) : super(rule, data) {
+        this.activity = activity
     }
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder {
         val view = LayoutInflater.from(parent.getContext()).inflate(R.layout.takeover_item, parent, false)
+        loadingDialog = CommonTool.createLoadingDialog(activity, R.layout.custom_loading,R.id.loadding_image)
         return ItemHolder(view)
     }
 
@@ -67,18 +72,41 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
                     StringUtil.getResString(R.string.device_change_check),
                     StringUtil.getResString(R.string.str_cancel),
                     StringUtil.getResString(R.string.str_confirm),
-                    context,object : CommonTool.DialogInterface{
+                    activity, object : CommonTool.DialogInterface{
                         override fun yes() {
                             showMessage(R.string.device_change_tips)
                             val tcpModel = DeviceUtil.deviceChange(Constants.deviceId, itemData.id)
-                            NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
+                            val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                override fun onSuccess(jsonObject: JSONObject) {
+                                    if (activity != null) {
+                                        activity.runOnUiThread {
+                                            showMessage("Success")
+                                            loadingDialog.dismiss()
+                                        }
+                                    }
+                                }
+
+                                override fun onFailed(jsonObject: JSONObject) {
+                                    // 这里写发送失败的方法
+                                    val callbackString = jsonObject.getString(CALLBACK)
+                                    if (activity != null) {
+                                        activity.runOnUiThread {
+                                            showMessage("Failed: $callbackString")
+                                            loadingDialog.dismiss()
+                                        }
+                                    }
+                                }
+                            }
+                            TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
+                            /*NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
                                 if (it) {
                                     Log.d(TAG, "TCP.发送消息完成")
                                 } else {
                                     Log.e(TAG, "TCP.发送消息失败")
                                     HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                 }
-                            }
+                            }*/
                         }
                         override fun no() {
                         }
@@ -93,13 +121,24 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
                     try {
                         val number = itemData.number
                         val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:$number"))
-                        context.startActivity(intent)
+                        activity.startActivity(intent)
                         //Constants.phoneState = Constants.PHONE_OUTGOING
 
                         if (!Constants.uploadCalllog) {
                             //发送tcp
                             val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, itemData.id)
-                            NettyClient.instance.sendMsg(tcpModel.toJson())
+                            val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                override fun onSuccess(jsonObject: JSONObject) {
+                                    //
+                                }
+
+                                override fun onFailed(jsonObject: JSONObject) {
+                                    // 这里写发送失败的方法
+                                }
+                            }
+                            TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
+
+                            /*NettyClient.instance.sendMsg(tcpModel.toJson())
                                 .subscribe { res: Boolean ->
                                     if (res) {
                                         Log.d(TAG, "TCP.发送消息完成")
@@ -107,7 +146,7 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
                                         Log.e(TAG, "TCP.发送消息失败")
                                         HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                     }
-                                }
+                                }*/
                         }
                     } catch (e: Exception) {
                         showMessage(R.string.call_phone_failed)
@@ -121,22 +160,22 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
                 } else {
                     //网络电话
                     val tcpModel = VoiceUtil.voiceCall(Constants.deviceId, itemData.id)
-                    val intent = Intent(context, CallSingleActivity::class.java)
+                    val intent = Intent(activity, CallSingleActivity::class.java)
                     intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID, Constants.sipId)
                     intent.putExtra(CallSingleActivity.EXTRA_MO, true)
                     intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY, true)
                     intent.putExtra(CallSingleActivity.EXTRA_TCPMODEL, tcpModel);
                     intent.putExtra(CallSingleActivity.EXTRA_SHOWNAME, itemData.value)
                     //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-                    context.startActivity(intent)
+                    activity.startActivity(intent)
                 }
             }
 
             p0.tiVoiceRecorder.visibility = View.VISIBLE
             p0.tiVoiceRecorder.setOnClickListener{
-                val intent = Intent(context, VoiceMsgActivity::class.java)
+                val intent = Intent(activity, VoiceMsgActivity::class.java)
                 intent.putExtra(VoiceMsgActivity.TO_DEVICE_ID,itemData.id)
-                context.startActivity(intent)
+                activity.startActivity(intent)
             }
         }
     }

+ 6 - 1
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/WatchCallRecordsItemAdapter.kt

@@ -75,7 +75,7 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                 binding.treatmentStateImagev.visibility = View.VISIBLE
                 binding.processingTimeTv.visibility = View.VISIBLE
 
-                //判断是呼入还是呼出 1 分机到主机 2主机到分机
+                //判断是呼入还是呼出
                 if (itemData.fromDeviceMemberId == Constants.memberId){
                     binding.sickbedTv.text = itemData.toFrameFullName
                     if (TextUtils.isEmpty(itemData.toMemberName)) {
@@ -203,6 +203,11 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                     binding.treatmentStateImagev.visibility = View.GONE
                     binding.processingTimeTv.visibility = View.GONE
 
+                } else {
+                    binding.projectTv.visibility = View.GONE
+                    binding.playTv.visibility = View.GONE
+                    binding.treatmentStateImagev.visibility = View.GONE
+                    binding.processingTimeTv.visibility = View.GONE
                 }
             }
 

+ 16 - 4
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/adapter/WatchContactsItemAdapter.kt

@@ -8,22 +8,23 @@ import android.view.ViewGroup
 import androidx.recyclerview.widget.RecyclerView
 import com.alibaba.android.vlayout.LayoutHelper
 import com.alibaba.android.vlayout.layout.LinearLayoutHelper
+import com.alibaba.fastjson.JSONObject
 import com.enation.javashop.utils.base.tool.CommonTool
 import com.enation.javashop.utils.base.widget.LoadingDialog
 import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.activity.VoiceMsgActivity
 import com.wdkl.ncs.android.component.home.databinding.AdapterWatchContactsItemBinding
 import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.lib.adapter.BaseDelegateAdapter
 import com.wdkl.ncs.android.lib.utils.BaseRecyclerViewHolder
 import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.model.vo.WatchContactsVO
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
 import com.wdkl.ncs.android.middleware.tcp.channel.PhoneUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum
 
 class WatchContactsItemAdapter(val data:ArrayList<WatchContactsVO>, val context: Context) : BaseDelegateAdapter<BaseRecyclerViewHolder<AdapterWatchContactsItemBinding>, WatchContactsVO>(){
@@ -85,7 +86,18 @@ class WatchContactsItemAdapter(val data:ArrayList<WatchContactsVO>, val context:
                             if (!Constants.uploadCalllog) {
                                 //发送tcp
                                 val tcpModel = PhoneUtil.phoneCall(Constants.deviceId, itemData.deviceId)
-                                NettyClient.instance.sendMsg(tcpModel.toJson())
+                                val transaction: TcpCallback = object : TcpCallback(tcpModel.tid) {
+                                    override fun onSuccess(jsonObject: JSONObject) {
+                                        //
+                                    }
+
+                                    override fun onFailed(jsonObject: JSONObject) {
+                                        // 这里写发送失败的方法
+                                    }
+                                }
+                                TcpClient.getInstance().sendTcp(tcpModel, true, transaction)
+
+                                /*NettyClient.instance.sendMsg(tcpModel.toJson())
                                     .subscribe { res: Boolean ->
                                         if (res) {
                                             Log.d(TAG, "TCP.发送消息完成")
@@ -93,7 +105,7 @@ class WatchContactsItemAdapter(val data:ArrayList<WatchContactsVO>, val context:
                                             Log.e(TAG, "TCP.发送消息失败")
                                             HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                                         }
-                                    }
+                                    }*/
                             }
                         } else {
                             showMessage(R.string.call_phone_failed)

+ 3 - 1
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/service/FloatingService.java

@@ -252,8 +252,10 @@ public class FloatingService extends Service {
                         callSingleActivity.finish();
                     }
                 }
-            } else if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL) {
+            } else if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL || tcpModel.getAction() == TcpAction.VoiceAction.VOICE_OFF) {
                 if (curInteractionId == Constants.Companion.getInteractionId()) {
+                    RingPlayHelper.stopRingTone();
+                    SpeechUtil.getInstance().stopSpeak();
                     CallSingleActivity callSingleActivity = ActivityStackUtil.getCallSingleActivity();
                     if (callSingleActivity != null) {
                         callSingleActivity.finish();

+ 33 - 6
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/service/PhoneStateReceiver.java

@@ -8,11 +8,11 @@ import android.telephony.SmsMessage;
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
+import com.alibaba.fastjson.JSONObject;
 import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.activity.SmsReceivedActivity;
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
 import com.wdkl.ncs.android.component.home.util.AppUtils;
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect;
 import com.wdkl.ncs.android.component.home.util.PhoneCallUtil;
 import com.wdkl.ncs.android.component.home.util.RecordHelper;
 import com.wdkl.ncs.android.component.home.util.SpeechUtil;
@@ -20,9 +20,10 @@ import com.wdkl.ncs.android.component.home.util.Util;
 import com.wdkl.ncs.android.lib.vo.MessageEvent;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.middleware.model.vo.WatchContactVO;
-import com.wdkl.ncs.android.middleware.tcp.NettyClient;
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
 import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel;
 import com.wdkl.ncs.android.middleware.tcp.channel.PhoneUtil;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
 import com.wdkl.ncs.android.middleware.utils.ContactHelper;
 
@@ -89,14 +90,27 @@ public class PhoneStateReceiver extends BroadcastReceiver {
                         //发送tcp
                         if (Constants.Companion.getPhoneDataVO() != null) {
                             TcpModel tcpModel = PhoneUtil.phoneHandoff(Constants.Companion.getDeviceId(), Constants.Companion.getPhoneDataVO());
-                            NettyClient.Companion.getInstance().sendMsg(tcpModel.toJson()).subscribe(it -> {
+                            TcpCallback transaction = new TcpCallback(tcpModel.getTid()) {
+                                @Override
+                                public void onSuccess(JSONObject jsonObject) {
+                                    //
+                                }
+
+                                @Override
+                                public void onFailed(JSONObject jsonObject) {
+                                    //
+                                }
+                            };
+                            TcpClient.getInstance().sendTcp(tcpModel, true, transaction);
+
+                            /*NettyClient.Companion.getInstance().sendMsg(tcpModel.toJson()).subscribe(it -> {
                                 if (it) {
                                     Log.d(TAG, "TCP.发送消息完成");
                                 } else {
                                     Log.e(TAG, "TCP.发送消息失败");
                                     HandleTcpConnect.Companion.getInstance().tcpReConnectWithMsgShow();
                                 }
-                            });
+                            });*/
                             Constants.Companion.setPhoneDataVO(null);
                         }
                     } else {
@@ -159,14 +173,27 @@ public class PhoneStateReceiver extends BroadcastReceiver {
                         //发送tcp
                         if (Constants.Companion.getPhoneDataVO() != null) {
                             TcpModel tcpModel = PhoneUtil.phoneAccept(Constants.Companion.getDeviceId(), Constants.Companion.getPhoneDataVO());
-                            NettyClient.Companion.getInstance().sendMsg(tcpModel.toJson()).subscribe(it -> {
+                            TcpCallback transaction = new TcpCallback(tcpModel.getTid()) {
+                                @Override
+                                public void onSuccess(JSONObject jsonObject) {
+                                    //
+                                }
+
+                                @Override
+                                public void onFailed(JSONObject jsonObject) {
+                                    //
+                                }
+                            };
+                            TcpClient.getInstance().sendTcp(tcpModel, true, transaction);
+
+                            /*NettyClient.Companion.getInstance().sendMsg(tcpModel.toJson()).subscribe(it -> {
                                 if (it) {
                                     Log.d(TAG, "TCP.发送消息完成");
                                 } else {
                                     Log.e(TAG, "TCP.发送消息失败");
                                     HandleTcpConnect.Companion.getInstance().tcpReConnectWithMsgShow();
                                 }
-                            });
+                            });*/
                         }
                     }
                 } else if (Constants.Companion.getPhoneState() == Constants.PHONE_IDLE) {

+ 116 - 56
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -36,15 +36,13 @@ import com.wdkl.ncs.android.middleware.model.dos.ChannelImDO
 import com.wdkl.ncs.android.middleware.model.dos.PartSettingDO
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.model.vo.WatchContactVO
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClientHandler
 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.CommunicationEnum
-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.tcp.enums.*
 import com.wdkl.ncs.android.middleware.utils.CommonUtils
 import com.wdkl.ncs.android.middleware.utils.ContactHelper
 import com.wdkl.ncs.android.middleware.utils.StringUtil
@@ -102,9 +100,9 @@ class WdKeepAliveService : AbsWorkService() {
         Thread {
             Log.d(TAG, "Constants.tcpServer: " + Constants.tcpServer)
             while (TextUtils.isEmpty(Constants.tcpServer)) {
-                Thread.sleep(1000)
+                Thread.sleep(3000)
             }
-            HandleTcpConnect.instance.tcpInitConnect()
+            TcpClient.getInstance().init(Constants.tcpServer, Constants.tcpPort, Constants.heartBeat)
             instanceCreated = true
         }.start()
 
@@ -362,11 +360,12 @@ class WdKeepAliveService : AbsWorkService() {
                         EventBus.getDefault().post(MessageEvent(tcpModel, 1))
                     }
                 } else if (tcpModel.getAction() == TcpAction.VoiceAction.ACCEPT //我方呼出,对方接受
-                        || tcpModel.getAction() == TcpAction.VoiceAction.REJECT //我方呼出,对方拒绝
-                        || tcpModel.getAction() == TcpAction.VoiceAction.CALLING //我方呼出,对方通话中
-                        || tcpModel.getAction() == TcpAction.VoiceAction.HANDOFF
-                        || tcpModel.getAction() == TcpAction.VoiceAction.FAILED //我方呼出,对方不在线,设备离线或其它错误
-                        || tcpModel.getAction() == TcpAction.VoiceAction.CANCEL) {
+                    || tcpModel.getAction() == TcpAction.VoiceAction.REJECT //我方呼出,对方拒绝
+                    || tcpModel.getAction() == TcpAction.VoiceAction.CALLING //我方呼出,对方通话中
+                    || tcpModel.getAction() == TcpAction.VoiceAction.HANDOFF
+                    || tcpModel.getAction() == TcpAction.VoiceAction.FAILED //我方呼出,对方不在线,设备离线或其它错误
+                    || tcpModel.getAction() == TcpAction.VoiceAction.CANCEL
+                    || tcpModel.getAction() == TcpAction.VoiceAction.VOICE_OFF) {
                     EventBus.getDefault().post(MessageEvent(tcpModel, 2))
                 }
             }
@@ -411,22 +410,29 @@ class WdKeepAliveService : AbsWorkService() {
                             }).start()
                         } else {
                             Util.wakeUpAndUnlock()
-                            EventBus.getDefault().post(MessageEvent(tcpModel, Constants.EVENT_UPDATE_EVENT))
+                            EventBus.getDefault().post(MessageEvent("update_event", Constants.EVENT_UPDATE_EVENT))
                         }
                     } else {
                         val interaction = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
                         playVoiceMsg(interaction)
                         val msgTcpModel = ImUtil.imRead(Constants.deviceId, interaction.fromDeviceId, interaction.id)
-                        NettyClient.instance.sendMsg(msgTcpModel.toJson()).subscribe {
+                        TcpClient.getInstance().sendTcp(msgTcpModel, false, null)
+
+                        /*NettyClient.instance.sendMsg(msgTcpModel.toJson()).subscribe {
                             if (it) {
                                 Log.d(TAG, "TCP.发送消息完成")
                             } else {
                                 Log.e(TAG, "TCP.发送消息失败")
                                 HandleTcpConnect.instance.tcpReConnectWithMsgShow()
                             }
-                        }
+                        }*/
                     }
                 } else if (tcpModel.action == TcpAction.EventAction.KEY_CLICK) { // 收到新事件
+                    val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+                    if(Constants.eventList.contains(interactionVO)){ //断线重连会重新发送未处理的事件,所以如果当前事件列表中有重复事件,不需要添加
+                        return
+                    }
+
                     //取消掉语音留言录音
                     RecordHelper.getInstance().stopCancelRecordByOther(true)
 
@@ -435,7 +441,6 @@ class WdKeepAliveService : AbsWorkService() {
                     //震动提醒
                     handleVibrator()
 
-                    val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
                     if (Constants.oldEvent) {
                         Constants.eventList.clear()
                     }
@@ -458,7 +463,7 @@ class WdKeepAliveService : AbsWorkService() {
                             startActivity(intent)
                         }).start()
                     } else {
-                        EventBus.getDefault().post(MessageEvent(tcpModel, Constants.EVENT_UPDATE_EVENT))
+                        EventBus.getDefault().post(MessageEvent("update_event", Constants.EVENT_UPDATE_EVENT))
                     }
                 } else if (tcpModel.action == TcpAction.EventAction.CANCEL || tcpModel.action == TcpAction.EventAction.COMPLETED) { // 收到事件取消 或事件完成
                     //语音播报处理
@@ -476,7 +481,7 @@ class WdKeepAliveService : AbsWorkService() {
                     }
 
                     if (mNewEventListActive) {
-                        EventBus.getDefault().post(MessageEvent(tcpModel, Constants.EVENT_UPDATE_EVENT))
+                        EventBus.getDefault().post(MessageEvent("update_event", Constants.EVENT_UPDATE_EVENT))
                     }
                 }
             }
@@ -529,33 +534,60 @@ class WdKeepAliveService : AbsWorkService() {
             999 -> {
                 Util.wakeUpAndUnlock()
                 val sosTcpModel = messageEvent.getMessage() as TcpModel
-                val sosInteractionVO = Gson().fromJson(sosTcpModel.data.toString(), InteractionVO::class.java)
-                if (sosTcpModel.action === TcpAction.SOSAction.CANCEL) {
-                    //先停止铃声或其他音频播放
-                    SpeechUtil.getInstance().stopSpeak()
-                    MediaPlayHelper.getInstance().stopMusic(true)
-                    RingPlayHelper.stopRingTone()
+                if (sosTcpModel.action == TcpAction.SOSAction.CANCELED) {
+                    //紧急呼叫处理完成
+                    if (mNewEventListActive) {
+                        //先停止铃声或其他音频播放
+                        SpeechUtil.getInstance().stopSpeak()
+                        MediaPlayHelper.getInstance().stopMusic(true)
+                        RingPlayHelper.stopRingTone()
 
-                    if (mVibrator != null) {
-                        mVibrator.cancel()
+                        if (mVibrator != null) {
+                            mVibrator.cancel()
+                        }
                     }
 
-                    if (!Strings.isNullOrEmpty(sosInteractionVO.toRoleName)) {
-                        showMessage(sosInteractionVO.toRoleName + " " + sosInteractionVO.toMemberName + " " + StringUtil.getResString(R.string.event_responded))
-                    } else {
-                        showMessage(R.string.event_responded)
+                    Log.e(TAG, sosTcpModel.data.toString())
+                    val interactionId =  sosTcpModel.data.toString().toInt()
+                    val iterator = Constants.eventList.iterator()
+                    while (iterator.hasNext()) {
+                        val it = iterator.next()
+                        if (it.id == interactionId) {
+                            iterator.remove()
+                        }
                     }
+                    EventBus.getDefault().post(MessageEvent("update_event", Constants.EVENT_UPDATE_EVENT))
 
-                    var iterator = Constants.eventList.iterator()
+                } else if (sosTcpModel.action == TcpAction.SOSAction.CANCEL) {
+                    val sosInteractionVO = Gson().fromJson(sosTcpModel.data.toString(), InteractionVO::class.java)
+                    if (mNewEventListActive) {
+                        //先停止铃声或其他音频播放
+                        SpeechUtil.getInstance().stopSpeak()
+                        MediaPlayHelper.getInstance().stopMusic(true)
+                        RingPlayHelper.stopRingTone()
+
+                        if (mVibrator != null) {
+                            mVibrator.cancel()
+                        }
+
+                        if (!Strings.isNullOrEmpty(sosInteractionVO.toRoleName)) {
+                            showMessage(sosInteractionVO.toRoleName + " " + sosInteractionVO.toMemberName + " 已响应")
+                        } else {
+                            showMessage("已响应")
+                        }
+                    }
+
+                    val iterator = Constants.eventList.iterator()
                     while (iterator.hasNext()) {
                         val it = iterator.next()
                         if (it.id == sosInteractionVO.id) {
-                            Constants.eventList.remove(it)
+                            iterator.remove()
                         }
                     }
-                    EventBus.getDefault().post(MessageEvent(sosTcpModel, Constants.EVENT_UPDATE_EVENT))
+                    EventBus.getDefault().post(MessageEvent("update_event", Constants.EVENT_UPDATE_EVENT))
 
                 } else if (sosTcpModel.action == TcpAction.SOSAction.CALL || sosTcpModel.action == TcpAction.SOSAction.ROOM_CALL) {
+                    val sosInteractionVO = Gson().fromJson(sosTcpModel.data.toString(), InteractionVO::class.java)
                     //取消掉语音留言录音
                     RecordHelper.getInstance().stopCancelRecordByOther(true)
 
@@ -585,7 +617,7 @@ class WdKeepAliveService : AbsWorkService() {
                             }
                         }.start()
                     } else {
-                        EventBus.getDefault().post(MessageEvent(sosTcpModel, Constants.EVENT_UPDATE_EVENT))
+                        EventBus.getDefault().post(MessageEvent("update_event", Constants.EVENT_UPDATE_EVENT))
                     }
                 }
             }
@@ -618,6 +650,12 @@ class WdKeepAliveService : AbsWorkService() {
                 }).start()
             }
 
+            Constants.EVENT_RESTART_APP -> {
+                //app重启
+                Util.wakeUpAndUnlock()
+                AppUtils.restartApp()
+            }
+
             //系统设置
             Constants.EVENT_DEVICE_SETTING -> {
                 Thread(Runnable {
@@ -632,11 +670,13 @@ class WdKeepAliveService : AbsWorkService() {
                     Log.i(TAG, "收到系统设置 " + jsonStr)
                     if (partSettingDO != null) {
                         if (partSettingDO.transferDuration != null && partSettingDO.transferDurationLeader != null) {
-                            if (Constants.userRoleName != null) {
-                                if (!Constants.userRoleName!!.contains("护士组长") && Constants.userRoleName!!.contains("护士")) {
-                                    SettingConfig.setCountdownTime(application, partSettingDO.transferDuration)
-                                } else if (Constants.userRoleName!!.contains("护士组长")) {
+                            if (Constants.roleId != null) {
+                                if (Constants.roleId == RoleTypeEnum.NURSE_HEAD.value()) {
+                                    //护士组长
                                     SettingConfig.setCountdownTime(application, partSettingDO.transferDurationLeader)
+                                } else if (Constants.roleId == RoleTypeEnum.NURSE.value()) {
+                                    //护士
+                                    SettingConfig.setCountdownTime(application, partSettingDO.transferDuration)
                                 }
                             }
                         }
@@ -806,8 +846,11 @@ class WdKeepAliveService : AbsWorkService() {
                     interactionVO.data + StringUtil.getResString(R.string.str_event_cancel)
 
             if (Constants.ttsState == 2) {
-                //SpeechUtil.getInstance().newSpeech(eventStr, false)
-                SpeechUtil.getInstance().startSpeak(eventStr)
+                if (Locale.CHINESE.getLanguage().equals(language)) {
+                    SpeechUtil.getInstance().newSpeech(eventStr, false)
+                } else {
+                    RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.event, false)
+                }
             } else {
                 AppTool.Time.delay(500) {
                     //MediaPlayHelper.getInstance().playResMusic(R.raw.new_event, 1.0f, false)
@@ -819,12 +862,28 @@ class WdKeepAliveService : AbsWorkService() {
                     interactionVO.data + StringUtil.getResString(R.string.str_event_done)
 
             if (Constants.ttsState == 2) {
-                //SpeechUtil.getInstance().newSpeech(eventStr, false)
-                SpeechUtil.getInstance().startSpeak(eventStr)
+                if (Locale.CHINESE.getLanguage().equals(language)) {
+                    SpeechUtil.getInstance().newSpeech(eventStr, false)
+                } else {
+                    RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.event, false)
+                }
             } else {
                 AppTool.Time.delay(500) {
-                    //MediaPlayHelper.getInstance().playResMusic(R.raw.new_event, 1.0f, false)
-                    RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.new_event, false)
+                    RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.event, false)
+                }
+            }
+        } else if(model.type==TcpType.EVENT && model.action==TcpAction.EventAction.RESPONSED){
+            val eventStr = Util.appendSpace(interactionVO.fromFrameFullName.replace("-", ",")) + ", " + interactionVO.data + "事件已由"+interactionVO.actionEndMemberName+"响应"
+
+            if (Constants.ttsState == 2) {
+                if (Locale.CHINESE.getLanguage().equals(language)) {
+                    SpeechUtil.getInstance().newSpeech(eventStr, false)
+                } else {
+                    RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.event, false)
+                }
+            } else {
+                AppTool.Time.delay(500) {
+                    RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.event, false)
                 }
             }
         }
@@ -854,14 +913,16 @@ class WdKeepAliveService : AbsWorkService() {
     @SuppressLint("CheckResult")
     private fun sendChannelImRead(channelIm: ChannelImDO) {
         val imTcpModel = ChannelImUtil.channelImRead(Constants.deviceId, channelIm)
-        NettyClient.instance.sendMsg(imTcpModel.toJson()).subscribe {
+        TcpClient.getInstance().sendTcp(imTcpModel, false, null)
+
+        /*NettyClient.instance.sendMsg(imTcpModel.toJson()).subscribe {
             if (it) {
                 Log.d(TAG, "TCP.发送消息完成")
             } else {
                 Log.e(TAG, "TCP.发送消息失败")
                 HandleTcpConnect.instance.tcpReConnectWithMsgShow()
             }
-        }
+        }*/
     }
 
     private fun initSpeech() {
@@ -917,15 +978,14 @@ class WdKeepAliveService : AbsWorkService() {
 
     fun reConnect() {
         if (NetHelper.getInstance().getNetworkState(this@WdKeepAliveService) != NetHelper.NETWORK_NONE) {
-            if (!NettyClient.instance.isConnect()) {
+            /*if (!NettyClient.instance.isConnect()) {
                 Log.w(TAG, "TCP.进入重新连接")
                 HandleTcpConnect.instance.tcpReConnect()
+            }*/
+
+            if (!TcpClientHandler.getConnected()) {
+                TcpClient.getInstance().doConnect()
             }
-        } else {
-            Thread(Runnable {
-                Thread.sleep(5000)
-                reConnect()
-            }).start()
         }
     }
 
@@ -966,11 +1026,11 @@ class WdKeepAliveService : AbsWorkService() {
                                             Util.wakeUpAndUnlock()
                                         }
 
-                                        if (Constants.channelId == -1) {
-                                            showMessage(R.string.str_im_no_channel)
-                                        } else {
+                                        //if (Constants.channelId == -1) {
+                                        //    showMessage(R.string.str_im_no_channel)
+                                        //} else {
                                             RecordHelper.getInstance().execRecordVoiceMsg()
-                                        }
+                                        //}
                                     } else {
                                         //在某些特定界面不支持按键留言,如果按键的时候正在留言则停止录音并发送留言
                                         if (RecordHelper.getInstance().isRecording) {

+ 1 - 1
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/settingconfig/SettingConfig.java

@@ -9,7 +9,7 @@ public class SettingConfig {
 
     //呼叫转接时间设置
     private static final String KEY_SP_COUNTDOWN_TIME = "KEY_SP_COUNTDOWN_TIME";
-    private static final int CountdownTime = 15;
+    private static final int CountdownTime = 30;
 
     //电话功能类型
     private static final String KEY_SP_VOICE_CALL_TYPE = "KEY_SP_VOICE_CALL_TYPE";

+ 36 - 9
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/CallSingleActivity.java

@@ -25,6 +25,7 @@ import android.widget.Toast;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.FragmentManager;
 
+import com.alibaba.fastjson.JSONObject;
 import com.enation.javashop.utils.base.tool.CommonTool;
 import com.enation.javashop.utils.base.widget.LoadingDialog;
 import com.google.gson.Gson;
@@ -32,7 +33,6 @@ import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.service.FloatingService;
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
 import com.wdkl.ncs.android.component.home.util.ActivityStackUtil;
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect;
 import com.wdkl.ncs.android.component.home.util.HomeWatcher;
 import com.wdkl.ncs.android.component.home.util.LocaleMangerUtils;
 import com.wdkl.ncs.android.component.home.util.LogUpload;
@@ -42,9 +42,10 @@ import com.wdkl.ncs.android.component.home.util.RingPlayHelper;
 import com.wdkl.ncs.android.component.home.util.SpeechUtil;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
-import com.wdkl.ncs.android.middleware.tcp.NettyClient;
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
 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.TcpCallback;
 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;
@@ -356,16 +357,29 @@ public class CallSingleActivity extends AppCompatActivity {
                 } else {
                     toId = interactionVO.getFromDeviceId();
                 }
-                TcpModel voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.Companion.getDeviceId(), toId, interactionVO.getId());
 
-                NettyClient.Companion.getInstance().sendMsg(voiceUtilTcpModel.toJson()).subscribe(it-> {
+                TcpModel voiceUtilTcpModel = VoiceUtil.voiceHandoff(recTcpModel.getTid(), Constants.Companion.getDeviceId(), toId, interactionVO.getId());
+                TcpCallback transaction = new TcpCallback(voiceUtilTcpModel.getTid()) {
+                    @Override
+                    public void onSuccess(JSONObject jsonObject) {
+                        //
+                    }
+
+                    @Override
+                    public void onFailed(JSONObject jsonObject) {
+                        //
+                    }
+                };
+                TcpClient.getInstance().sendTcp(voiceUtilTcpModel, false, transaction);
+
+                /*NettyClient.Companion.getInstance().sendMsg(voiceUtilTcpModel.toJson()).subscribe(it-> {
                     if (it) {
                         Log.d(TAG, "TCP.发送消息完成");
                     } else {
                         Log.e(TAG, "TCP.发送消息失败");
                         HandleTcpConnect.Companion.getInstance().tcpReConnectWithMsgShow();
                     }
-                });
+                });*/
             } else if (recTcpModel.getAction() == TcpAction.VoiceAction.CALL) {
                 int toId;
                 if (interactionVO==null){
@@ -379,18 +393,31 @@ public class CallSingleActivity extends AppCompatActivity {
                 }
                 TcpModel voiceUtilTcpModel;
                 if (interactionVO == null){
-                    voiceUtilTcpModel = VoiceUtil.voiceCancel(Constants.Companion.getDeviceId(),recTcpModel.getToId());
+                    voiceUtilTcpModel = VoiceUtil.voiceCancel(recTcpModel.getTid(), Constants.Companion.getDeviceId(),recTcpModel.getToId(), null);
                 } else {
-                    voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.Companion.getDeviceId(), toId, interactionVO.getId());
+                    voiceUtilTcpModel = VoiceUtil.voiceHandoff(recTcpModel.getTid(), Constants.Companion.getDeviceId(), toId, interactionVO.getId());
                 }
-                NettyClient.Companion.getInstance().sendMsg(voiceUtilTcpModel.toJson()).subscribe(it-> {
+                TcpCallback transaction = new TcpCallback(voiceUtilTcpModel.getTid()) {
+                    @Override
+                    public void onSuccess(JSONObject jsonObject) {
+                        //
+                    }
+
+                    @Override
+                    public void onFailed(JSONObject jsonObject) {
+                        //
+                    }
+                };
+                TcpClient.getInstance().sendTcp(voiceUtilTcpModel, false, transaction);
+
+                /*NettyClient.Companion.getInstance().sendMsg(voiceUtilTcpModel.toJson()).subscribe(it-> {
                     if (it) {
                         Log.d(TAG, "TCP.发送消息完成");
                     } else {
                         Log.e(TAG, "TCP.发送消息失败");
                         HandleTcpConnect.Companion.getInstance().tcpReConnectWithMsgShow();
                     }
-                });
+                });*/
             }
         }
     }

+ 74 - 29
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/FragmentAudio.java

@@ -14,21 +14,23 @@ import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 
+import com.alibaba.fastjson.JSONObject;
 import com.blankj.utilcode.util.BarUtils;
 import com.enation.javashop.utils.base.tool.CommonTool;
 import com.google.gson.Gson;
 import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect;
 import com.wdkl.ncs.android.component.home.util.LocaleMangerUtils;
 import com.wdkl.ncs.android.component.home.util.MediaPlayHelper;
 import com.wdkl.ncs.android.component.home.util.RingPlayHelper;
 import com.wdkl.ncs.android.component.home.util.SpeechUtil;
 import com.wdkl.ncs.android.component.home.util.Util;
+import com.wdkl.ncs.android.lib.utils.ExtendMethodsKt;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
-import com.wdkl.ncs.android.middleware.tcp.NettyClient;
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
 import com.wdkl.ncs.android.middleware.utils.StringUtil;
 import com.wdkl.rtc.entity.Publisher;
@@ -116,21 +118,17 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
                 incomingActionContainer.setVisibility(View.VISIBLE);
 
                 if (interactionVO != null) {
+                    String language = LocaleMangerUtils.getApplicationLocale().getLanguage();
                     String frameName;
-                    //是客户
-                    if (interactionVO.getFromClerkId() == null) {
+                    if (Locale.CHINESE.getLanguage().equals(language)) {
                         frameName = Util.INSTANCE.appendSpace(interactionVO.getFromFrameFullName().replace("-", ""));
-                    }
-                    //是同事
-                    else {
-                        frameName = interactionVO.getFromMemberName();
+                    } else {
+                        frameName = interactionVO.getFromFrameFullName().replace("-", "");
                     }
 
-                    if (!TextUtils.isEmpty(frameName)) {
-                        if (Locale.CHINESE.getLanguage().equals(LocaleMangerUtils.getApplicationLocale().getLanguage())) {
-                            SpeechUtil.getInstance().startSpeak(frameName + "来电, " + frameName + "来电, " + frameName + "来电");
-                        }
-                    }
+                    String text = frameName + getString(R.string.call_incoming) + frameName + getString(R.string.call_incoming)
+                            + frameName + getString(R.string.call_incoming) + frameName + getString(R.string.call_incoming);
+                    SpeechUtil.getInstance().newSpeech(text, false);
                 }
             }
         }
@@ -160,20 +158,15 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
             else {
                 //是客户
                 if (interactionVO.getFromClerkId() == null) {
-                    if (TextUtils.isEmpty(interactionVO.getFromMemberName())) {
-                        showName = interactionVO.getFromFrameFullName();
-
-                        if (!isOutgoing) {
-                            hangupLinearLayout.setVisibility(View.VISIBLE);
-                        }
-                    } else {
-                        showName = interactionVO.getFromFrameFullName() + " " + interactionVO.getFromMemberName();
+                    showName = interactionVO.getFromFrameFullName() + " " + interactionVO.getFromMemberName();
+                    portraitImageView.setImageResource(R.drawable.face_customer);
 
-                        if (!isOutgoing && Constants.Companion.getUserRoleName() != null && (Constants.Companion.getUserRoleName().contains("护士") || Constants.Companion.getUserRoleName().contains("组长"))) {
+                    if (!isOutgoing) {
+                        if (Constants.Companion.getRoleId() != null
+                            /*&& (Constants.Companion.getRoleId() == RoleTypeEnum.NURSE.value() || Constants.Companion.getRoleId() == RoleTypeEnum.NURSE_HEAD.value())*/) {
                             transLinearLayout.setVisibility(View.VISIBLE);
                         }
                     }
-                    portraitImageView.setImageResource(R.drawable.face_customer);
                 }
                 //是同事
                 else {
@@ -312,8 +305,38 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
         } else {
             toId = interactionVO.getFromDeviceId();
         }
-        TcpModel voiceTransferTcpModel = VoiceUtil.voiceTransfer(Constants.Companion.getDeviceId(), toId, interactionVO);
-        NettyClient.Companion.getInstance().sendMsg(voiceTransferTcpModel.toJson()).subscribe(it-> {
+
+        TcpModel voiceTransferTcpModel = VoiceUtil.voiceTransfer(callSingleActivity.recTcpModel.getTid(), Constants.Companion.getDeviceId(), toId, interactionVO.getId());
+        /*TcpCallback transaction = new TcpCallback(voiceTransferTcpModel.getTid()) {
+            @Override
+            public void onSuccess(JSONObject jsonObject) {
+                if (callSingleActivity != null) {
+                    callSingleActivity.runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            ExtendMethodsKt.showMessage("转接成功");
+                        }
+                    });
+                }
+                handler.sendEmptyMessageDelayed(FINISH_CURRENT, 500);
+            }
+
+            @Override
+            public void onFailed(JSONObject jsonObject) {
+                if (callSingleActivity != null) {
+                    callSingleActivity.runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            ExtendMethodsKt.showMessage("转接失败");
+                        }
+                    });
+                }
+            }
+        };*/
+        TcpClient.getInstance().sendTcp(voiceTransferTcpModel, false, null);
+        handler.sendEmptyMessageDelayed(FINISH_CURRENT, 500);
+
+        /*NettyClient.Companion.getInstance().sendMsg(voiceTransferTcpModel.toJson()).subscribe(it-> {
             if (it) {
                 Log.d(TAG, "TCP.发送消息完成");
                 handler.sendEmptyMessageDelayed(FINISH_CURRENT, 500);
@@ -321,7 +344,7 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
                 Log.e(TAG, "TCP.发送消息失败");
                 HandleTcpConnect.Companion.getInstance().tcpReConnectWithMsgShow();
             }
-        });
+        });*/
     }
 
     public void acceptCall(){
@@ -345,8 +368,30 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
             } else {
                 toId = interactionVO.getFromDeviceId();
             }
-            TcpModel voiceUtilTcpModel = VoiceUtil.voiceAccept(Constants.Companion.getDeviceId(), toId, interactionVO.getId());
-            NettyClient.Companion.getInstance().sendMsg(voiceUtilTcpModel.toJson()).subscribe(it->{
+
+            TcpModel voiceUtilTcpModel = VoiceUtil.voiceAccept(callSingleActivity.recTcpModel.getTid(), Constants.Companion.getDeviceId(), toId, interactionVO.getId());
+            TcpCallback transaction = new TcpCallback(voiceUtilTcpModel.getTid()) {
+                @Override
+                public void onSuccess(JSONObject jsonObject) {
+                    //
+                }
+
+                @Override
+                public void onFailed(JSONObject jsonObject) {
+                    if (callSingleActivity != null) {
+                        callSingleActivity.runOnUiThread(new Runnable() {
+                            @Override
+                            public void run() {
+                                ExtendMethodsKt.showMessage("Accept failed");
+                                //callSingleActivity.loadingDialog.dismiss();
+                            }
+                        });
+                    }
+                }
+            };
+            TcpClient.getInstance().sendTcp(voiceUtilTcpModel, false, transaction);
+
+            /*NettyClient.Companion.getInstance().sendMsg(voiceUtilTcpModel.toJson()).subscribe(it->{
                 if (it) {
                     Log.d(TAG, "TCP.发送消息完成");
                 } else {
@@ -354,7 +399,7 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
                     callSingleActivity.loadingDialog.dismiss();
                     HandleTcpConnect.Companion.getInstance().tcpReConnectWithMsgShow();
                 }
-            });
+            });*/
 
             transHandler.sendEmptyMessageDelayed(CHECK, 6000);
         }

+ 28 - 5
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/ui/SingleCallFragment.java

@@ -25,16 +25,18 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 
+import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect;
 import com.wdkl.ncs.android.component.home.util.MediaPlayHelper;
 import com.wdkl.ncs.android.component.home.util.RingPlayHelper;
 import com.wdkl.ncs.android.component.home.util.SpeechUtil;
+import com.wdkl.ncs.android.lib.utils.ExtendMethodsKt;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.lib.base.BaseApplication;
 import com.wdkl.ncs.android.lib.vo.MessageEvent;
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
-import com.wdkl.ncs.android.middleware.tcp.NettyClient;
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction;
 import com.wdkl.rtc.janus.JanusClient;
@@ -201,7 +203,28 @@ public abstract class SingleCallFragment extends Fragment {
     @SuppressLint("CheckResult")
     private void startOutCall() {
         //发送tcp call
-        NettyClient.Companion.getInstance().sendMsg(callSingleActivity.recTcpModel.toJson()).subscribe(it -> {
+        TcpCallback transaction = new TcpCallback(callSingleActivity.recTcpModel.getTid()) {
+            @Override
+            public void onSuccess(JSONObject jsonObject) {
+                //
+            }
+
+            @Override
+            public void onFailed(JSONObject jsonObject) {
+                if (callSingleActivity != null) {
+                    callSingleActivity.runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            ExtendMethodsKt.showMessage("Failed");
+                        }
+                    });
+                    callSingleActivity.finish();
+                }
+            }
+        };
+        TcpClient.getInstance().sendTcp(callSingleActivity.recTcpModel, false, transaction);
+
+        /*NettyClient.Companion.getInstance().sendMsg(callSingleActivity.recTcpModel.toJson()).subscribe(it -> {
             if (it) {
                 Log.d(TAG, "TCP.发送消息完成");
             } else {
@@ -211,7 +234,7 @@ public abstract class SingleCallFragment extends Fragment {
                     callSingleActivity.finish();
                 }
             }
-        });
+        });*/
     }
 
     public void callOutSuccess(TcpModel tcpModel) {
@@ -554,7 +577,7 @@ public abstract class SingleCallFragment extends Fragment {
                         }
                     });
                 //}
-            } else if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL) {
+            } else if (tcpModel.getAction() == TcpAction.VoiceAction.CANCEL || tcpModel.getAction() == TcpAction.VoiceAction.VOICE_OFF) {
                 if (curInteractionId == Constants.Companion.getInteractionId()) {
                     handler.sendEmptyMessageDelayed(FINISH_CURRENT, 100);
                     runOnUiThread(new Runnable() {

android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/HandleTcpConnect.kt → android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/HandleTcpConnect.kt.bak


+ 12 - 4
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/NetWorkChangeReceiver.kt

@@ -8,8 +8,8 @@ import android.net.Network
 import android.net.NetworkInfo
 import android.os.Build
 import android.util.Log
-import com.wdkl.ncs.android.component.home.service.WdKeepAliveService
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClient
+import com.wdkl.ncs.android.middleware.tcp.TcpClientHandler
 
 class NetWorkChangeReceiver : BroadcastReceiver() {
     val TAG = NetWorkChangeReceiver::class.simpleName
@@ -34,9 +34,13 @@ class NetWorkChangeReceiver : BroadcastReceiver() {
             // 判断网络是否链接
             if (null != networkInfo && networkInfo.isConnected) {
                 //当前网络已经链接
-                if (!NettyClient.instance.isConnect() && WdKeepAliveService.instanceCreated){
+                /*if (!NettyClient.instance.isConnect() && WdKeepAliveService.instanceCreated){
                     Log.w(TAG,"TCP.进入重新连接")
                     HandleTcpConnect.instance.tcpReConnect()
+                }*/
+
+                if (!TcpClientHandler.getConnected()) {
+                    TcpClient.getInstance().doConnect()
                 }
             }
             // 判断网络是否正在链接
@@ -63,8 +67,12 @@ class NetWorkChangeReceiver : BroadcastReceiver() {
             if ((wifiNetworkInfo!=null && wifiNetworkInfo.isConnected) || (dataNetworkInfo!=null&&dataNetworkInfo.isConnected)) {
                 //WIFI已连接 或 移动数据已连接
                 Log.w(TAG,"TCP.进入重新连接")
-                if (!NettyClient.instance.isConnect()){
+                /*if (!NettyClient.instance.isConnect()){
                     HandleTcpConnect.instance.tcpReConnect()
+                }*/
+
+                if (!TcpClientHandler.getConnected()) {
+                    TcpClient.getInstance().doConnect()
                 }
             }
         }

+ 48 - 27
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/util/RecordHelper.java

@@ -6,7 +6,6 @@ import android.bluetooth.BluetoothHeadset;
 import android.content.Context;
 import android.media.AudioManager;
 import android.media.MediaRecorder;
-import android.os.Environment;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
@@ -14,23 +13,21 @@ import android.util.Log;
 
 import androidx.annotation.NonNull;
 
+import com.alibaba.fastjson.JSONObject;
 import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.helper.HttpHelper;
 import com.wdkl.ncs.android.lib.base.BaseApplication;
-import com.wdkl.ncs.android.lib.vo.MessageEvent;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.middleware.api.UrlManager;
 import com.wdkl.ncs.android.middleware.model.dos.ChannelImDO;
-import com.wdkl.ncs.android.middleware.tcp.NettyClient;
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
+import com.wdkl.ncs.android.middleware.tcp.TcpClientHandler;
 import com.wdkl.ncs.android.middleware.tcp.channel.ChannelImUtil;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
 import com.wdkl.ncs.android.middleware.utils.CommonUtils;
-import com.wdkl.rtc.rtc.AudioFocusManager;
-
-import org.greenrobot.eventbus.EventBus;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.Locale;
 
 import static com.wdkl.ncs.android.lib.utils.ExtendMethodsKt.showMessage;
@@ -155,23 +152,31 @@ public class RecordHelper {
         //连续点击2次开始留言
         long curTime = System.currentTimeMillis();
         if (!recordRunning && curTime - clickTime > 150 && curTime - clickTime < 1500 && curTime - pressDownTime > 3500 && curTime - pressUpTime > 2500) {
-            showMessage(R.string.str_voice_msg_start);
-            //先停止其他语音或铃声
-            RingPlayHelper.stopRingTone();
-            SpeechUtil.getInstance().stopSpeak();
-            MediaPlayHelper.getInstance().stopMusic(true);
-            //EventBus.getDefault().post(new MessageEvent(false, Constants.EVENT_CLEAR_IM));
-            //播放提示
-            if (Locale.CHINESE.getLanguage().equals(language)) {
-                SoundPoolManager.getInstance().playSound(2);
+            if (Constants.Companion.getChannelId() == -1) {
+                SoundPoolManager.getInstance().playSound(6);
+                showMessage(R.string.str_im_no_channel);
+            } else if (!TcpClientHandler.getConnected()) {
+                SoundPoolManager.getInstance().playSound(6);
+                showMessage(R.string.tcp_connect_failed);
             } else {
-                SoundPoolManager.getInstance().playSound(7);
+                showMessage(R.string.str_voice_msg_start);
+                //先停止其他语音或铃声
+                RingPlayHelper.stopRingTone();
+                SpeechUtil.getInstance().stopSpeak();
+                MediaPlayHelper.getInstance().stopMusic(true);
+                //EventBus.getDefault().post(new MessageEvent(false, Constants.EVENT_CLEAR_IM));
+                //播放提示
+                if (Locale.CHINESE.getLanguage().equals(language)) {
+                    SoundPoolManager.getInstance().playSound(2);
+                } else {
+                    SoundPoolManager.getInstance().playSound(7);
+                }
+                recordRunning = true;
+                pressDownTime = curTime;
+                handler.removeCallbacksAndMessages(null);
+                handler.postDelayed(this::startRecord, 1200);
+                handler.sendEmptyMessageDelayed(1024, 45000);
             }
-            recordRunning = true;
-            pressDownTime = curTime;
-            handler.removeCallbacksAndMessages(null);
-            handler.postDelayed(this::startRecord, 1200);
-            handler.sendEmptyMessageDelayed(1024, 45000);
         } else {
             if (recordRunning) {
                 pressUpTime = curTime;
@@ -244,21 +249,37 @@ public class RecordHelper {
                 public void onSuccess(String data) {
                     //上传完成后删除本地文件
                     deleteAudioFile(file);
-                    if (Locale.CHINESE.getLanguage().equals(language)) {
-                        SoundPoolManager.getInstance().playSound(3);
-                    }
                     ChannelImDO channelImDO = new ChannelImDO();
                     channelImDO.setChannelId(Constants.Companion.getChannelId());
                     channelImDO.setSenderMemberId(Constants.Companion.getMemberId());
                     channelImDO.setAudioPath(data);
                     TcpModel tcpModel = ChannelImUtil.channelImMsg(Constants.Companion.getDeviceId(), channelImDO);
-                    NettyClient.Companion.getInstance().sendMsg(tcpModel.toJson()).subscribe(it-> {
+                    TcpCallback transaction = new TcpCallback(tcpModel.getTid()) {
+                        @Override
+                        public void onSuccess(JSONObject jsonObject) {
+                            if (Locale.CHINESE.getLanguage().equals(language)) {
+                                SoundPoolManager.getInstance().playSound(3);
+                            }
+                            showMessage(R.string.str_voice_msg_send_success);
+                        }
+
+                        @Override
+                        public void onFailed(JSONObject jsonObject) {
+                            // 这里写发送失败的方法
+                            SoundPoolManager.getInstance().playSound(6);
+                            String callbackString = jsonObject.getString(CALLBACK);
+                            showMessage(R.string.str_voice_msg_send_fail + callbackString);
+                        }
+                    };
+                    TcpClient.getInstance().sendTcp(tcpModel, false, transaction);
+
+                    /*NettyClient.Companion.getInstance().sendMsg(tcpModel.toJson()).subscribe(it-> {
                         if (it) {
                             showMessage(R.string.str_voice_msg_send_success);
                         } else {
                             showMessage(R.string.str_voice_msg_send_fail);
                         }
-                    });
+                    });*/
                 }
             });
         }

+ 2 - 1
common/src/main/code/com/wdkl/ncs/android/lib/utils/ConnectionObserver.kt

@@ -139,6 +139,7 @@ abstract class BaseObserver<T>(private val context: Context) : Observer<T> {
                 return
             }
             this.onError(ExceptionHandle.handleException(e))
+
 //            val obj = JSONObject(errorJSon)
 //            if (obj.has("code")){
 //                val result = ExceptionHandle.ResponeThrowable(e,420)
@@ -150,7 +151,7 @@ abstract class BaseObserver<T>(private val context: Context) : Observer<T> {
         } else {
             this.onError(ExceptionHandle.ResponeThrowable(e, 1000).then {
                 if (e.message == null) {
-                    it.customMessage = "加载失败!"
+                    it.customMessage = "load error!"
                 } else {
                     it.customMessage = e.message
                 }