main_booker.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import time
  2. import json
  3. import argparse
  4. from vs_types import GroupConfig
  5. from gco_wrapper import GCOWrapper
  6. from logger_setup import setup_app_logger
  7. from booker_builtin import BuiltinBookerGCO
  8. from booker_order import OrderBookerGCO
  9. def load_config(path):
  10. with open(path, "r", encoding="utf-8") as f:
  11. return json.load(f)
  12. def main():
  13. # ===== 1️⃣ 命令行参数 =====
  14. parser = argparse.ArgumentParser(description="Booker Runner")
  15. parser.add_argument(
  16. "-c", "--config",
  17. type=str,
  18. required=True,
  19. help="Path to config.json"
  20. )
  21. args = parser.parse_args()
  22. # ===== 2️⃣ 日志 =====
  23. app_logger = setup_app_logger("Booker")
  24. app_logger.info("Booker Logger is ready!")
  25. # ===== 3️⃣ 加载配置 =====
  26. cfg_data = load_config(args.config)
  27. redis_conf = cfg_data.get('redis')
  28. groups_conf = cfg_data.get('group_list')
  29. wrappers = []
  30. # ===== 4️⃣ 启动逻辑 =====
  31. for item in groups_conf:
  32. cfg = GroupConfig.from_json(item)
  33. if not cfg.enable:
  34. continue
  35. if cfg.booker.account_source == "order":
  36. gco_class = OrderBookerGCO
  37. app_logger.info(f"[{cfg.identifier}] Mode: ORDER (Bound)")
  38. else:
  39. gco_class = BuiltinBookerGCO
  40. app_logger.info(f"[{cfg.identifier}] Mode: BUILT-IN (Unbound)")
  41. wrapper = GCOWrapper(
  42. gco_class=gco_class,
  43. gco_cfg=cfg,
  44. redis_conf=redis_conf
  45. )
  46. wrapper.load()
  47. wrapper.start()
  48. wrappers.append(wrapper)
  49. app_logger.info(f"Started {len(wrappers)} Booker groups.")
  50. # ===== 5️⃣ 保持运行 =====
  51. try:
  52. while True:
  53. time.sleep(1)
  54. except KeyboardInterrupt:
  55. app_logger.info("Shutting down...")
  56. for wrapper in wrappers:
  57. wrapper.stop()
  58. if __name__ == "__main__":
  59. main()