Files
ClubPenguinServer/MareSynchronosServer/MareSynchronosStaticFilesServer/Controllers/CacheController.cs
rootdarkarchon 42b15cb6b7 Add Server-Side Download Queue (#21)
* test add queueing to file service

* further adjustments to download queueing

* add check for whether the request is still in the queue to CheckQueue

* forcefully release slot if download didn't finish in 15s

* actually cancel the delay task

* add metrics and refactor some of the request queue service

* refactor pathing

* reuse httpclient

* add queue request dto to requestfile, enqueue users immediately if a slot is available

* change startup to include all controllers

* update server pathing

* update pathing, again

* several adjustments to auth, banning, jwt server tokens, renaming, authorization

* update api I guess

* adjust automated banning of charaident and reg

* generate jwt on servers for internal authentication

* remove mvcextensions

Co-authored-by: rootdarkarchon <root.darkarchon@outlook.com>
2023-01-11 12:22:22 +01:00

43 lines
1.5 KiB
C#

using MareSynchronos.API;
using MareSynchronosShared.Utils;
using MareSynchronosStaticFilesServer.Services;
using MareSynchronosStaticFilesServer.Utils;
using Microsoft.AspNetCore.Mvc;
namespace MareSynchronosStaticFilesServer.Controllers;
[Route(MareFiles.Cache)]
public class CacheController : ControllerBase
{
private readonly RequestFileStreamResultFactory _requestFileStreamResultFactory;
private readonly CachedFileProvider _cachedFileProvider;
private readonly RequestQueueService _requestQueue;
public CacheController(ILogger<CacheController> logger, RequestFileStreamResultFactory requestFileStreamResultFactory,
CachedFileProvider cachedFileProvider, RequestQueueService requestQueue, ServerTokenGenerator generator) : base(logger, generator)
{
_requestFileStreamResultFactory = requestFileStreamResultFactory;
_cachedFileProvider = cachedFileProvider;
_requestQueue = requestQueue;
}
[HttpGet(MareFiles.Cache_Get)]
public async Task<IActionResult> GetFile(Guid requestId)
{
_logger.LogDebug($"GetFile:{MareUser}:{requestId}");
if (!_requestQueue.IsActiveProcessing(requestId, MareUser, out var request)) return BadRequest();
_requestQueue.ActivateRequest(requestId);
var fs = await _cachedFileProvider.GetAndDownloadFileStream(request.FileId, Authorization);
if (fs == null)
{
_requestQueue.FinishRequest(requestId);
return NotFound();
}
return _requestFileStreamResultFactory.Create(requestId, fs);
}
}