Rework to use HttpRouter
parent
009fd85949
commit
dfab746fd2
|
@ -5,7 +5,7 @@ using System.Linq;
|
||||||
|
|
||||||
namespace ln.http.resources
|
namespace ln.http.resources
|
||||||
{
|
{
|
||||||
public abstract class Resource
|
public abstract class Resource : IHTTPResource
|
||||||
{
|
{
|
||||||
public Resource Container { get; protected set; }
|
public Resource Container { get; protected set; }
|
||||||
public Resource DefaultResource { get; set; }
|
public Resource DefaultResource { get; set; }
|
||||||
|
|
|
@ -3,32 +3,21 @@ using System.Collections.Generic;
|
||||||
|
|
||||||
namespace ln.http.resources
|
namespace ln.http.resources
|
||||||
{
|
{
|
||||||
public class ResourceApplication : HttpApplication
|
public class ResourceApplication
|
||||||
{
|
{
|
||||||
public Resource RootResource { get; set; }
|
public Resource RootResource { get; set; }
|
||||||
|
public HttpRouter HttpRouter { get; set; }
|
||||||
|
|
||||||
public ResourceApplication()
|
public ResourceApplication(Resource rootResource,HttpRouter httpRouter)
|
||||||
{
|
{
|
||||||
RootResource = new BaseResource("");
|
RootResource = rootResource;
|
||||||
|
HttpRouter = httpRouter ?? new ResourceRouter(this);
|
||||||
}
|
}
|
||||||
|
public ResourceApplication(Resource rootResource)
|
||||||
public override HttpResponse GetResponse(HttpRequest httpRequest)
|
:this(rootResource, null) { }
|
||||||
|
public ResourceApplication()
|
||||||
|
:this(new BaseResource(""))
|
||||||
{
|
{
|
||||||
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))
|
|
||||||
{
|
|
||||||
currentResource = currentResource.GetFallBackResource();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
currentResource = currentResource.GetResource(next);
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentResource.GetResponse(httpRequest,pathStack);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,6 +48,7 @@
|
||||||
<Compile Include="collections\IEntityCollectionInterface.cs" />
|
<Compile Include="collections\IEntityCollectionInterface.cs" />
|
||||||
<Compile Include="collections\EntityMapper.cs" />
|
<Compile Include="collections\EntityMapper.cs" />
|
||||||
<Compile Include="websocket\WebsocketResource.cs" />
|
<Compile Include="websocket\WebsocketResource.cs" />
|
||||||
|
<Compile Include="ResourceRouter.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\ln.http\ln.http.csproj">
|
<ProjectReference Include="..\ln.http\ln.http.csproj">
|
||||||
|
|
Loading…
Reference in New Issue