浏览代码

1.添加直播间心跳上传接口

王鹏鹏 2 年之前
父节点
当前提交
b4f8fbf192

+ 32 - 0
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/detail/LiveBroadcastActivity.kt

@@ -21,6 +21,7 @@ import com.yingyangfly.baselib.ext.toast
 import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
 import com.yingyangfly.baselib.router.RouterUrlCommon
 import com.yingyangfly.baselib.utils.User
+import java.util.*
 
 /**
  * 直播页面
@@ -30,18 +31,23 @@ class LiveBroadcastActivity :
     BaseMVVMActivity<ActivityLiveBroadcastBinding, LiveBroadcastDetailViewModel>(),
     View.OnTouchListener {
 
+    private var liveId: String = ""
     private var url: String = ""
     private var mLivePlayer: V2TXLivePlayer? = null
     private var mPlayFlag = false
+    private val timer = Timer()
 
     override fun onCreate(savedInstanceState: Bundle?) {
         url = intent.getStringExtra("url") ?: ""
+        liveId = intent.getStringExtra("liveId") ?: ""
         super.onCreate(savedInstanceState)
     }
 
     override fun initViews() {
         //初始化直播
         initPlayer()
+        //上报直播间心跳
+        initTask()
         //初始化IM
         getUserSign()
     }
@@ -120,6 +126,7 @@ class LiveBroadcastActivity :
     }
 
     private fun loginIm(sign: String) {
+        Log.e("wpp", "登录IM")
         V2TIMManager.getInstance().login(User.getUserId(), sign, object : V2TIMCallback {
             override fun onError(p0: Int, p1: String?) {
                 //用户登录IM失败
@@ -150,6 +157,7 @@ class LiveBroadcastActivity :
                 }
                 mLivePlayer = null
             }
+            timer.cancel()
         }
         super.onDestroy()
     }
@@ -176,4 +184,28 @@ class LiveBroadcastActivity :
         }
         return true
     }
+
+    /**
+     * 上报直播间心跳
+     */
+    private fun initTask() {
+        val timerTask: TimerTask = object : TimerTask() {
+            override fun run() {
+                liveIncr()
+            }
+
+        }
+        timer.schedule(timerTask, 0, 3000)
+    }
+
+    /**
+     * 直播统计心跳上报
+     */
+    private fun liveIncr() {
+        viewModel.liveIncr("", fail = {
+            it.toast()
+        }, success = {
+
+        })
+    }
 }

+ 23 - 0
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/detail/LiveBroadcastDetailViewModel.kt

@@ -1,7 +1,12 @@
 package com.yingyang.livebroadcast.activity.detail
 
+import com.yingyang.livebroadcast.entity.ReservationLiveBean
+import com.yingyang.livebroadcast.entity.liveIncrBean
 import com.yingyang.livebroadcast.net.LIVEBROADCAST_API
 import com.yingyangfly.baselib.mvvm.BaseViewModel
+import com.yingyangfly.baselib.net.XUtils
+import com.yingyangfly.baselib.utils.GsonUtil
+import com.yingyangfly.baselib.utils.User
 
 /**
  * @author gold
@@ -23,5 +28,23 @@ class LiveBroadcastDetailViewModel : BaseViewModel() {
         fail
     )
 
+    /**
+     * 直播统计心跳上报
+     */
+    fun liveIncr(
+        id: String,
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: Unit?) -> Unit)? = null,
+    ) = launchFlow(false) {
+        val requestBean = liveIncrBean().apply {
+            liveId = id
+            appUserId = User.getUserId()
+        }
+        val body = XUtils.createJson(GsonUtil.GsonString(requestBean))
+        LIVEBROADCAST_API.liveIncr(body)
+    }.runUI(
+        success,
+        fail
+    )
 
 }

+ 12 - 8
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/list/LiveBroadcastListActivity.kt

@@ -73,7 +73,7 @@ class LiveBroadcastListActivity :
                             appointmentLive(id, position)
                         }
                         "直播中" -> {
-                            initPermission(url)
+                            initPermission(url, id)
                         }
                         "直播回放" -> {
                             ARouter.getInstance().build(RouterUrlCommon.videoPlayer)
@@ -195,19 +195,23 @@ class LiveBroadcastListActivity :
     /**
      * 获取应用权限
      */
-    private fun initPermission(url: String) {
+    private fun initPermission(url: String, id: String) {
         val isHasPermission = XXPermissions.isGranted(this, permissions)
         if (isHasPermission) {
-            JumpUtil.jumpActivityWithUrl(RouterUrlCommon.liveBroadcast, url, this)
+            ARouter.getInstance().build(RouterUrlCommon.liveBroadcast)
+                .withString("url", url)
+                .withString("liveId", id)
+                .withTransition(R.anim.leftin, R.anim.leftout)
+                .navigation(mContext)
         } else {
             XXPermissions.with(this).permission(permissions).request(object : OnPermissionCallback {
                 override fun onGranted(permissions: List<String>, all: Boolean) {
                     if (all) { // 全部获取权限成功
-                        JumpUtil.jumpActivityWithUrl(
-                            RouterUrlCommon.liveBroadcast,
-                            url,
-                            mContext
-                        )
+                        ARouter.getInstance().build(RouterUrlCommon.liveBroadcast)
+                            .withString("url", url)
+                            .withString("liveId", id)
+                            .withTransition(R.anim.leftin, R.anim.leftout)
+                            .navigation(mContext)
                     } else { // 部分获取权限成功
                         // 需要弹框处理
                         showTipDialog()

+ 9 - 0
livebroadcast/src/main/java/com/yingyang/livebroadcast/entity/liveIncrBean.kt

@@ -0,0 +1,9 @@
+package com.yingyang.livebroadcast.entity
+
+/**
+ * 直播统计心跳上报
+ */
+class liveIncrBean {
+    var liveId: String = ""//直播间id
+    var appUserId: String = ""//用户id
+}

+ 6 - 0
livebroadcast/src/main/java/com/yingyang/livebroadcast/net/LivebroadcastApiService.kt

@@ -33,4 +33,10 @@ interface LivebroadcastApiService {
      */
     @POST("live/reservation")
     suspend fun reservationLive(@Body requestBody: RequestBody): BaseResp<Unit>
+
+    /**
+     * 直播统计心跳上报
+     */
+    @POST("live/incr")
+    suspend fun liveIncr(@Body requestBody: RequestBody): BaseResp<Unit>
 }