예제 #1
0
        public static async Task <StreamReaderAsync> Create(IInputStream inputStream)
        {
            var stream = new StreamReaderAsync(inputStream);
            await inputStream.ReadAsync(stream.buffer, stream.buffer.Capacity, DefaultStreamOptions);

            return(stream);
        }
        async void ProcessRequestAsync(
            StreamSocketListener sender,
            StreamSocketListenerConnectionReceivedEventArgs e)
        {
            try
            {
                using (var input = await StreamReaderAsync.Create(e.Socket.InputStream))
                    using (var output = e.Socket.OutputStream)
                    {
                        var response = new HttpResponse(new StreamWriterAsync(output));
                        var request  = await HttpRequest.Create(input);

                        var query      = request.ReqLine.Uri.ToLower();
                        var controller =
                            controllers.FirstOrDefault(kv => query.Contains(kv.Key)).Value
                            ?? defaultController;
                        await controller(request, response);
                    }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
                System.Diagnostics.Debug.WriteLine(ex.StackTrace);

                // If this is an unknown status it means that the error is fatal and retry will likely fail.
                //if (SocketError.GetStatus(ex.HResult) == SocketErrorStatus.Unknown) { throw; }
            }
        }