React to HttpChanges

This commit is contained in:
Hao Kung 2015-06-25 17:28:07 -07:00
parent 14c4f46359
commit f724fefbda
2 changed files with 34 additions and 34 deletions

View File

@ -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

View File

@ -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;