#!/usr/bin/env python3
"""
VNPY RPC 交易核心服务启动脚本
启动 vnpy 交易核心，开启 RPC 服务端，供 VNPY Web Trader 连接

按照 vnpy 官方标准双进程架构：
- 这个进程：交易核心 + RPC 服务端 (端口 2018/4102)
- 另一个进程：VNPY Web Trader (端口 8000)
"""

from vnpy.trader.event_engine import EventEngine
from vnpy.trader.main_engine import MainEngine
from vnpy.rpc import RpcServer

# 导入你的 gateway
from vnpy_ctp import CtpGateway
# from vnpy_tap import TapGateway
# from vnpy_ib import IbGateway
# 其他 gateway 根据需要添加

# 导入你的策略应用
from vnpy_ctastrategy import CtaStrategyApp
# from vnpy_portfoliostrategy import PortfolioStrategyApp
# from vnpy_spreadtrading import SpreadTradingApp


def main():
    # 创建事件引擎和主引擎
    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)
    
    # 添加 gateway
    main_engine.add_gateway(CtpGateway)
    # 如果你有其他gateway，在这里添加
    # main_engine.add_gateway(TapGateway)
    
    # 添加策略应用
    main_engine.add_app(CtaStrategyApp)
    # 如果需要其他应用，在这里添加
    # main_engine.add_app(PortfolioStrategyApp)
    
    # 启动 RPC 服务端
    # 请求端口: 2018，订阅端口: 4102
    rpc_server = RpcServer(
        main_engine,
        ("0.0.0.0", 2018),
        ("0.0.0.0", 4102)
    )
    
    print("=" * 50)
    print("VNPY RPC 交易核心服务启动")
    print(f"RPC 请求地址: tcp://0.0.0.0:2018")
    print(f"RPC 订阅地址: tcp://0.0.0.0:4102")
    print("请确保已经在 vnpy 配置中配置好你的 gateway")
    print("=" * 50)
    
    # 启动 RPC 服务
    rpc_server.start()
    
    # 保持进程运行
    print("RPC 服务已启动，按 Ctrl+C 退出")
    try:
        input()
    except (KeyboardInterrupt, EOFError):
        pass
    
    print("RPC 服务退出")


if __name__ == "__main__":
    main()
