Test Project Created
+ Implemented Request Processing (Cache => Regex Events => Razor Pages => Static Content) + Rendering based on domain works - Areas are not implemented + Content Type Map now defines `.cshtml` files and default mime type was changed to "text/plain" + GetStaticFile no longer returns private templates/layouts (used to be able to view those in plain text by requesting with a fully qualified path) I will make more concise tests in a bit (I was not pushing to git properly, so have to make big commits for the time being)
This commit is contained in:
48
WebServer/Utils/CachedResponse.cs
Normal file
48
WebServer/Utils/CachedResponse.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
|
||||
namespace WebServer.Utils {
|
||||
public class CachedResponse : HttpResponse {
|
||||
#region Static Methods, etc
|
||||
public static bool BypassCache = false;
|
||||
public static List<CachedResponse> Instances { get; private set; } = new List<CachedResponse>();
|
||||
public static ushort RaiseAllUpdateFlags() {
|
||||
ushort flagsRaised = 0;
|
||||
foreach (CachedResponse resource in Instances) {
|
||||
if (resource.NeedsUpdate) continue;
|
||||
flagsRaised++;
|
||||
resource.RaiseUpdateFlag();
|
||||
//Logger.LogDebug($"Raised Update Flag for '{resource.Name}'");
|
||||
}
|
||||
return flagsRaised;
|
||||
}
|
||||
|
||||
public static CachedResponse? Get(HttpServer server, string path) {
|
||||
path = path.Trim();
|
||||
return Instances.FirstOrDefault(x => x.Server == server && x.Path == path);
|
||||
}
|
||||
|
||||
public static bool TryGet(HttpServer server, string path, out CachedResponse? resource)
|
||||
=> (resource = Get(server, path)) != null;
|
||||
#endregion
|
||||
|
||||
public readonly HttpServer Server;
|
||||
public string Path;
|
||||
bool UpdateFlagRaised;
|
||||
Stopwatch TimeSinceLastUpdate;
|
||||
public HttpServer.Callback? UpdateMethod; // If null, HttpServer will attempt to find one or GetStaticFile
|
||||
|
||||
public bool NeedsUpdate => UpdateFlagRaised || BypassCache || Server.Config.MaxCacheAge < TimeSinceLastUpdate.Elapsed.TotalSeconds;
|
||||
|
||||
public CachedResponse(HttpServer parentServer, HttpServer.Callback? updateMethod) {
|
||||
Instances.Add(this);
|
||||
Server = parentServer;
|
||||
TimeSinceLastUpdate = Stopwatch.StartNew();
|
||||
UpdateMethod = updateMethod;
|
||||
}
|
||||
|
||||
public void RaiseUpdateFlag() => UpdateFlagRaised = true;
|
||||
public void ClearFlag() => UpdateFlagRaised = false;
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ namespace WebServer.Utils
|
||||
{
|
||||
private const string Dot = ".";
|
||||
private const string QuestionMark = "?";
|
||||
private const string DefaultMimeType = "application/octet-stream";
|
||||
private const string DefaultMimeType = "text/plain";
|
||||
private static readonly Lazy<IDictionary<string, string>> _mappings = new Lazy<IDictionary<string, string>>(BuildMappings);
|
||||
public static string HtmlDocument = GetMimeType(".html");
|
||||
|
||||
@@ -218,6 +218,7 @@ namespace WebServer.Utils
|
||||
{".htc", "text/x-component"},
|
||||
{".htm", "text/html"},
|
||||
{".html", "text/html"},
|
||||
{".cshtml", "text/html"},
|
||||
{".htt", "text/webviewhtml"},
|
||||
{".hxa", "application/xml"},
|
||||
{".hxc", "application/xml"},
|
||||
|
||||
Reference in New Issue
Block a user