Skip to content

Commit

Permalink
update to 1.7.8
Browse files Browse the repository at this point in the history
  • Loading branch information
beetlex-io committed Jan 29, 2020
1 parent 7f605db commit 1672289
Show file tree
Hide file tree
Showing 17 changed files with 612 additions and 69 deletions.
Binary file modified .vs/BeetleX.FastHttpApi/v15/.suo
Binary file not shown.
66 changes: 60 additions & 6 deletions src/ActionContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,29 @@ internal ActionContext(ActionHandler handler, IHttpContext context, ActionHandle
ActionHandlerFactory = actionHandlerFactory;
Parameters = handler.GetParameters(context);
Controller = handler.Controller;
if (!handler.SingleInstance)
if (handler.InstanceType != InstanceType.Single)
{
Controller = actionHandlerFactory.GetController(handler.ControllerType, context);
if (Controller == null)
Controller = handler.Controller;
if (handler.InstanceType == InstanceType.Session)
{
var factory = SessionControllerFactory.GetFactory(context.Session);
Controller = factory[handler.ControllerUID];
if (Controller == null)
{
Controller = actionHandlerFactory.GetController(handler.ControllerType, context);
if (Controller == null)
Controller = Activator.CreateInstance(handler.ControllerType);
factory[handler.ControllerUID] = Controller;
}
}
else
{
Controller = actionHandlerFactory.GetController(handler.ControllerType, context);
if (Controller == null)
Controller = Activator.CreateInstance(handler.ControllerType);
}
}
if (Controller == null)
Controller = handler.Controller;
}

private List<FilterAttribute> mFilters;
Expand Down Expand Up @@ -77,6 +94,10 @@ private void OnExecute(IActionResultHandler resultHandler)
Handler.IncrementError();
resultHandler.Error(e_);
}
finally
{
DisposedController();
}
}

private async Task OnAsyncExecute(IActionResultHandler resultHandler)
Expand Down Expand Up @@ -116,6 +137,31 @@ private async Task OnAsyncExecute(IActionResultHandler resultHandler)
Handler.IncrementError();
resultHandler.Error(e_);
}
finally
{
DisposedController();
}
}

private void DisposedController()
{
if (Handler.InstanceType == InstanceType.None)
{
try
{
if (Controller is IDisposable disposable)
disposable?.Dispose();
}
catch (Exception e_)
{
if (HttpContext.Server.EnableLog(EventArgs.LogType.Error))
{
var request = HttpContext.Request;
HttpContext.Server.Log(EventArgs.LogType.Error,
$"HTTP {request.RemoteIPAddress} {request.Method} {request.BaseUrl} controller disposed error {e_.Message}@{e_.StackTrace}");
}
}
}
}

struct ActionTask : IEventWork
Expand Down Expand Up @@ -170,8 +216,16 @@ internal void Execute(IActionResultHandler resultHandler)
{
ActionTask actionTask = new ActionTask(this, resultHandler);
var queue = Handler.ThreadQueue.GetQueue(this.HttpContext);
this.HttpContext.Queue = queue;
queue.Enqueue(actionTask);
if (Handler.ThreadQueue.Enabled(queue))
{
this.HttpContext.Queue = queue;
queue.Enqueue(actionTask);
}
else
{
Handler.IncrementError();
resultHandler.Error(new Exception($"{Handler.SourceUrl} process error,out of queue limit!"), EventArgs.LogType.Warring, 500);
}
}
}
else
Expand Down
9 changes: 5 additions & 4 deletions src/ActionHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,22 @@ public ActionHandler(object controller, System.Reflection.MethodInfo method, Htt
LoadParameter();
Filters = new List<FilterAttribute>();
Method = "GET";
SingleInstance = true;
InstanceType = InstanceType.Single;
ControllerType = Controller.GetType();
NoConvert = false;
var aname = controller.GetType().Assembly.GetName();
this.AssmblyName = aname.Name;
this.Version = aname.Version.ToString();
ThreadQueue = method.GetCustomAttribute<ThreadQueueAttribute>(false);
Async = false;

ControllerUID = AssmblyName + "_" + ControllerType.Name;
}

public ThreadQueueAttribute ThreadQueue { get; set; }

public HttpApiServer HttpApiServer { get; private set; }

public string ControllerUID { get; private set; }

public string Path { get; set; }

public string Url { get; set; }
Expand All @@ -63,7 +64,7 @@ public ActionHandler(object controller, System.Reflection.MethodInfo method, Htt

public Type ControllerType { get; set; }

public bool SingleInstance { get; set; }
public InstanceType InstanceType { get; set; }

public RouteTemplateAttribute Route { get; set; }

Expand Down
32 changes: 24 additions & 8 deletions src/ActionHandlerFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,13 @@ public void RegisterParameterBinder(Type type, Type binderType)
{
ParameterBinder parameterBinder = (ParameterBinder)Activator.CreateInstance(binderType);
mParameterBinders[type] = binderType;
Server.Log(EventArgs.LogType.Info, $"Register {type.Name}'s {binderType.Name} parameter binder success");
if (Server.EnableLog(EventArgs.LogType.Info))
Server.Log(EventArgs.LogType.Info, $"Register {type.Name}'s {binderType.Name} parameter binder success");
}
catch (Exception e_)
{
Server.Log(EventArgs.LogType.Error, $"Register {type.Name}'s {binderType.Name} parameter binder error {e_.Message} {e_.StackTrace}");
if (Server.EnableLog(EventArgs.LogType.Error))
Server.Log(EventArgs.LogType.Error, $"Register {type.Name}'s {binderType.Name} parameter binder error {e_.Message} {e_.StackTrace}");
}
}

Expand Down Expand Up @@ -283,7 +285,8 @@ private void Register(HttpOptions config, Type controllerType, object controller
{
string path = System.IO.Path.GetDirectoryName(controllerType.Assembly.Location) + System.IO.Path.DirectorySeparatorChar;
((IController)obj).Init(server, path);
server.Log(EventArgs.LogType.Info, $"init {controllerType} controller path {path}");
if (server.EnableLog(EventArgs.LogType.Info))
server.Log(EventArgs.LogType.Info, $"init {controllerType} controller path {path}");
}
foreach (MethodInfo mi in controllerType.GetMethods(BindingFlags.Instance | BindingFlags.Public))
{
Expand Down Expand Up @@ -377,8 +380,11 @@ private void Register(HttpOptions config, Type controllerType, object controller
ActionHandler handler = GetAction(url);
if (handler != null)
{
server.Log(EventArgs.LogType.Warring, "{0} already exists! replaced with {1}.{2}!", url, controllerType.Name,
mi.Name);
if (server.EnableLog(EventArgs.LogType.Error))
{
server.Log(EventArgs.LogType.Error, "{0} already exists! replaced with {1}.{2}!", url, controllerType.Name,
mi.Name);
}
}
handler = new ActionHandler(obj, mi, this.Server);
if (mi.ReturnType == typeof(Task) || mi.ReturnType.BaseType == typeof(Task))
Expand All @@ -396,8 +402,12 @@ private void Register(HttpOptions config, Type controllerType, object controller
handler.OptionsAttribute = methodOptionsAttribute;
if (handler.OptionsAttribute == null && !ca.SkipPublicFilter)
handler.OptionsAttribute = handler.HttpApiServer.Options.CrossDomain;
handler.ThreadQueue = controllerType.GetCustomAttribute<ThreadQueueAttribute>(false);
var queue = mi.GetCustomAttribute<ThreadQueueAttribute>(false);
if (queue != null)
handler.ThreadQueue = queue;
handler.NoConvert = noconvert;
handler.SingleInstance = ca.SingleInstance;
handler.InstanceType = ca.InstanceType;
handler.DataConverter = actionConvert;
handler.Route = ra;
handler.Method = method;
Expand Down Expand Up @@ -425,11 +435,17 @@ private void Register(HttpOptions config, Type controllerType, object controller
{
AddHandlers(url, handler);
server.ActionSettings(handler);
server.Log(EventArgs.LogType.Info, $"register { controllerType.Name}.{mi.Name} to [{handler.Method}:{url}]");
if (server.EnableLog(EventArgs.LogType.Info))
{
server.Log(EventArgs.LogType.Info, $"register { controllerType.Name}.{mi.Name} to [{handler.Method}:{url}]");
}
}
else
{
server.Log(EventArgs.LogType.Info, $"register { controllerType.Name}.{mi.Name} cancel ");
if (server.EnableLog(EventArgs.LogType.Info))
{
server.Log(EventArgs.LogType.Info, $"register { controllerType.Name}.{mi.Name} cancel ");
}
}
}
}
Expand Down
14 changes: 7 additions & 7 deletions src/BeetleX.FastHttpApi.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<Copyright>Copyright © ikende.com 2019 email:henryfan@msn.com</Copyright>
<Copyright>Copyright © beetlex.io 2019-2020 email:henryfan@msn.com</Copyright>
<Authors>henryfan</Authors>
<Company>ikende.com</Company>
<Description>high performance and lightweight web api and websocket server components for .NETCore,performance higher than asp.net core mvc api 200%.</Description>
<Version>1.7.6</Version>
<Description>high performance and lightweight web api and websocket server components for .NETCore</Description>
<Version>1.7.8</Version>
<PackageProjectUrl>https://github.com/IKende/FastHttpApi</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/IKende/FastHttpApi/blob/master/LICENSE</PackageLicenseUrl>
<AssemblyVersion>1.7.6.0</AssemblyVersion>
<FileVersion>1.7.6.0</FileVersion>
<AssemblyVersion>1.7.8.0</AssemblyVersion>
<FileVersion>1.7.8.0</FileVersion>
<LangVersion>7.3</LangVersion>
<Product>BeetleX.FastHttpApi</Product>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageReleaseNotes>high performance and lightweight web api and websocket server components for .NETCore,performance higher than asp.net core mvc api 200%.</PackageReleaseNotes>
<PackageReleaseNotes>high performance and lightweight web api and websocket server components for .NETCore</PackageReleaseNotes>
<SignAssembly>false</SignAssembly>
<AssemblyOriginatorKeyFile>Beetlex.FastHttpApi.pfx</AssemblyOriginatorKeyFile>
<DelaySign>false</DelaySign>
Expand Down Expand Up @@ -43,7 +43,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="BeetleX" Version="1.4.7" />
<PackageReference Include="BeetleX" Version="1.4.9.4" />
<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
</ItemGroup>

Expand Down
2 changes: 1 addition & 1 deletion src/ContenType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@ public static string GetContentType(string ext)
.sol,text/plain
.spp,text/xml
.stm,text/html
.svg,text/xml
.svg,image/svg+xml
.tld,text/xml
.txt,text/plain
.uls,text/iuls
Expand Down
12 changes: 10 additions & 2 deletions src/ControllerAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,24 @@ public class ControllerAttribute : Attribute
{
public ControllerAttribute()
{
SingleInstance = true;
InstanceType = InstanceType.Single;
}
public string BaseUrl { get; set; }

public bool SingleInstance { get; set; }
public InstanceType InstanceType { get; set; }

public bool SkipPublicFilter { get; set; } = false;
}


public enum InstanceType
{
Single,
Session,
None
}


public interface IBodyFlag { }

public interface IController
Expand Down
Loading

0 comments on commit 1672289

Please sign in to comment.