handleRawMessage method
处理从 DataChannel 接收到的原始字节数据 此方法应该在 DataChannelObserver.onMessage 中调用
Implementation
void handleRawMessage(Uint8List bytes) {
try {
// 1. 解析 RtcData
final rtcData = RtcData.deserialize(bytes);
if (rtcData.magic != RtcData.MAGIC) {
print('[$_tag] Invalid RtcData magic');
return;
}
// 2. 解析 ALocalSample
final sample = proto.ALocalSample.fromBuffer(rtcData.data);
// 3. 检查是否是 HTTP 响应
if (sample.cmd == proto.SampleCmd.CMD_HTTP_RESPONSE.value ||
sample.cmd == proto.SampleCmd.CMD_HTTP_REQUEST.value) {
// 4. 解析 WebRtcHttpMessage
final jsonStr = utf8.decode(sample.data);
final httpMessage = WebRtcHttpMessage.fromJsonString(jsonStr);
// 5. 调用 receiveMessage
receiveMessage(httpMessage);
} else {
print('[$_tag] Received non-HTTP message, cmd=${sample.cmd}');
}
} catch (e) {
print('[$_tag] Failed to handle raw message: $e');
}
}