sendAndWaitAck method
发送消息并等待 im.message.send.ack / event_error
Implementation
Future<void> sendAndWaitAck(
Map<String, dynamic> payload, {
Duration timeout = const Duration(seconds: 15),
}) async {
final msgId = payload['msg_id']?.toString() ?? '';
if (msgId.isEmpty) {
throw GoChatException('msg_id 不能为空');
}
final completer = Completer<void>();
_pendingAcks[msgId] = completer;
await emit(WsEvents.messageSend, payload);
try {
await completer.future.timeout(timeout, onTimeout: () {
_pendingAcks.remove(msgId);
throw GoChatException('发送消息超时');
});
} catch (e) {
_pendingAcks.remove(msgId);
rethrow;
}
}