Example #1
0
        /// <summary>
        /// 启动应用程序
        /// </summary>
        private async Task LaunchApplication()
        => await Task.WhenAll(
            Task.Delay(1000),
            Task.Factory.StartNew(() =>
        {
            this.UpdateProgressAsync("开始初始化 AutoMap ...");
            this.InitAutoMap();

            this.UpdateProgressAsync("开始注册服务到依赖注入容器 ...");
            DIContainerHelper.RegistServicesFromConfig();

            this.UpdateProgressAsync("创建主窗口 ...");
            MainForm mainForm = (MainForm)this.Invoke(new Func <MainForm>(() => new MainForm()));
            DIContainerHelper.RegisteInstanceAsType <MainForm, MainForm>(mainForm);
            foreach (var message in mainForm.Initialize())
            {
                this.UpdateProgressAsync(message);
            }

            this.UpdateProgressAsync("注册自选股票窗口 ...");
            this.RegisterSingleToolDockFormInstance <SelfSelectStockForm>(mainForm);

            this.UpdateProgressAsync("注册热门股票窗口 ...");
            this.RegisterSingleToolDockFormInstance <HotStockDockForm>(mainForm);

            this.UpdateProgressAsync("注册搜索股票窗口 ...");
            this.RegisterSingleToolDockFormInstance <SearchStockDockForm>(mainForm);

            this.UpdateProgressAsync("注册图表文档窗口 ...");
            this.RegisterDocumentDockForm <ChartDocumentForm>();

            this.UpdateProgressAsync("注册最近行情窗口 ...");
            this.RegisterDocumentDockForm <RecentQuotaDocumentForm>();

            this.UpdateProgressAsync("注册行情仓库窗口 ...");
            this.RegisterDocumentDockForm <QuotaRepositoryDocumentForm>();

            this.UpdateProgressAsync("注册实时行情窗口 ...");
            this.RegisterSingleToolDockFormInstance <CurrentQuotaForm>(mainForm);

            this.UpdateProgressAsync("注册大盘指数窗口 ...");
            this.RegisterSingleToolDockFormInstance <MarketQuotaForm>(mainForm);

            this.UpdateProgressAsync("注册公司信息窗口 ...");
            this.RegisterSingleToolDockFormInstance <CompanyInfoForm>(mainForm);

            this.UpdateProgressAsync("注册最近交易窗口 ...");
            this.RegisterSingleToolDockFormInstance <RecentTradeForm>(mainForm);

            this.UpdateProgressAsync($"密封服务容器 ...");
            DIContainerHelper.Build();

            this.UpdateProgressAsync($"绑定 MQ 发布者 ...");
            MQHelper.BindPublisher();
        }));
Example #2
0
        public void MQHelperUnitTests()
        {
            int counter = 0;

            Console.WriteLine("绑定发布者 ...");
            MQHelper.BindPublisher();

            Console.WriteLine("订阅主题 ...");
            var handler = MQHelper.Subscribe("测试订阅者", new[] { "1" }, (source, topic, message) =>
            {
                counter++;
                Console.WriteLine($"收到 {source} 发来的消息:{topic} - {message}");
            });

            // 发布者和订阅者任何一端断开或重连,另一端不需要任何操作,可以继续收发
            MQHelper.Publish("测试发布者", "1.1", "股票打新咯!!!-1");

            MQHelper.DisconnectPublisher();
            Thread.Sleep(100);
            MQHelper.Publish("测试发布者", "1.2", "股票打新咯!!!-2");
            Thread.Sleep(100);

            MQHelper.BindPublisher();
            Thread.Sleep(100);
            MQHelper.Publish("测试发布者", "1.3", "股票打新咯!!!-3");
            Thread.Sleep(100);

            handler.Disconnect();
            Thread.Sleep(100);
            MQHelper.Publish("测试发布者", "1.4", "股票打新咯!!!-4");
            Thread.Sleep(100);

            Thread.Sleep(100);
            handler.Connect();
            Thread.Sleep(100);
            MQHelper.Publish("测试发布者", "1.5", "股票打新咯!!!-5");

            // 自动过滤自己发布的消息,避免消息循环
            Thread.Sleep(100);
            MQHelper.Publish("测试订阅者", "1.6", "股票打新咯!!!-6");
            Thread.Sleep(100);

            // 释放订阅者
            handler.Dispose();

            Thread.Sleep(100);
            MQHelper.Publish("测试订阅者", "1.7", "股票打新咯!!!-7");

            Console.WriteLine($"测试结束,计数器: {counter}");

            // 仅收到 1、3、5 消息即为正常
            Assert.AreEqual(3, counter);
        }