ln.http.resources/ResourceRouter.cs

40 lines
1.3 KiB
C#

using System;
using System.Collections.Generic;
namespace ln.http.resources
{
public class ResourceRouter : HttpRouter
{
Resource rootResource;
ResourceApplication resourceApplication;
public Resource RootResource => rootResource ?? resourceApplication.RootResource;
public ResourceRouter(Resource rootResource)
{
this.rootResource = rootResource;
}
public ResourceRouter(ResourceApplication resourceApplication)
{
this.resourceApplication = resourceApplication;
}
public override IHTTPResource FindResource(HttpRequest httpRequest)
{
Resource currentResource = RootResource;
Queue<String> pathStack = new Queue<String>(httpRequest.URI.AbsolutePath.Split(new String[] { "/" }, StringSplitOptions.RemoveEmptyEntries));
while ((pathStack.Count > 0) && (!currentResource.HandlesDispatching))
{
String next = pathStack.Dequeue();
if (!currentResource.Contains(next))
{
return currentResource.GetFallBackResource();
}
currentResource = currentResource.GetResource(next);
}
return currentResource;
}
}
}