1.进入会议后,将获取token接口调整到第一顺序

2.初始化声网SDK,调用SDK加入会议室
This commit is contained in:
fuenmao 2024-11-26 17:22:29 +08:00
parent 68e8c5c1c9
commit 15321c4d61
4 changed files with 104 additions and 21 deletions

View File

@ -16,7 +16,7 @@ class HomeLogic extends GetxController with RequestToolMixin {
}
///
void doHttpGetMeetingRoomList(int pageIndex, int pageSize) async {
Future<void> doHttpGetMeetingRoomList(int pageIndex, int pageSize) async {
BaseStructureResult<MeetingRoomItem> res = await getClient().getMeetingRoomList(pageIndex,pageSize);
if(null != res.data){
if(state.pageIndex == 1){

View File

@ -26,7 +26,7 @@ class LoginLogic extends GetxController with RequestToolMixin {
}
///
void doHttpLogin() async {
Future<void> doHttpLogin() async {
if(state.userNameController.text.isEmpty){
ToastUtils.showError("请输入账号");
}else if(state.passwordController.text.isEmpty){
@ -46,7 +46,7 @@ class LoginLogic extends GetxController with RequestToolMixin {
}
///
void doHttpAnonymousLogin() async {
Future<void> doHttpAnonymousLogin() async {
if(state.meetingCodeController.text.isEmpty){
ToastUtils.showError("请输入会议号");
}else if(state.meetingCodeController.text.length != 8){

View File

@ -1,6 +1,9 @@
import 'dart:async';
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:signalr_core/signalr_core.dart';
import 'package:wgshare/common/store/user_store.dart';
@ -16,14 +19,14 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
final MeetingMainState state = MeetingMainState();
@override
void onInit() async {
void onInit() {
super.onInit();
//
var data = Get.arguments;
state.roomNumber.value = data["roomNumber"];
signalRSocket();
doHttpGetMeetingToken();
}
@override
@ -31,24 +34,22 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
super.onClose();
state.memberNameSearchController.dispose();
stopTime();
leaveMeeting();
state.hubConnection.value?.stop();
}
///
/// 1.
/// 2.
/// 3.Token
void mergeFetch() async {
Future<void> mergeFetch() async {
ToastUtils.showLoading();
var results = await Future.wait([
getClient().getMeetingRoomInfo(state.roomNumber.value),
getClient().getMeetingRoomAllUser(state.roomNumber.value),
getClient().getMeetingToken(state.roomNumber.value)]);
getClient().getMeetingRoomAllUser(state.roomNumber.value)]);
doHttpGetMeetingRoomInfo(results[0].data as MeetingRoomInfo);
doHttpGetMeetingRoomAllUser(results[1].data as List<MeetingRoomUser>);
doHttpGetMeetingToken(results[2].data as String);
getMeetingRoomInfo(results[0].data as MeetingRoomInfo);
getMeetingRoomAllUser(results[1].data as List<MeetingRoomUser>);
ToastUtils.dismiss();
}
@ -64,11 +65,11 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
await state.hubConnection.value?.start();
joinChannel();
joinChannelToSocket();
}
///
void joinChannel() async {
Future<void> joinChannelToSocket() async {
await state.hubConnection.value?.invoke("joinChannel", args: [state.roomNumber.value, false, false, false]);
mergeFetch();
}
@ -89,20 +90,24 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
}
///
void doHttpGetMeetingRoomInfo(MeetingRoomInfo meetingRoomInfo) async {
void getMeetingRoomInfo(MeetingRoomInfo meetingRoomInfo) async {
state.meetingRoomInfo.value = meetingRoomInfo;
startTime();
}
///
void doHttpGetMeetingRoomAllUser(List<MeetingRoomUser> meetingRoomUsers) async {
void getMeetingRoomAllUser(List<MeetingRoomUser> meetingRoomUsers) async {
state.users.value = meetingRoomUsers;
state.cacheUsers.value = meetingRoomUsers;
}
/// Token
void doHttpGetMeetingToken(String meetingToken) async {
state.meetingToken.value = meetingToken;
Future<void> doHttpGetMeetingToken() async {
BaseStructureResult<String> res = await getClient().getMeetingToken(state.roomNumber.value);
state.meetingToken.value = res.data!;
initRtc();
signalRSocket();
}
///
@ -141,4 +146,69 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
state.users.value = state.cacheUsers.value;
}
}
/// SDK
Future<void> initRtc() async {
//
if (defaultTargetPlatform == TargetPlatform.android) {
await [Permission.microphone].request();
}
// RtcEngine
state.rctEngine.value = createAgoraRtcEngine();
// RtcEngine channelProfileLiveBroadcasting
await state.rctEngine.value?.initialize(RtcEngineContext(
appId: state.appId,
channelProfile: ChannelProfileType.channelProfileLiveBroadcasting,
));
joinChannelToRtc();
//
state.rctEngine.value?.registerEventHandler(
RtcEngineEventHandler(
//
onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
debugPrint("自己加入会议室ID${connection.localUid}");
},
//
onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) {
debugPrint("远端用户或主播加入会议室用户或主机的ID$remoteUid");
},
//
onUserOffline: (RtcConnection connection, int remoteUid, UserOfflineReasonType reason) {
debugPrint("远端用户或主播离开会议室用户或主机的ID$remoteUid");
},
),
);
}
///
Future<void> joinChannelToRtc() async {
await state.rctEngine.value?.joinChannel(
token: state.meetingToken.value,
channelId: state.roomNumber.value,
uid: 0,
options: const ChannelMediaOptions(
//
autoSubscribeVideo: false,
//
autoSubscribeAudio: true,
//
publishCameraTrack: false,
//
publishMicrophoneTrack: false,
// clientRoleAudience
clientRoleType: ClientRoleType.clientRoleAudience),
);
}
///
Future<void> leaveMeeting() async {
//
await state.rctEngine.value?.leaveChannel();
//
await state.rctEngine.value?.release();
}
}

View File

@ -1,5 +1,6 @@
import 'dart:async';
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:get/get_rx/src/rx_types/rx_types.dart';
@ -30,6 +31,9 @@ class MeetingMainState {
///
late RxString roomNumber = "".obs;
/// token
late RxString meetingToken = "".obs;
///
late Rx<MeetingRoomInfo?> meetingRoomInfo = Rx(null);
@ -45,10 +49,19 @@ class MeetingMainState {
///
late RxList<MeetingRoomUser> cacheUsers = RxList([]);
/// Token
late RxString meetingToken = "".obs;
/// signalR
late RxString serviceUrl = "http://192.168.2.9:5192/session-manage".obs;
late Rx<HubConnection?> hubConnection = Rx(null);
///
final String appId = "4a4f7be64fa1404ebda74784fe9ac381";
late Rx<RtcEngine?> rctEngine = Rx(null);
///
late RxBool isAutoSubscribeVideo = false.obs;
///
late RxBool isAutoSubscribeAudio = false.obs;
///
late RxBool isPublishCameraTrack = false.obs;
///
late RxBool isPublishMicrophoneTrack = false.obs;
}