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 pathStack = new Queue(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; } } }