52 lines
1.4 KiB
Dart
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();
|
|
}
|