vita_gamepad/vitapad/cli.py

56 lines
1.8 KiB
Python

from __future__ import annotations
import argparse
import sys
from vitapad.backends import create_backend
from vitapad.receiver import Receiver
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
prog="vitapad", description="将 PSVita 输入转换为电脑虚拟游戏手柄"
)
parser.add_argument(
"--backend", choices=("auto", "windows", "macos", "debug"), default="auto"
)
parser.add_argument("--bind", default="0.0.0.0", help="UDP 监听地址")
parser.add_argument("--port", type=int, default=5000, help="输入端口")
parser.add_argument(
"--discovery-port", type=int, default=5001, help="自动发现广播端口"
)
parser.add_argument("--allow", metavar="IP", help="只接受指定 PSVita IP")
parser.add_argument(
"--timeout-ms", type=int, default=300, help="断线释放按键时间"
)
return parser
def main() -> None:
args = build_parser().parse_args()
if not 1 <= args.port <= 65535 or not 1 <= args.discovery_port <= 65535:
raise SystemExit("端口必须在 1 到 65535 之间")
if not 50 <= args.timeout_ms <= 10000:
raise SystemExit("--timeout-ms 必须在 50 到 10000 之间")
try:
backend = create_backend(args.backend)
receiver = Receiver(
backend=backend,
bind=args.bind,
port=args.port,
discovery_port=args.discovery_port,
allow=args.allow,
timeout_ms=args.timeout_ms,
)
receiver.run()
except KeyboardInterrupt:
print("\n已停止")
except (OSError, RuntimeError, ValueError) as exc:
print(f"错误: {exc}", file=sys.stderr)
raise SystemExit(1) from exc
if __name__ == "__main__":
main()