All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.com.dyte.mobilecorekmm.DyteClient.kt Maven / Gradle / Ivy

package com.dyte.mobilecorekmm

import com.dyte.mobilecorekmm.Utils.printLog

import com.dyte.mobilecorekmm.dependency.DependencyProvider
import com.dyte.mobilecorekmm.meeting.MeetingManager
import com.dyte.mobilecorekmm.meeting.MeetingJoiningCallback
import com.dyte.mobilecorekmm.models.DyteParticipant
import com.dyte.mobilecorekmm.models.MeetingInfo
import com.dyte.mobilecorekmm.network.FeaturesApiService
import com.dyte.mobilecorekmm.network.MeetingSessionApiService
import com.dyte.mobilecorekmm.network.UserDetailsApiService
import com.dyte.mobilecorekmm.network.UserPresetApiService
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.serialization.ExperimentalSerializationApi

@DelicateCoroutinesApi
@ExperimentalSerializationApi
open class DyteMobileClient : DyteClient {
  private lateinit var meetingManager: MeetingManager

  private var meetingRoomEventsListener: DyteMeetingRoomEventsListener? = null
  private var selfEventsListener: DyteSelfEventsListener? = null
  private var participantEventsListener: DyteParticipantEventsListener? = null

  override suspend fun start(meetingInfo: MeetingInfo, coroutineScope: CoroutineScope) {
    "start for ${meetingInfo.roomName}".printLog()

    meetingRoomEventsListener?.onMeetingRoomJoinStarted()

    try {
      "isBTConnected ${DependencyProvider.getPlatformUtils().isBluetoothDeviceConnected()}".printLog()
    } catch (e:Exception) {
      e.printStackTrace()
    }

    try {
      try {
        FeaturesApiService().getFeatures()
      } catch (ignore: Exception) {

      }

      try {
        UserDetailsApiService().getUserDetails(meetingInfo.authToken)
      } catch (ignore: Exception) {

      }

      try {
        UserPresetApiService().loadUserPreset(meetingInfo.roomName, meetingInfo.authToken)
      } catch (ignore: Exception) {

      }

      val meetingSession = MeetingSessionApiService().getMeetingSessionDetails(
        meetingInfo.roomName, meetingInfo.authToken
      )

      meetingManager = DependencyProvider.getMeetingManager()
      meetingManager.startMeeting(
        meetingInfo,
        requireNotNull(meetingSession.data.session.roomNodeLink),
        requireNotNull(selfEventsListener),
        requireNotNull(meetingRoomEventsListener),
        requireNotNull(participantEventsListener),
        object : MeetingJoiningCallback {
          override fun onMeetingJoiningRequestStarted() {

          }

          override fun onMeetingJoiningSuccessful() {
            meetingRoomEventsListener?.onMeetingRoomJoined()
          }

          override fun onMeetingJoiningFailed(e: Exception) {
            e.printStackTrace()
            meetingRoomEventsListener?.onMeetingRoomJoinFailed(e)
          }
        }
      )
    } catch (e: Exception) {
      e.printStackTrace()
      e.message?.printLog()
      meetingRoomEventsListener?.onMeetingRoomJoinFailed(e)
    }
  }

  override fun leaveCall() {
    meetingManager.leaveCall()
  }

  override fun setMeetingRoomEventsListener(meetingRoomEventsListener: DyteMeetingRoomEventsListener) {
    this.meetingRoomEventsListener = meetingRoomEventsListener
  }

  override fun setSelfEventsListener(selfEventsListener: DyteSelfEventsListener) {
    this.selfEventsListener = selfEventsListener
  }

  override fun setParticipantEventsListener(participantEventsListener: DyteParticipantEventsListener) {
    this.participantEventsListener = participantEventsListener
  }

  override fun onPermissionDenied() {
    "onPermissionDenied".printLog()
    meetingRoomEventsListener?.onPermissionDenied()
  }

  override fun onPermissionDeniedAlways() {
    "onPermissionDeniedAlways".printLog()
    meetingRoomEventsListener?.onPermissionDeniedAlways()
  }

  override fun voteForPoll(pollId: String, index: Int) {
    "voteForPoll".printLog()
    meetingManager.voteForPoll(pollId, index)
  }

  override fun getSelf(): DyteParticipant {
    return meetingManager.getSelfParticipant()
  }

  fun onBluetoothDeviceConnected(name: String) {
    "onBluetoothDeviceConnected $name".printLog()
  }

  fun onBluetoothDeviceDisconnected() {
    "onBluetoothDeviceDisconnected".printLog()
  }

  fun onWiredHeadsetConnected(isConnected: Boolean) {
    "onWiredHeadsetConnected $isConnected".printLog()
  }
}

@ExperimentalSerializationApi
@DelicateCoroutinesApi
interface DyteClient {
  suspend fun start(meetingInfo: MeetingInfo, coroutineScope: CoroutineScope)
  fun leaveCall()

  fun getSelf(): DyteParticipant

  fun voteForPoll(pollId: String, index:Int)

  fun setMeetingRoomEventsListener(meetingRoomEventsListener: DyteMeetingRoomEventsListener)
  fun setSelfEventsListener(selfEventsListener: DyteSelfEventsListener)
  fun setParticipantEventsListener(participantEventsListener: DyteParticipantEventsListener)

  fun onPermissionDenied()
  fun onPermissionDeniedAlways()
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy