Files
VibeCoding/webrtc_controller_flutter/lib/utils/control_commands.dart

72 lines
2.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:fixnum/fixnum.dart';
import 'package:webrtc_controller_flutter/proto/control_message.pb.dart';
/// 控制指令构造工具,对应 Android 端 RemoteTouchView 的指令格式。
///
/// 指令通过 DataChannel 以 protobuf 二进制([ControlMessage])发送,
/// 被控端WebRTCControlled的 InputCommandHandler 负责解析执行。
class ControlCommands {
ControlCommands._();
/// 单击指令。坐标 x/y 为相对于屏幕的百分比0.0 ~ 1.0)。
static ControlMessage touch(double x, double y) => ControlMessage(
action: Action.TOUCH,
x: x,
y: y,
);
/// 滑动指令。坐标为相对百分比duration 为毫秒。
static ControlMessage swipe(
double x1,
double y1,
double x2,
double y2,
int durationMs,
) =>
ControlMessage(
action: Action.SWIPE,
x1: x1,
y1: y1,
x2: x2,
y2: y2,
duration: Int64(durationMs),
);
/// 按键指令。action: 0=按下, 1=抬起(对应 Android KeyEvent.ACTION_DOWN/UP
static ControlMessage key(int keyCode, int action) => ControlMessage(
action: Action.KEY,
keyCode: keyCode,
keyAction: action,
);
/// 长按指令。坐标 x/y 为相对于屏幕的百分比0.0 ~ 1.0)。
/// 对应 Android 端 RemoteTouchView.createLongPressCommand。
static ControlMessage longPress(double x, double y) => ControlMessage(
action: Action.LONG_PRESS,
x: x,
y: y,
);
/// 原始 MotionEvent 指令,用于实现“实时跟手”。
/// action: 0=DOWN, 1=UP, 2=MOVE对应 Android MotionEvent.ACTION_XXX
static ControlMessage motionEvent(int action, double x, double y) =>
ControlMessage(
action: Action.MOTION_EVENT,
motionAction: action,
x: x,
y: y,
);
/// 分辨率切换指令。
/// [width] 目标长边/宽度(<=0 表示被控端原生分辨率);
/// [height] 目标高度(<=0 时由被控端按屏幕宽高比计算);
/// [fps] 目标帧率(<=0 表示沿用当前帧率)。
static ControlMessage setResolution(int width, int height, int fps) =>
ControlMessage(
action: Action.SET_RESOLUTION,
width: width,
height: height,
fps: fps,
);
}