sendMessage method
发送控制消息
message 要发送的消息
callback 接收响应的回调
Implementation
@override
void sendMessage(WebRtcHttpMessage message, OnReceiveMessageCallback? callback) {
if (_connection == null) {
print('[$_tag] Connection is null');
return;
}
try {
// 1. 基于 requestId && apiUrl 缓存 callback
final key = _makeKey(message.requestId, message.apiUrl);
if (callback != null) {
_callbackCache[key] = callback;
print('[$_tag] Cached callback for key: $key');
}
// 2. WebRtcHttpMessage 转为 JSON 字符串
final jsonMessage = message.toJsonString();
print('[$_tag] JSON message: $jsonMessage');
// 3. 按照格式封装发送
// 3.1 封装为 ALocalSample
final msg = proto.ALocalSample()
..cmd = proto.SampleCmd.CMD_HTTP_REQUEST.value
..time = DateTime.now().millisecondsSinceEpoch.toString()
..data = utf8.encode(jsonMessage);
// 3.2 封装为 RtcData
final rtcData = RtcData(
cmdType: RtcData.CMD_TYPE_TEST,
data: Uint8List.fromList(msg.writeToBuffer()),
);
final bytes = rtcData.serialize();
// 3.3 调用 WebrtcConnection.sendControlMsg()
_connection!.sendControlMsg(bytes);
print(
'[$_tag] Sent message: requestId=${message.requestId}, apiUrl=${message.apiUrl}, bytes length=${bytes.length}');
} catch (e) {
print('[$_tag] Failed to send message: $e');
final key = _makeKey(message.requestId, message.apiUrl);
_callbackCache.remove(key);
}
}