handleRawMessage method

void handleRawMessage(
  1. Uint8List bytes
)

处理从 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');
  }
}