Browse Source

feat(call): 集成 RTM 消息处理通话事件

- 添加 dart:typed_data 和 agora_rtm 依赖包
- 实现 RTM 消息监听器注册功能
- 添加处理通话相关 RTM 消息的逻辑
- 支持接收和解析通话接受消息更新远端用户 UID
- 简化发送通话消息的逻辑并移除旧的 IMManager 方式
master
Jolie 3 months ago
parent
commit
35ef3c2c1d
1 changed files with 51 additions and 26 deletions
  1. 77
      lib/controller/message/call_controller.dart

77
lib/controller/message/call_controller.dart

@ -1,6 +1,8 @@
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:agora_rtm/agora_rtm.dart';
import 'package:audioplayers/audioplayers.dart';
import 'package:dating_touchme_app/generated/assets.dart';
import 'package:dating_touchme_app/im/im_manager.dart';
@ -106,6 +108,50 @@ class CallController extends GetxController {
await _callAudioPlayer.play(AssetSource(Assets.audioCall.replaceFirst('assets/', '')));
}
});
// RTM RTM
_registerRtmMessageListener();
}
/// RTM
void _registerRtmMessageListener() {
RTMManager.instance.onMessageEvent = (MessageEvent event) {
_handleRtmMessage(event);
};
print('✅ [CallController] RTM 消息监听器已注册');
}
/// RTM
void _handleRtmMessage(MessageEvent event) {
try {
//
String messageText;
if (event.message is String) {
messageText = event.message as String;
} else if (event.message is Uint8List) {
messageText = utf8.decode(event.message as Uint8List);
} else {
messageText = event.message.toString();
}
final messageData = json.decode(messageText) as Map<String, dynamic>;
print('📥 [CallController] 收到 RTM 消息: $messageData');
//
if (messageData['type'] == 'call_message') {
final event = messageData['event'] as String?;
if (event == 'accept') {
// accept UID
final uid = messageData['uid'];
if (uid != null) {
remoteUid.value = uid is int ? uid : int.tryParse(uid.toString());
print('📞 [CallController] 收到 accept 消息,设置 remoteUid: ${remoteUid.value}');
}
}
}
} catch (e) {
print('❌ [CallController] 处理 RTM 消息失败: $e');
}
}
/// RTC频道
@ -432,33 +478,12 @@ class CallController extends GetxController {
ChatController? chatController,
}) async {
// chatController使
if (chatController != null) {
return await chatController.sendCallMessage(
callType: callType,
callStatus: callStatus,
callDuration: callDuration,
channelId: channelId,
);
}
// IMManager
final callParams = <String, String>{
'callType': callType,
'callStatus': callStatus,
};
if (callDuration != null) {
callParams['callDuration'] = callDuration.toString();
}
if (channelId != null && channelId.isNotEmpty) {
callParams['channelId'] = channelId;
}
final message = await IMManager.instance.sendCustomMessage(
targetUserId,
'call',
callParams,
return await chatController!.sendCallMessage(
callType: callType,
callStatus: callStatus,
callDuration: callDuration,
channelId: channelId,
);
return message != null;
}
/// 使modifyMessage修改现有消息

Loading…
Cancel
Save