Skip to content

Commit

Permalink
rename some interface and fixed request bug
Browse files Browse the repository at this point in the history
  • Loading branch information
ShiningRush committed Jan 12, 2018
1 parent 5da5ebe commit 459a2cf
Show file tree
Hide file tree
Showing 16 changed files with 127 additions and 72 deletions.
35 changes: 20 additions & 15 deletions src/ServiceAnt/Handler/TransportTray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,31 @@

namespace ServiceAnt.Handler
{
public abstract class TransportTray
/// <summary>
/// It is used to trigger event or request
/// </summary>
public interface ITrigger
{
public TransportTray()
{
Id = Guid.NewGuid();
CreationDate = DateTime.UtcNow;
}

public Guid Id { get; }
public DateTime CreationDate { get; }
}

public abstract class TransportTray<TEntity> : TransportTray

/// <summary>
/// It is used to trigger event or request
/// </summary>
/// <typeparam name="TDto"></typeparam>
public abstract class Trigger<TDto> : ITrigger
{
public TEntity TransportEntity { get; set; }
/// <summary>
/// Dto
/// </summary>
public TDto Dto { get; set; }

public TransportTray(TEntity entity) : base()
/// <summary>
/// ctor
/// </summary>
/// <param name="inputDto"></param>
public Trigger(TDto inputDto)
{
TransportEntity = entity;
Dto = inputDto;
}
}

}
6 changes: 3 additions & 3 deletions src/ServiceAnt/IServiceBus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,22 +48,22 @@ public interface IServiceBus : IAddSubscription, IAddRequestHandler
/// </summary>
/// <param name="event"></param>
/// <returns></returns>
Task Publish(TransportTray @event);
Task Publish(ITrigger @event);

/// <summary>
/// Send a request sync
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="event"></param>
/// <returns></returns>
T Send<T>(TransportTray @event);
T Send<T>(ITrigger @event);

/// <summary>
/// Send a request async
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="event"></param>
/// <returns></returns>
Task<T> SendAsync<T>(TransportTray @event);
Task<T> SendAsync<T>(ITrigger @event);
}
}
23 changes: 12 additions & 11 deletions src/ServiceAnt/InProcessServiceBus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using ServiceAnt.Handler.Subscription.Handler;
using ServiceAnt.Request.Handler;
using ServiceAnt.Subscription;
using ServiceAnt.Subscription.Handler;
using System;
using System.Linq;
using System.Threading.Tasks;
Expand Down Expand Up @@ -78,7 +79,7 @@ public void AddSubscription(Type eventType, IHandlerFactory factory)
/// </summary>
/// <typeparam name="TEvent">The event must inherit TransportTray</typeparam>
/// <param name="action">Handler delegate</param>
public void AddSubscription<TEvent>(Func<TEvent, Task> action) where TEvent : TransportTray
public void AddSubscription<TEvent>(Func<TEvent, Task> action) where TEvent : ITrigger
{
_subcriptionManager.AddSubscription<TEvent>(action);
}
Expand All @@ -88,7 +89,7 @@ public void AddSubscription(Type eventType, IHandlerFactory factory)
/// </summary>
/// <typeparam name="TEvent">The event must inherit TransportTray </typeparam>
/// <param name="factory"></param>s
public void AddSubscription<TEvent>(IHandlerFactory factory) where TEvent : TransportTray
public void AddSubscription<TEvent>(IHandlerFactory factory) where TEvent : ITrigger
{
_subcriptionManager.AddSubscription<TEvent>(factory);
}
Expand All @@ -109,7 +110,7 @@ public void RemoveDynamicSubscription(string eventName, Func<dynamic, Task> acti
/// </summary>
/// <typeparam name="TEvent">The event must inherit TransportTray</typeparam>
/// <param name="action">Handler delegate</param>
public void RemoveSubscription<TEvent>(Func<TEvent, Task> action) where TEvent : TransportTray
public void RemoveSubscription<TEvent>(Func<TEvent, Task> action) where TEvent : ITrigger
{
_subcriptionManager.RemoveSubscription<TEvent>(action);
}
Expand All @@ -119,7 +120,7 @@ public void RemoveDynamicSubscription(string eventName, Func<dynamic, Task> acti
/// </summary>
/// <param name="event"></param>
/// <returns></returns>
public Task Publish(TransportTray @event)
public Task Publish(ITrigger @event)
{
var asyncTask = ProcessEvent(_subcriptionManager.GetEventName(@event.GetType()), JsonConvert.SerializeObject(@event));
return asyncTask;
Expand All @@ -129,7 +130,7 @@ public Task Publish(TransportTray @event)
/// Publish a event sync
/// </summary>
/// <param name="event"></param>
public void PublishSync(TransportTray @event)
public void PublishSync(ITrigger @event)
{
var asyncTask = ProcessEvent(_subcriptionManager.GetEventName(@event.GetType()), JsonConvert.SerializeObject(@event));
asyncTask.Wait();
Expand Down Expand Up @@ -188,7 +189,7 @@ public void AddRequestHandler(Type eventType, IHandlerFactory factory)
/// <typeparam name="TEvent"></typeparam>
/// <param name="factory"></param>
public void AddRequestHandler<TEvent>(IHandlerFactory factory)
where TEvent : TransportTray
where TEvent : ITrigger
{
_requestHandlerManager.AddRequestHandler<TEvent>(factory);
}
Expand All @@ -199,7 +200,7 @@ public void AddRequestHandler<TEvent>(IHandlerFactory factory)
/// <typeparam name="TEvent"></typeparam>
/// <param name="action"></param>
public void AddRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action)
where TEvent : TransportTray
where TEvent : ITrigger
{
_requestHandlerManager.AddRequestHandler<TEvent>(action);
}
Expand All @@ -220,7 +221,7 @@ public void AddDynamicRequestHandler(string eventName, Func<dynamic, IRequestHan
/// <typeparam name="TEvent"></typeparam>
/// <param name="action"></param>
public void RemoveRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action)
where TEvent : TransportTray
where TEvent : ITrigger
{
_requestHandlerManager.RemoveRequestHandler(action);
}
Expand All @@ -241,7 +242,7 @@ public void RemoveDynamicRequestHandler(string eventName, Func<dynamic, IRequest
/// <typeparam name="T"></typeparam>
/// <param name="event"></param>
/// <returns></returns>
public T Send<T>(TransportTray @event)
public T Send<T>(ITrigger @event)
{
var asyncTask = ProcessRequest<T>(_requestHandlerManager.GetRequestName(@event.GetType()), JsonConvert.SerializeObject(@event));
asyncTask.ConfigureAwait(false);
Expand All @@ -254,7 +255,7 @@ public T Send<T>(TransportTray @event)
/// <typeparam name="T"></typeparam>
/// <param name="event"></param>
/// <returns></returns>
public async Task<T> SendAsync<T>(TransportTray @event)
public async Task<T> SendAsync<T>(ITrigger @event)
{
return await ProcessRequest<T>(_requestHandlerManager.GetRequestName(@event.GetType()), JsonConvert.SerializeObject(@event));
}
Expand Down Expand Up @@ -298,7 +299,7 @@ private async Task<T> ProcessRequest<T>(string eventName, string message)
}
}

return (T)requestContext.Response;
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(requestContext.Response));
}

#endregion
Expand Down
2 changes: 1 addition & 1 deletion src/ServiceAnt/Request/Handler/ActionRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace ServiceAnt.Request.Handler
/// The container of request handler registing with delegate
/// </summary>
/// <typeparam name="TRequest"></typeparam>
public class ActionRequestHandler<TRequest> : IRequestHandler<TRequest> where TRequest : TransportTray
public class ActionRequestHandler<TRequest> : IRequestHandler<TRequest> where TRequest : ITrigger
{
private Func<TRequest, IRequestHandlerContext, Task> _action;

Expand Down
2 changes: 1 addition & 1 deletion src/ServiceAnt/Request/Handler/IRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public interface IRequestHandler : IHandler
/// The interface of handling request
/// </summary>
/// <typeparam name="TRequest">request parameter</typeparam>
public interface IRequestHandler<TRequest> : IRequestHandler where TRequest : TransportTray
public interface IRequestHandler<TRequest> : IRequestHandler where TRequest : ITrigger
{
/// <summary>
/// Handle request async
Expand Down
6 changes: 3 additions & 3 deletions src/ServiceAnt/Request/IAddRequestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ public interface IAddRequestHandler
/// <typeparam name="TEvent"></typeparam>
/// <param name="factory"></param>
void AddRequestHandler<TEvent>(IHandlerFactory factory)
where TEvent : TransportTray;
where TEvent : ITrigger;

/// <summary>
/// Register handler with delegate
/// </summary>
/// <typeparam name="TEvent"></typeparam>
/// <param name="action"></param>
void AddRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action)
where TEvent : TransportTray;
where TEvent : ITrigger;

/// <summary>
/// Register dynamic handler with delegate
Expand All @@ -48,7 +48,7 @@ void AddRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action
/// <typeparam name="TEvent"></typeparam>
/// <param name="action"></param>
void RemoveRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action)
where TEvent : TransportTray;
where TEvent : ITrigger;

/// <summary>
/// Remove dynamic handler by eventName
Expand Down
2 changes: 1 addition & 1 deletion src/ServiceAnt/Request/IRequestHandlerManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public interface IRequestHandlerManager : IAddRequestHandler
/// </summary>
/// <param name="request">request object</param>
/// <returns></returns>
List<IHandlerFactory> GetHandlerFactoriesForRequest(TransportTray @request);
List<IHandlerFactory> GetHandlerFactoriesForRequest(ITrigger @request);

/// <summary>
/// Get the request name by TransportTray type
Expand Down
8 changes: 4 additions & 4 deletions src/ServiceAnt/Request/InMemoryRequestHandlerManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public void AddRequestHandler(Type eventType, IHandlerFactory factory)
/// </summary>
/// <typeparam name="TEvent"></typeparam>
/// <param name="action"></param>
public void AddRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action) where TEvent : TransportTray
public void AddRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action) where TEvent : ITrigger
{
var eventHandler = new ActionRequestHandler<TEvent>(action);

Expand All @@ -62,7 +62,7 @@ public void AddRequestHandler(Type eventType, IHandlerFactory factory)
/// </summary>
/// <typeparam name="TEvent"></typeparam>
/// <param name="factory"></param>
public void AddRequestHandler<TEvent>(IHandlerFactory factory) where TEvent : TransportTray
public void AddRequestHandler<TEvent>(IHandlerFactory factory) where TEvent : ITrigger
{
DoAddRequestHandler(factory, typeof(TEvent));
}
Expand All @@ -72,7 +72,7 @@ public void AddRequestHandler(Type eventType, IHandlerFactory factory)
/// </summary>
/// <param name="request">request object</param>
/// <returns></returns>
public List<IHandlerFactory> GetHandlerFactoriesForRequest(TransportTray request)
public List<IHandlerFactory> GetHandlerFactoriesForRequest(ITrigger request)
{
return GetOrCreateHandlerFactories(GetRequestName(request.GetType()));
}
Expand Down Expand Up @@ -138,7 +138,7 @@ public void RemoveDynamicRequestHandler(string eventName, Func<dynamic, IRequest
/// </summary>
/// <typeparam name="TEvent"></typeparam>
/// <param name="action"></param>
public void RemoveRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action) where TEvent : TransportTray
public void RemoveRequestHandler<TEvent>(Func<TEvent, IRequestHandlerContext, Task> action) where TEvent : ITrigger
{
GetOrCreateHandlerFactories(typeof(TEvent).Name)
.Locking(factories =>
Expand Down
40 changes: 38 additions & 2 deletions src/ServiceAnt/Subscription/Handler/ActionEventHandler.cs
Original file line number Diff line number Diff line change
@@ -1,42 +1,78 @@
using System;
using ServiceAnt.Subscription.Handler;
using System;
using System.Threading.Tasks;

namespace ServiceAnt.Handler.Subscription.Handler
{
public class ActionEventHandler<TEvent> : IEventHandler<TEvent> where TEvent : TransportTray
/// <summary>
/// Handle event by action
/// </summary>
/// <typeparam name="TEvent"></typeparam>
public class ActionEventHandler<TEvent> : IEventHandler<TEvent> where TEvent : ITrigger
{
private Func<TEvent, Task> _action;

/// <summary>
/// ctor
/// </summary>
/// <param name="action"></param>
public ActionEventHandler(Func<TEvent, Task> action)
{
_action = action;
}

/// <summary>
/// handle event
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
public async Task HandleAsync(TEvent param)
{
await _action(param);
}

/// <summary>
/// check if input action is same with self
/// </summary>
/// <param name="compareAction"></param>
/// <returns></returns>
public bool IsSame(Func<TEvent, Task> compareAction)
{
return compareAction == _action;
}
}

/// <summary>
/// Handle event by dynamic action
/// </summary>
public class ActionEventHandler : IDynamicEventHandler
{
private Func<dynamic, Task> _action;

/// <summary>
/// ctor
/// </summary>
/// <param name="action"></param>
public ActionEventHandler(Func<dynamic, Task> action)
{
_action = action;
}

/// <summary>
/// handle event
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
public async Task HandleAsync(dynamic param)
{
await _action(param);
}

/// <summary>
/// check if input action is same with self
/// </summary>
/// <param name="compareAction"></param>
/// <returns></returns>
public bool IsSame(Func<dynamic, Task> compareAction)
{
return compareAction == _action;
Expand Down
16 changes: 13 additions & 3 deletions src/ServiceAnt/Subscription/Handler/IEventHandler.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,23 @@
using System;
using ServiceAnt.Handler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ServiceAnt.Handler.Subscription.Handler
namespace ServiceAnt.Subscription.Handler
{
public interface IEventHandler<TEvent> : IHandler where TEvent : TransportTray
/// <summary>
/// It is used to handle event
/// </summary>
/// <typeparam name="TEvent"></typeparam>
public interface IEventHandler<TEvent> : IHandler where TEvent : ITrigger
{
/// <summary>
/// handle event
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
Task HandleAsync(TEvent param);
}
}

0 comments on commit 459a2cf

Please sign in to comment.