public DownloaderAgentController(PortalDbContext dbContext, IMq eventBus,
                                  ILogger <DownloaderAgentController> logger)
 {
     _logger    = logger;
     _dbContext = dbContext;
     _mq        = eventBus;
 }
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="eventBus">消息队列接口</param>
 /// <param name="options"></param>
 /// <param name="statisticsStore">统计存储接口</param>
 /// <param name="logger">日志接口</param>
 public StatisticsCenter(IMq eventBus, SpiderOptions options, IStatisticsStore statisticsStore,
                         ILogger <StatisticsCenter> logger)
 {
     _options         = options;
     _mq              = eventBus;
     _statisticsStore = statisticsStore;
     _logger          = logger;
 }
Example #3
0
 public SpiderContainerController(PortalDbContext dbContext,
                                  IMq eventBus,
                                  ILogger <SpiderController> logger)
 {
     _logger    = logger;
     _dbContext = dbContext;
     _mq        = eventBus;
 }
 public SpiderParameters(IMq mq,
                         IStatisticsService statisticsService,
                         SpiderOptions options,
                         IServiceProvider services)
 {
     Mq = mq;
     StatisticsService = statisticsService;
     SpiderOptions     = options;
     ServiceProvider   = services;
 }
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="eventBus">消息队列</param>
 /// <param name="downloaderAgentStore">下载器代理存储</param>
 /// <param name="options">系统选项</param>
 /// <param name="logger">日志接口</param>
 protected DownloadAgentRegisterCenterBase(
     IMq eventBus,
     IDownloaderAgentStore downloaderAgentStore,
     SpiderOptions options,
     ILogger logger)
 {
     Mq = eventBus;
     DownloaderAgentStore = downloaderAgentStore;
     Logger  = logger;
     Options = options;
 }
Example #6
0
        /// <summary>
        /// 构造方法
        /// </summary>
        /// <param name="options">下载器代理选项</param>
        /// <param name="spiderOptions"></param>
        /// <param name="eventBus">消息队列</param>
        /// <param name="networkCenter">网络中心</param>
        /// <param name="logger">日志接口</param>
        protected DownloaderAgentBase(
            DownloaderAgentOptions options,
            SpiderOptions spiderOptions,
            IMq eventBus,
            NetworkCenter networkCenter,
            ILogger logger)
        {
            _spiderOptions          = spiderOptions;
            _mq                     = eventBus;
            _options                = options;
            Framework.NetworkCenter = networkCenter;

            Logger = _mq is ThroughMessageQueue ? null : logger;
        }
Example #7
0
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IMq mq, IEventStore eventStore)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();

            mq.Consume <RecipeActionEvent>("recipe.*", (recipe, routingKey) =>
            {
                // TODO: map to own events here
                var a = routingKey switch
                {
                    "recipe.created" => eventStore.Publish("recipeCreated", recipe),
                    "recipe.updated" => eventStore.Publish("recipeUpdated", recipe),
                    "recipe.deleted" => eventStore.Publish("recipeDeleted", recipe),
                    _ => throw new InvalidOperationException("Can't find suitable action")
                };

                return(true);
            });
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="mq">消息队列</param>
 /// <param name="downloaderAgentStore">下载器代理存储</param>
 /// <param name="options">系统选项</param>
 /// <param name="logger">日志接口</param>
 public DefaultDownloadAgentRegisterCenter(IMq mq, IDownloaderAgentStore downloaderAgentStore, SpiderOptions options,
                                           ILogger <DefaultDownloadAgentRegisterCenter> logger) : base(mq, downloaderAgentStore, options, logger)
 {
 }
Example #9
0
        static void Main()
        {
            VirtualRoot.SetOut(new ConsoleOut());
            NTMinerConsole.MainUiOk();
            NTMinerConsole.DisbleQuickEditMode();
            DevMode.SetDevMode();

            Windows.ConsoleHandler.Register(Exit);

            string thisServerAddress = ServerRoot.HostConfig.ThisServerAddress;

            Console.Title = $"{nameof(ServerAppType.WsServer)}_{thisServerAddress}";
            // 用本节点的地址作为队列名,消费消息时根据路由键区分消息类型
            string queue        = $"{nameof(ServerAppType.WsServer)}.{thisServerAddress}";
            string durableQueue = queue + MqKeyword.DurableQueueEndsWith;

            AbstractMqMessagePath[] mqMessagePaths = new AbstractMqMessagePath[] {
                new ReadOnlyUserMqMessagePath(durableQueue),
                new CalcConfigMqMessagePath(queue),
                new MinerSignMqMessagePath(queue),
                new WsServerNodeMqMessagePath(queue),
                new OperationMqMessagePath(queue),
                new MinerClientMqMessagePath(queue, thisServerAddress),
                new ClientTestIdMqMessagePath(queue)
            };
            if (!MqRedis.Create(ServerAppType.WsServer, mqMessagePaths, out IMqRedis mqRedis))
            {
                NTMinerConsole.UserError("启动失败,无法继续,因为服务器上下文创建失败");
                return;
            }
            IRedis redis = mqRedis;
            IMq    mq    = mqRedis;

            MinerClientMqSender    = new MinerClientMqSender(mq);
            SpeedDataRedis         = new SpeedDataRedis(redis);
            WsServerNodeRedis      = new WsServerNodeRedis(redis);
            OperationMqSender      = new OperationMqSender(mq);
            UserMqSender           = new UserMqSender(mq);
            _wsServerNodeMqSender  = new WsServerNodeMqSender(mq);
            WsServerNodeAddressSet = new WsServerNodeAddressSet(WsServerNodeRedis, _wsServerNodeMqSender);
            var minerRedis      = new MinerDataRedis(redis);
            var userRedis       = new ReadOnlyUserDataRedis(redis);
            var calcConfigRedis = new CalcConfigDataRedis(redis);

            VirtualRoot.StartTimer();
            // 构造函数中异步访问redis初始化用户列表,因为是异步的所以提前构造
            UserSet               = new ReadOnlyUserSet(userRedis);
            MinerSignSet          = new MinerSignSet(minerRedis);
            _wsServer             = new SharpWsServerAdapter(ServerRoot.HostConfig);
            CalcConfigSet         = new ReadOnlyCalcConfigSet(calcConfigRedis);
            MinerClientSessionSet = new MinerClientSessionSet(_wsServer.MinerClientWsSessions);
            MinerStudioSessionSet = new MinerStudioSessionSet(_wsServer.MinerStudioWsSessions);
            _started              = _wsServer.Start();
            if (!_started)
            {
                NTMinerConsole.UserError("启动失败,无法继续,因为_wsServer启动失败");
                return;
            }
            VirtualRoot.RaiseEvent(new WebSocketServerStatedEvent());

            Console.ReadKey(true);
            Exit();
        }
Example #10
0
 public WsServerNodeMqSender(IMq mq)
 {
     _mq = mq;
 }
Example #11
0
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="options">下载器代理选项</param>
 /// <param name="spiderOptions"></param>
 /// <param name="mq">消息队列</param>
 /// <param name="networkCenter">网络中心</param>
 /// <param name="logger">日志接口</param>
 public DefaultDownloaderAgent(DownloaderAgentOptions options,
                               SpiderOptions spiderOptions, IMq mq, NetworkCenter networkCenter,
                               ILogger <DefaultDownloaderAgent> logger) : base(options, spiderOptions, mq, networkCenter, logger)
 {
 }
Example #12
0
 public OperationMqSender(IMq mq)
 {
     _mq = mq;
 }
Example #13
0
        static void Main()
        {
            VirtualRoot.SetOut(new ConsoleOut());
            NTMinerConsole.MainUiOk();
            NTMinerConsole.DisbleQuickEditMode();
            DevMode.SetDevMode();

            Windows.ConsoleHandler.Register(Exit);

            try {
                bool mutexCreated;
                try {
                    // 锁名称上带上本节点的端口号,从而允许一个服务器上运行多个WebApiServer节点,这在软升级服务端程序时有用。
                    // 升级WebApiServer程序的时候步骤是:
                    // 1,在另一个端口启动新版本的程序;
                    // 2,让Widnows将来自旧端口的所有tcp请求转发到新端口;
                    // 3,退出旧版本的程序并更新到新版本;
                    // 4,删除第2步添加的Windows的端口转发;
                    // 5,退出第1步运行的节点;
                    // TODO:实现软升级策略
                    _sMutexApp = new Mutex(true, $"NTMinerServicesMutex{ServerRoot.HostConfig.GetServerPort().ToString()}", out mutexCreated);
                }
                catch {
                    mutexCreated = false;
                }
                if (mutexCreated)
                {
                    try {
                        // 用本节点的地址作为队列名,消费消息时根据路由键区分消息类型
                        string queue         = $"{nameof(ServerAppType.WebApiServer)}.{ServerRoot.HostConfig.ThisServerAddress}";
                        string durableQueue  = queue + MqKeyword.DurableQueueEndsWith;
                        string wsBreathQueue = queue + MqKeyword.WsBreathQueueEndsWith;
                        AbstractMqMessagePath[] mqMessagePaths = new AbstractMqMessagePath[] {
                            new UserMqMessagePath(durableQueue),
                            new CalcConfigMqMessagePath(queue),
                            new MinerClientMqMessagePath(queue),
                            new WsBreathMqMessagePath(wsBreathQueue),
                            new OperationMqMessagePath(queue),
                            new MqCountMqMessagePath(queue),
                            new ClientTestIdMqMessagePath(queue)
                        };
                        if (!MqRedis.Create(ServerAppType.WebApiServer, mqMessagePaths, out IMqRedis mqRedis))
                        {
                            NTMinerConsole.UserError("启动失败,无法继续,因为服务器上下文创建失败");
                            return;
                        }
                        Console.Title = $"{nameof(ServerAppType.WebApiServer)}_{ServerRoot.HostConfig.ThisServerAddress}";
                        // 阿里云OSS坑爹比七牛Kodo贵一半
                        CloudFileUrlGenerater = new AliCloudOSSFileUrlGenerater();
                        IRedis redis = mqRedis;
                        IMq    mq    = mqRedis;
                        AdminMqSender         = new AdminMqSender(mq);
                        ClientTestIdDataRedis = new ClientTestIdDataRedis(redis);
                        var minerClientMqSender = new MinerClientMqSender(mq);
                        var userMqSender        = new UserMqSender(mq);
                        var calcConfigMqSender  = new CalcConfigMqSender(mq);

                        var minerRedis          = new MinerDataRedis(redis);
                        var clientActiveOnRedis = new ClientActiveOnRedis(redis);
                        var speedDataRedis      = new SpeedDataRedis(redis);
                        var userRedis           = new UserDataRedis(redis);
                        var captchaRedis        = new CaptchaDataRedis(redis);
                        var calcConfigRedis     = new CalcConfigDataRedis(redis);

                        MqCountSet             = new MqCountSet();
                        WsServerNodeRedis      = new WsServerNodeRedis(redis);
                        WsServerNodeAddressSet = new WsServerNodeAddressSet(WsServerNodeRedis);
                        UserSet           = new UserSet(userRedis, userMqSender);
                        UserAppSettingSet = new UserAppSettingSet();
                        CaptchaSet        = new CaptchaSet(captchaRedis);
                        CalcConfigSet     = new CalcConfigSet(calcConfigRedis, calcConfigMqSender);
                        NTMinerWalletSet  = new NTMinerWalletSet();
                        GpuNameSet        = new GpuNameSet();
                        ClientDataSet clientDataSet = new ClientDataSet(minerRedis, clientActiveOnRedis, speedDataRedis, minerClientMqSender);
                        ClientDataSet = clientDataSet;
                        var operationMqSender = new OperationMqSender(mq);
                        MineWorkSet            = new UserMineWorkSet(operationMqSender);
                        MinerGroupSet          = new UserMinerGroupSet();
                        NTMinerFileSet         = new NTMinerFileSet();
                        OverClockDataSet       = new OverClockDataSet();
                        KernelOutputKeywordSet = new KernelOutputKeywordSet(SpecialPath.LocalDbFileFullName);
                        ServerMessageSet       = new ServerMessageSet(SpecialPath.LocalDbFileFullName);
                        if (VirtualRoot.LocalAppSettingSet.TryGetAppSetting(nameof(KernelOutputKeywordTimestamp), out IAppSetting appSetting) && appSetting.Value is DateTime value)
                        {
                            KernelOutputKeywordTimestamp = value;
                        }
                        else
                        {
                            KernelOutputKeywordTimestamp = Timestamp.UnixBaseTime;
                        }
                    }
                    catch (Exception e) {
                        NTMinerConsole.UserError(e.Message);
                        NTMinerConsole.UserError(e.StackTrace);
                        NTMinerConsole.UserInfo("按任意键退出");
                        Console.ReadKey();
                        return;
                    }
                    VirtualRoot.StartTimer();
                    NTMinerRegistry.SetAutoBoot("NTMinerServices", true);
                    Type thisType = typeof(AppRoot);
                    Run();
                }
            }
            catch (Exception e) {
                Logger.ErrorDebugLine(e);
            }
        }
Example #14
0
 public AdminMqSender(IMq mq)
 {
     _mq = mq;
 }
Example #15
0
 public CalcConfigMqSender(IMq mq)
 {
     _mq = mq;
 }
Example #16
0
 public MinerClientMqSender(IMq mq)
 {
     _mq = mq;
 }
Example #17
0
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="eventBus">消息队列接口</param>
 /// <param name="options"></param>
 public StatisticsService(IMq eventBus, SpiderOptions options)
 {
     _mq      = eventBus;
     _options = options;
 }
Example #18
0
 public UserMqSender(IMq mq)
 {
     _mq = mq;
 }
Example #19
0
 public MqCountSender(IMq mq)
 {
     _mq = mq;
 }