diff --git a/MTSC.UnitTests/E2ETests.cs b/MTSC.UnitTests/E2ETests.cs
index f8b1298..0a67eb5 100644
--- a/MTSC.UnitTests/E2ETests.cs
+++ b/MTSC.UnitTests/E2ETests.cs
@@ -33,9 +33,9 @@ namespace MTSC.UnitTests
.AddWebsocketHandler(new Common.WebSockets.ServerModules.EchoModule()))
.AddHandler(new HttpHandler()
.AddHttpModule(new HttpRoutingModule()
- .AddRoute(HttpMessage.HttpMethods.Get, "/", new Http200Module())
- .AddRoute(HttpMessage.HttpMethods.Get, "/query", new TestQueryModule())
- .AddRoute(HttpMessage.HttpMethods.Get, "/echo", new EchoModule()))
+ .AddRoute(HttpMessage.HttpMethods.Get, "", new Http200Module())
+ .AddRoute(HttpMessage.HttpMethods.Get, "query", new TestQueryModule())
+ .AddRoute(HttpMessage.HttpMethods.Get, "echo", new EchoModule()))
.WithFragmentsExpirationTime(TimeSpan.FromSeconds(1))
.WithMaximumSize(300))
.AddLogger(new ConsoleLogger())
diff --git a/MTSC.UnitTests/EchoModule.cs b/MTSC.UnitTests/EchoModule.cs
index 9f06736..6826c62 100644
--- a/MTSC.UnitTests/EchoModule.cs
+++ b/MTSC.UnitTests/EchoModule.cs
@@ -4,9 +4,9 @@ using MTSC.Server;
namespace MTSC.UnitTests
{
- public class EchoModule : IHttpRoute
+ public class EchoModule : HttpRouteBase
{
- HttpResponse IHttpRoute.HandleRequest(HttpRequest request, ClientData client, Server.Server server)
+ public override HttpResponse HandleRequest(HttpRequest request, ClientData client, Server.Server server)
{
return new HttpResponse { BodyString = request.BodyString, StatusCode = HttpMessage.StatusCodes.OK };
}
diff --git a/MTSC.UnitTests/TestQueryModule.cs b/MTSC.UnitTests/TestQueryModule.cs
index 32ce325..b9a38d0 100644
--- a/MTSC.UnitTests/TestQueryModule.cs
+++ b/MTSC.UnitTests/TestQueryModule.cs
@@ -5,9 +5,9 @@ using System.Web;
namespace MTSC.UnitTests
{
- class TestQueryModule : IHttpRoute
+ class TestQueryModule : HttpRouteBase
{
- HttpResponse IHttpRoute.HandleRequest(HttpRequest request, ClientData client, Server.Server server)
+ public override HttpResponse HandleRequest(HttpRequest request, ClientData client, Server.Server server)
{
var query = HttpUtility.ParseQueryString(request.RequestQuery);
if(query.Count == 2 &&
diff --git a/MTSC/Common/Http/HttpRequest.cs b/MTSC/Common/Http/HttpRequest.cs
index 2bde0a3..aa51e15 100644
--- a/MTSC/Common/Http/HttpRequest.cs
+++ b/MTSC/Common/Http/HttpRequest.cs
@@ -10,7 +10,7 @@ namespace MTSC.Common.Http
///
/// Class encapsulating a http request.
///
- public class HttpRequest : ITemplatedHttpRequest
+ public class HttpRequest
{
public HttpRequestHeaderDictionary Headers { get; } = new HttpRequestHeaderDictionary();
diff --git a/MTSC/Common/Http/ITemplatedHttpRequest.cs b/MTSC/Common/Http/ITemplatedHttpRequest.cs
deleted file mode 100644
index adb879f..0000000
--- a/MTSC/Common/Http/ITemplatedHttpRequest.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace MTSC.Common.Http
-{
- public interface ITemplatedHttpRequest
- {
- }
-}
diff --git a/MTSC/Common/Http/RoutingModules/Http200Module.cs b/MTSC/Common/Http/RoutingModules/Http200Module.cs
index 7d9c988..2d9ca2c 100644
--- a/MTSC/Common/Http/RoutingModules/Http200Module.cs
+++ b/MTSC/Common/Http/RoutingModules/Http200Module.cs
@@ -2,9 +2,9 @@
namespace MTSC.Common.Http.RoutingModules
{
- public class Http200Module : IHttpRoute
+ public class Http200Module : HttpRouteBase
{
- HttpResponse IHttpRoute.HandleRequest(HttpRequest request, ClientData client, Server.Server server)
+ public override HttpResponse HandleRequest(HttpRequest request, ClientData client, Server.Server server)
{
return new HttpResponse { StatusCode = HttpMessage.StatusCodes.OK };
}
diff --git a/MTSC/Common/Http/RoutingModules/HttpRouteBase.cs b/MTSC/Common/Http/RoutingModules/HttpRouteBase.cs
new file mode 100644
index 0000000..fac116c
--- /dev/null
+++ b/MTSC/Common/Http/RoutingModules/HttpRouteBase.cs
@@ -0,0 +1,42 @@
+using MTSC.Server;
+using System;
+
+namespace MTSC.Common.Http.RoutingModules
+{
+ public abstract class HttpRouteBase
+ {
+ public HttpResponse CallHandleRequest(HttpRequest request, ClientData client, Server.Server server)
+ {
+ return this.HandleRequest(request, client, server);
+ }
+
+ public abstract HttpResponse HandleRequest(HttpRequest request, ClientData client, Server.Server server);
+ }
+ public abstract class HttpRouteBase : HttpRouteBase
+ {
+ private Func template;
+
+ public HttpRouteBase(Func template)
+ {
+ this.template = template;
+ }
+
+ public HttpRouteBase()
+ {
+
+ }
+
+ public HttpRouteBase WithTemplateProvider(Func templateProvider)
+ {
+ this.template = templateProvider;
+ return this;
+ }
+
+ public override HttpResponse HandleRequest(HttpRequest request, ClientData client, Server.Server server)
+ {
+ return HandleRequest(template.Invoke(request), client, server);
+ }
+
+ public abstract HttpResponse HandleRequest(T request, ClientData client, Server.Server server);
+ }
+}
diff --git a/MTSC/Common/Http/RoutingModules/IHttpRoute.cs b/MTSC/Common/Http/RoutingModules/IHttpRoute.cs
deleted file mode 100644
index 37689d7..0000000
--- a/MTSC/Common/Http/RoutingModules/IHttpRoute.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using MTSC.Server;
-
-namespace MTSC.Common.Http.RoutingModules
-{
- public interface IHttpRoute where T : ITemplatedHttpRequest
- {
- HttpResponse HandleRequest(T request, ClientData client, Server.Server server);
- }
-}
diff --git a/MTSC/Common/Http/ServerModules/HttpRoutingModule.cs b/MTSC/Common/Http/ServerModules/HttpRoutingModule.cs
index 571f51a..8b23837 100644
--- a/MTSC/Common/Http/ServerModules/HttpRoutingModule.cs
+++ b/MTSC/Common/Http/ServerModules/HttpRoutingModule.cs
@@ -10,59 +10,37 @@ namespace MTSC.Common.Http.ServerModules
public class HttpRoutingModule : IHttpModule
{
private static Func alwaysEnabled = (server, request, client) => RouteEnablerResponse.Accept;
- private static Func noTemplate = (request) => request;
- private Dictionary,
- Func, Func template)>> moduleDictionary =
- new Dictionary,
- Func, Func)>>();
+ private Dictionary)>> moduleDictionary =
+ new Dictionary)>>();
public HttpRoutingModule()
{
foreach (HttpMethods method in (HttpMethods[])Enum.GetValues(typeof(HttpMethods)))
{
- moduleDictionary[method] = new Dictionary,
- Func, Func template)>();
+ moduleDictionary[method] = new Dictionary)>();
}
}
public HttpRoutingModule AddRoute(
HttpMethods method,
string uri,
- IHttpRoute routeModule)
+ HttpRouteBase routeModule)
{
- moduleDictionary[method][uri] = (routeModule, alwaysEnabled, noTemplate);
+ moduleDictionary[method][uri] = (routeModule, alwaysEnabled);
return this;
}
public HttpRoutingModule AddRoute(
HttpMethods method,
string uri,
- IHttpRoute routeModule,
+ HttpRouteBase routeModule,
Func routeEnabler)
{
- moduleDictionary[method][uri] = (routeModule, routeEnabler, noTemplate);
- return this;
- }
-
- public HttpRoutingModule AddRoute(
- HttpMethods method,
- string uri,
- IHttpRoute routeModule,
- Func requestTemplate)
- {
- moduleDictionary[method][uri] = (routeModule, alwaysEnabled, requestTemplate);
- return this;
- }
-
- public HttpRoutingModule AddRoute(
- HttpMethods method,
- string uri,
- IHttpRoute routeModule,
- Func routeEnabler,
- Func requestTemplate)
- {
- moduleDictionary[method][uri] = (routeModule, routeEnabler, requestTemplate);
+ moduleDictionary[method][uri] = (routeModule, routeEnabler);
return this;
}
@@ -81,13 +59,14 @@ namespace MTSC.Common.Http.ServerModules
*/
if (moduleDictionary[request.Method].ContainsKey(request.RequestURI))
{
- (var module, var routeEnabler, var requestTemplate) = moduleDictionary[request.Method][request.RequestURI];
+ (var module, var routeEnabler) = moduleDictionary[request.Method][request.RequestURI];
var routeEnablerResponse = routeEnabler.Invoke(server, request, client);
if (routeEnablerResponse is RouteEnablerResponse.RouteEnablerResponseAccept)
{
try
{
- response = module.HandleRequest(requestTemplate.Invoke(request), client, server);
+ response = module.CallHandleRequest(request, client, server);
+ //response = module.HandleRequest(requestTemplate.Invoke(request), client, server);
}
catch(Exception e)
{