diff --git a/lib/controller/message/call_controller.dart b/lib/controller/message/call_controller.dart index 0db4d5a..6114014 100644 --- a/lib/controller/message/call_controller.dart +++ b/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; + 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 = { - '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修改现有消息)