onMessage method

  1. @override
void onMessage(
  1. RTCDataChannelMessage message
)
override

Implementation

@override
void onMessage(RTCDataChannelMessage message) {
  //call ControlMessageHandler
  print('[DataChannelObserver~${connection.connectionId}] onMessage: ${message.isBinary ? "binary data" : message.text}');
  if (message.isBinary && message.binary != null) {
    // _messageHandler.handleRawMessage(Uint8List.fromList(message.binary!));
    final rtcData = RtcData.deserialize(message.binary);
    if (rtcData.magic != RtcData.MAGIC) {
      print("rtcData.magic != RtcData.MAGIC");
    } else if (rtcData.version != RtcData.VERSION) {
      print("version error:${rtcData.version}");
    } else {

      ALocalSampleOuterClass.ALocalSample sample = ALocalSampleOuterClass.ALocalSample.fromBuffer(rtcData.data);
      if (sample.hasCmd() == false) {
        print("sample has n't cmd\r\n");
        return ;
      }
      int cmdValue = sample.cmd;
      print("the cmdValue is ${cmdValue}");
      if (cmdValue == ALocalSampleOuterClass.SampleCmd.CMD_HTTP_RESPONSE.value) {
        String jsonString = utf8.decode(Uint8List.fromList(sample.data.toList()));
        print("onMessage : ${jsonString}");
        final httpMessage = WebRtcHttpMessage.fromJsonString(jsonString);
        for (final message in WebrtcManager.messagesHandlers) {
          message.receiveMessage(httpMessage);
        }
      }
    }
  } else if (message.text.isNotEmpty) {
    // 尝试将文本消息作为 JSON 解析
    try {
      final httpMessage = WebRtcHttpMessage.fromJsonString(message.text);
      // _messageHandler.receiveMessage(httpMessage);
      for (final message in WebrtcManager.messagesHandlers) {
        message.receiveMessage(httpMessage);
      }
    } catch (e) {
      print('[WebRTCClient] Failed to parse text message: $e');
    }
  }
}