Esempio n. 1
0
        private static bool Boot(string[] args)
        {
            Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory;

            bool help = false;
            bool sync = false;
            var  p    = new OptionSet()
            {
                { "sync|s", v => sync = v != null },
                { "h|?|help", v => help = v != null },
            };

            try
            {
                List <string> extra = p.Parse(args);
                if (help)
                {
                    Console.WriteLine(
                        string.Format("无参数:执行MT4Proxy服务\n" +
                                      "s|sync执行当天数据聚合\nh|?|help:显示帮助信息"));
                    return(false);
                }
                var logger = Utils.CommonLog;
                MT4CliWrapper.MT4Wrapper.OnLog += (a) =>
                {
                    logger.Info(a);
                };
                if (Environment.Is64BitProcess)
                {
                    logger.Warn("警告,在64位环境启动");
                }
                else
                {
                    logger.Info("启动环境是32位");
                }
                logger.Info("准备启动MT4池");
                Poll.StartPoll();
                ServerContainer.ForkServer <DockServer>();
                ServerContainer.ForkServer <TimeServer>();
                if (sync)
                {
                    ServerContainer.ForkServer <SyncServer>();
                    var syncer = new SyncServer();
                    syncer.SyncSummary();
                    syncer.SyncEquity();
#if TESTENV
                    syncer.SyncMaster(30, 500000, 599999);
#else
                    syncer.SyncMaster(30, 851000, 859999);
                    syncer.SyncMaster(360, 850001, 850999, "contest_master", 100,
                                      new Func <int, double>((mt4) =>
                    {
                        using (var api = Poll.New())
                        {
                            var equity  = 0.0;
                            var balance = 0.0;
                            var free    = 0.0;
                            api.GetEquity(mt4, ref equity, ref free, ref balance);
                            return(balance / 10000);
                        }
                    }
                                                             ));
#endif
                    Poll.StopPoll();
                    return(false);
                }
                ServerContainer.ForkServer <PumpServer>();
                logger.Info("准备启动Zmq监听服务");
                ServerContainer.ForkServer <ZmqServer>();
                logger.Info("初始工作已完成");
                return(true);
            }
            catch (OptionException e)
            {
                Console.Write("参数格式不正确: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("请使用 --help 命令获取更多信息.");
                return(false);
            }
            catch (Exception e)
            {
                var logger = Utils.CommonLog;
                logger.Error(string.Format("SyncError:{0}\n{1}", e.Message, e.StackTrace));
            }
            return(false);
        }