public virtual Func<IHubIncomingInvokerContext, Task<object>> BuildIncoming(Func<IHubIncomingInvokerContext, Task<object>> invoke)
{
return async context =>
{
if (OnBeforeIncoming(context))
{
try
{
var result = await invoke(context).OrEmpty().PreserveCulture();
return OnAfterIncoming(result, context);
}
catch (Exception ex)
{
var exContext = new ExceptionContext(ex);
OnIncomingError(exContext, context);
var error = exContext.Error;
if (error == ex)
{
throw;
}
else if (error != null)
{
throw error;
}
else
{
return exContext.Result;
}
}
}
return null;
};
}