sendMessage method

  1. @override
void sendMessage(
  1. WebRtcHttpMessage message,
  2. OnReceiveMessageCallback? callback
)
override

发送控制消息 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);
  }
}