Surface/lib/services/rtc.dart
2025-05-07 00:48:34 +08:00

52 lines
1.4 KiB
Dart

import 'package:dio/dio.dart';
import 'package:island/models/chat.dart';
import 'package:island/models/user.dart';
import 'package:tencent_rtc_sdk/trtc_cloud.dart';
import 'package:tencent_rtc_sdk/trtc_cloud_def.dart';
import 'package:tencent_rtc_sdk/trtc_cloud_listener.dart';
Future<TRTCCloud> _getTRTCCloud() async {
return TRTCCloud.sharedInstance();
}
bool currentlyJoined = false;
Future<void> joinRealtimeChat(
Dio apiClient,
SnChatRoom chat,
SnAccount user,
) async {
final resp = await apiClient.get('/chat/realtime/${chat.id}');
final data = ChatRealtimeJoinResponse.fromJson(resp.data);
final config = data.config;
final cloud = await _getTRTCCloud();
cloud.setConsoleEnabled(true);
cloud.registerListener(
TRTCCloudListener(
onRemoteUserEnterRoom: (userId) {
print('onRemoteUserEnterRoom: $userId');
},
onRemoteUserLeaveRoom: (userId, reason) {
print('onRemoteUserLeaveRoom: $userId, $reason');
},
),
);
cloud.enterRoom(
TRTCParams(
sdkAppId: config['app_id'],
userId: user.name,
userSig: data.token,
roomId: chat.id,
role: TRTCRoleType.anchor,
),
TRTCAppScene.voiceChatRoom,
);
cloud.startLocalAudio(TRTCAudioQuality.speech);
currentlyJoined = true;
}
Future<void> leaveRealtimeChat(SnChatRoom chat) async {
final cloud = await _getTRTCCloud();
cloud.exitRoom();
}