| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- from __future__ import annotations
- import argparse
- import asyncio
- import json
- from . import __version__
- from .config import Config
- from .relay_server import RelayServer
- from .relay_client import RelayManager
- from .transparent_edge import TransparentEdge
- def build_parser() -> argparse.ArgumentParser:
- parser = argparse.ArgumentParser(prog="mynetspeeder")
- parser.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
- sub = parser.add_subparsers(dest="command", required=True)
- relay = sub.add_parser("relay", help="在子节点 VPS 上启动 relay")
- relay.add_argument("--listen-host", default="0.0.0.0")
- relay.add_argument("--listen-port", type=int, default=9009)
- relay.add_argument("--token", required=True)
- relay.set_defaults(handler=handle_relay)
- edge = sub.add_parser("edge", help="在当前主 VPS 上启动透明 direct 出站加速")
- edge.add_argument("--listen-host", default="127.0.0.1")
- edge.add_argument("--listen-port", type=int, default=19080)
- edge.add_argument("--config", required=True)
- edge.set_defaults(handler=handle_edge)
- probe = sub.add_parser("probe", help="查看子节点探测与在线状态")
- probe.add_argument("--config", required=True)
- probe.add_argument("--once", action="store_true")
- probe.set_defaults(handler=handle_probe)
- return parser
- def handle_relay(args: argparse.Namespace) -> int:
- asyncio.run(RelayServer(args.token).start(args.listen_host, args.listen_port))
- return 0
- def handle_edge(args: argparse.Namespace) -> int:
- asyncio.run(TransparentEdge(args.listen_host, args.listen_port, Config.load(args.config)).start())
- return 0
- def handle_probe(args: argparse.Namespace) -> int:
- async def run_probe() -> None:
- manager = RelayManager(Config.load(args.config))
- await manager.start()
- await asyncio.sleep(2)
- print(json.dumps(manager.snapshot(), ensure_ascii=False, indent=2))
- if not args.once:
- while True:
- await asyncio.sleep(5)
- print(json.dumps(manager.snapshot(), ensure_ascii=False, indent=2))
- asyncio.run(run_probe())
- return 0
- def main() -> int:
- parser = build_parser()
- args = parser.parse_args()
- return args.handler(args)
|