示例#1
0
        private static void Main(string[] args)
        {
            var startup = new Startup();
            DbContextPool <PisstaubeDbContext>?dbContextPool = null;

            var builder = new ContainerBuilder();

            startup.ConfigureServices(builder);

            builder.Register(c =>
            {
                var pool = c.Resolve <DbContextPool <PisstaubeDbContext> >();

                var context = pool.Rent();

                return(context);
            }).As <PisstaubeDbContext>()
            .OnRelease(c =>
            {
                dbContextPool?.Return(c);
            });

            builder.Register(c => {
                var contextPool = c.Resolve <DbContextPool <PisstaubeDbContext> >();
                dbContextPool   = contextPool;


                var apiProvider           = c.Resolve <IAPIProvider>();
                var cacheDbContextFactory = c.Resolve <PisstaubeCacheDbContextFactory>();
                var searchEngine          = c.Resolve <IBeatmapSearchEngineProvider>();
                var dbContext             = c.Resolve <PisstaubeDbContext>();

                startup.Configure(apiProvider, cacheDbContextFactory, searchEngine, dbContext);

                return(startup);
            }).AutoActivate();

            var container = builder.Build();

            var osuCrawler    = container.Resolve <OsuCrawler>();
            var houseKeeper   = container.Resolve <DatabaseHouseKeeper>();
            var redis         = container.Resolve <ConnectionMultiplexer>();
            var setDownloader = container.Resolve <SetDownloader>();

            if (Environment.GetEnvironmentVariable("CRAWLER_DISABLED")?.ToLower() != "true")
            {
                osuCrawler.Start();
            }

            if (Environment.GetEnvironmentVariable("UPDATER_DISABLED")?.ToLower() != "true")
            {
                houseKeeper.Start();
            }

            var db  = redis.GetDatabase(int.Parse(Environment.GetEnvironmentVariable("REDIS_DATABASE") ?? "-1"));
            var sub = redis.GetSubscriber();

            sub.Subscribe($"chimu:downloads", (channel, value) =>
            {
                Logger.LogPrint("Download was requested...");

                Logger.LogPrint(channel);
                Logger.LogPrint(value);

                DownloadMapRequest request = null;
                try {
                    request = JsonUtil.Deserialize <DownloadMapRequest>(value);
                } catch (Exception e) {
                    Logger.Error(e, "Failed to download Beatmap");
                }

                try
                {
                    var response = setDownloader.DownloadMap(int.Parse(request.SetId), request.NoVideo == "0");

                    response._ID = request._ID;

                    db.Publish("chimu:s:downloads", JsonUtil.Serialize(response));

                    Logger.LogPrint("Success");
                }
                catch (Exception ex)
                {
                    Logger.Error(ex, "Failed to download Beatmap");
                }
            });

            while (true)
            {
                Thread.Sleep(1000);
            }
        }
示例#2
0
 public Task <DownloadMapResponse> DownloadBeatmap(DownloadMapRequest mapRequest)
 => Request <DownloadMapResponse, DownloadMapRequest>(
     $"pisstaube:events:downloads:{mapRequest.SetId}", mapRequest);