feat: 控制指令消息改为protobuf二进制
This commit is contained in:
@@ -3,6 +3,7 @@ import 'package:flutter_webrtc/flutter_webrtc.dart';
|
||||
|
||||
import '../config/ice_servers.dart';
|
||||
import '../models/signal_message.dart';
|
||||
import '../proto/control_message.pb.dart';
|
||||
import '../signaling/signaling_client.dart';
|
||||
|
||||
/// 封装 WebRTC 连接逻辑(对应 Android 端 WebRtcClient)。
|
||||
@@ -105,8 +106,19 @@ class WebRtcController {
|
||||
void _setupDataChannel(RTCDataChannel channel) {
|
||||
channel.onMessage = (RTCDataChannelMessage message) {
|
||||
// 处理来自被控端的消息(本控制端主要发送,此处仅做日志记录)。
|
||||
// ignore: avoid_print
|
||||
print('DataChannel message: ${message.text}');
|
||||
if (message.isBinary) {
|
||||
try {
|
||||
final command = ControlMessage.fromBuffer(message.binary);
|
||||
// ignore: avoid_print
|
||||
print('DataChannel message: ${command.action}');
|
||||
} catch (e) {
|
||||
// ignore: avoid_print
|
||||
print('DataChannel message decode failed: $e');
|
||||
}
|
||||
} else {
|
||||
// ignore: avoid_print
|
||||
print('DataChannel text message: ${message.text}');
|
||||
}
|
||||
};
|
||||
channel.onDataChannelState = (RTCDataChannelState state) {
|
||||
// ignore: avoid_print
|
||||
@@ -171,11 +183,11 @@ class WebRtcController {
|
||||
await _pc?.addCandidate(candidate);
|
||||
}
|
||||
|
||||
/// 通过 DataChannel 发送控制指令(JSON 字符串)。
|
||||
void sendControlCommand(String commandJson) {
|
||||
/// 通过 DataChannel 发送控制指令(protobuf 二进制)。
|
||||
void sendControlCommand(ControlMessage command) {
|
||||
if (_dataChannel?.state == RTCDataChannelState.RTCDataChannelOpen) {
|
||||
debugPrint('WebRtcController: Sending command -> $commandJson');
|
||||
_dataChannel!.send(RTCDataChannelMessage(commandJson));
|
||||
debugPrint('WebRtcController: Sending command -> ${command.action}');
|
||||
_dataChannel!.send(RTCDataChannelMessage.fromBinary(command.writeToBuffer()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user