56 lines
1.8 KiB
Python
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()
|
|
|