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, ); }