Source

owin-aspnet / Owin.AspNet / OwinHttpAsyncHandler.cs

Full commit
/* **************************************************************************
 *
 * Copyright 2011 Jeff Hardy
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * *************************************************************************/

using System;
using System.Collections.Generic;
using System.Web;

namespace Owin.AspNet
{
    using AppAction = Action<
                IDictionary<string, object>,
                Action<string, Dictionary<string, IList<string>>, IEnumerable<object>>,
                Action<Exception>>;

    class OwinHttpAsyncHandler : OwinHttpHandler, IHttpAsyncHandler
    {
        private AppAction app;
        
        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) {
            app = LoadApp();
            var env = CreateEnvironment(context);

            return app.BeginInvoke(
                env,
                (status, headers, body) => Response(context, status, headers, body),
                (e) => Error(context, e),
                cb,
                extraData
            );
        }

        public void EndProcessRequest(IAsyncResult result) {
            app.EndInvoke(result);

            if(error != null)
                throw error;
        }
    }
}