main_booker.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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=False,
  19. default="config/config.json",
  20. help="Path to config.json"
  21. )
  22. args = parser.parse_args()
  23. # ===== 2️⃣ 日志 =====
  24. app_logger = setup_app_logger("Booker")
  25. app_logger.info("Booker Logger is ready!")
  26. # ===== 3️⃣ 加载配置 =====
  27. cfg_data = load_config(args.config)
  28. redis_conf = cfg_data.get('redis')
  29. groups_conf = cfg_data.get('group_list')
  30. wrappers = []
  31. # ===== 4️⃣ 启动逻辑 =====
  32. for item in groups_conf:
  33. cfg = GroupConfig.from_json(item)
  34. if not cfg.enable:
  35. continue
  36. if cfg.booker.account_source == "order":
  37. gco_class = OrderBookerGCO
  38. app_logger.info(f"[{cfg.identifier}] Mode: ORDER (Bound)")
  39. else:
  40. gco_class = BuiltinBookerGCO
  41. app_logger.info(f"[{cfg.identifier}] Mode: BUILT-IN (Unbound)")
  42. wrapper = GCOWrapper(
  43. gco_class=gco_class,
  44. gco_cfg=cfg,
  45. redis_conf=redis_conf
  46. )
  47. wrapper.load()
  48. wrapper.start()
  49. wrappers.append(wrapper)
  50. app_logger.info(f"Started {len(wrappers)} Booker groups.")
  51. # ===== 5️⃣ 保持运行 =====
  52. try:
  53. while True:
  54. time.sleep(1)
  55. except KeyboardInterrupt:
  56. app_logger.info("Shutting down...")
  57. for wrapper in wrappers:
  58. wrapper.stop()
  59. if __name__ == "__main__":
  60. main()