private async Task <FlexResponse> ProcessRequest(FlexRequest request) { Func <FlexRequest, Task <FlexResponse> > processor = null; if (request.Method == "GET") { Get.TryGetValue(request.Url, out processor); } else if (request.Method == "POST") { Post.TryGetValue(request.Url, out processor); } else if (request.Method == "PUT") { Put.TryGetValue(request.Url, out processor); } else if (request.Method == "DELETE") { Delete.TryGetValue(request.Url, out processor); } if (processor != null) { FlexResponse response = await processor(request); return(response); } return(DefaultResponse); }
private async void ListenerConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) { StreamSocket socket = args.Socket; StringBuilder requestStrBuilder = new StringBuilder(); using (IInputStream input = socket.InputStream) { byte[] data = new byte[BufferSize]; IBuffer buffer = data.AsBuffer(); uint dataRead = BufferSize; while (dataRead == BufferSize) { await input.ReadAsync(buffer, BufferSize, InputStreamOptions.Partial); requestStrBuilder.Append(Encoding.UTF8.GetString(data, 0, (int)buffer.Length)); dataRead = buffer.Length; } } string requestStr = requestStrBuilder.ToString(); if (String.IsNullOrEmpty(requestStr)) { return; } FlexRequest request = FlexRequest.TryParse(requestStr); if (request == null) { return; } FlexResponse response = await ProcessRequest(request); using (IOutputStream output = socket.OutputStream) { using (Stream responseStream = output.AsStreamForWrite()) { await response.WriteToStream(responseStream); await responseStream.FlushAsync(); } } }