React to HttpChanges
This commit is contained in:
parent
14c4f46359
commit
f724fefbda
|
|
@ -199,14 +199,14 @@ namespace Kestrel
|
||||||
get { return _frame.HasResponseStarted; }
|
get { return _frame.HasResponseStarted; }
|
||||||
}
|
}
|
||||||
|
|
||||||
void IHttpResponseFeature.OnResponseStarting(Action<object> callback, object state)
|
void IHttpResponseFeature.OnStarting(Func<object, Task> callback, object state)
|
||||||
{
|
{
|
||||||
_frame.OnResponseStarting(callback, state);
|
_frame.OnStarting(callback, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IHttpResponseFeature.OnResponseCompleted(Action<object> callback, object state)
|
void IHttpResponseFeature.OnCompleted(Func<object, Task> callback, object state)
|
||||||
{
|
{
|
||||||
_frame.OnResponseCompleted(callback, state);
|
_frame.OnCompleted(callback, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IHttpUpgradeFeature.IsUpgradableRequest
|
bool IHttpUpgradeFeature.IsUpgradableRequest
|
||||||
|
|
|
||||||
|
|
@ -63,10 +63,10 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
CancellationTokenSource _cts = new CancellationTokenSource();
|
CancellationTokenSource _cts = new CancellationTokenSource();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
List<KeyValuePair<Action<object>, object>> _onResponseStarting;
|
List<KeyValuePair<Func<object, Task>, object>> _onStarting;
|
||||||
List<KeyValuePair<Action<object>, object>> _onResponseCompleted;
|
List<KeyValuePair<Func<object, Task>, object>> _onCompleted;
|
||||||
object _onResponseStartingSync = new Object();
|
object _onStartingSync = new Object();
|
||||||
object _onResponseCompletedSync = new Object();
|
object _onCompletedSync = new Object();
|
||||||
|
|
||||||
public Frame(ConnectionContext context) : base(context)
|
public Frame(ConnectionContext context) : base(context)
|
||||||
{
|
{
|
||||||
|
|
@ -190,58 +190,58 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
Task.Run(ExecuteAsync);
|
Task.Run(ExecuteAsync);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnResponseStarting(Action<object> callback, object state)
|
public void OnStarting(Func<object, Task> callback, object state)
|
||||||
{
|
{
|
||||||
lock (_onResponseStartingSync)
|
lock (_onStartingSync)
|
||||||
{
|
{
|
||||||
if (_onResponseStarting == null)
|
if (_onStarting == null)
|
||||||
{
|
{
|
||||||
_onResponseStarting = new List<KeyValuePair<Action<object>, object>>();
|
_onStarting = new List<KeyValuePair<Func<object, Task>, object>>();
|
||||||
}
|
}
|
||||||
_onResponseStarting.Add(new KeyValuePair<Action<object>, object>(callback, state));
|
_onStarting.Add(new KeyValuePair<Func<object, Task>, object>(callback, state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnResponseCompleted(Action<object> callback, object state)
|
public void OnCompleted(Func<object, Task> callback, object state)
|
||||||
{
|
{
|
||||||
lock (_onResponseCompletedSync)
|
lock (_onCompletedSync)
|
||||||
{
|
{
|
||||||
if (_onResponseCompleted == null)
|
if (_onCompleted == null)
|
||||||
{
|
{
|
||||||
_onResponseCompleted = new List<KeyValuePair<Action<object>, object>>();
|
_onCompleted = new List<KeyValuePair<Func<object, Task>, object>>();
|
||||||
}
|
}
|
||||||
_onResponseCompleted.Add(new KeyValuePair<Action<object>, object>(callback, state));
|
_onCompleted.Add(new KeyValuePair<Func<object, Task>, object>(callback, state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FireOnResponseStarting()
|
private void FireOnStarting()
|
||||||
{
|
{
|
||||||
List<KeyValuePair<Action<object>, object>> onResponseStarting = null;
|
List<KeyValuePair<Func<object, Task>, object>> onStarting = null;
|
||||||
lock (_onResponseStartingSync)
|
lock (_onStartingSync)
|
||||||
{
|
{
|
||||||
onResponseStarting = _onResponseStarting;
|
onStarting = _onStarting;
|
||||||
_onResponseStarting = null;
|
_onStarting = null;
|
||||||
}
|
}
|
||||||
if (onResponseStarting != null)
|
if (onStarting != null)
|
||||||
{
|
{
|
||||||
foreach (var entry in onResponseStarting)
|
foreach (var entry in onStarting)
|
||||||
{
|
{
|
||||||
entry.Key.Invoke(entry.Value);
|
entry.Key.Invoke(entry.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FireOnResponseCompleted()
|
private void FireOnCompleted()
|
||||||
{
|
{
|
||||||
List<KeyValuePair<Action<object>, object>> onResponseCompleted = null;
|
List<KeyValuePair<Func<object, Task>, object>> onCompleted = null;
|
||||||
lock (_onResponseCompletedSync)
|
lock (_onCompletedSync)
|
||||||
{
|
{
|
||||||
onResponseCompleted = _onResponseCompleted;
|
onCompleted = _onCompleted;
|
||||||
_onResponseCompleted = null;
|
_onCompleted = null;
|
||||||
}
|
}
|
||||||
if (onResponseCompleted != null)
|
if (onCompleted != null)
|
||||||
{
|
{
|
||||||
foreach (var entry in onResponseCompleted)
|
foreach (var entry in onCompleted)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
@ -268,7 +268,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
FireOnResponseCompleted();
|
FireOnCompleted();
|
||||||
ProduceEnd(error);
|
ProduceEnd(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -318,7 +318,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
if (_resultStarted) return;
|
if (_resultStarted) return;
|
||||||
_resultStarted = true;
|
_resultStarted = true;
|
||||||
|
|
||||||
FireOnResponseStarting();
|
FireOnStarting();
|
||||||
|
|
||||||
_responseStarted = true;
|
_responseStarted = true;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue