IronPigeon.Tests.Mocks.InboxHttpHandlerMock.HttpHandler C# (CSharp) Method

HttpHandler() private method

private HttpHandler ( HttpRequestMessage request ) : Task
request System.Net.Http.HttpRequestMessage
return Task
        private async Task<HttpResponseMessage> HttpHandler(HttpRequestMessage request)
        {
            if (request.Method == HttpMethod.Post)
            {
                var recipient = this.recipients.Keys.FirstOrDefault(r => r.MessageReceivingEndpoint.AbsolutePath == request.RequestUri.AbsolutePath);
                if (recipient != null)
                {
                    var inbox = this.recipients[recipient];
                    var buffer = await request.Content.ReadAsByteArrayAsync();
                    inbox.Add(Tuple.Create(DateTime.UtcNow, buffer));
                    return new HttpResponseMessage();
                }
            }
            else if (request.Method == HttpMethod.Get)
            {
                var recipient = this.recipients.Keys.FirstOrDefault(r => r.MessageReceivingEndpoint == request.RequestUri);
                if (recipient != null)
                {
                    var inbox = this.recipients[recipient];
                    var list = new IncomingList();
                    string locationBase = recipient.MessageReceivingEndpoint.AbsoluteUri + "/";
                    list.Items = new List<IncomingList.IncomingItem>();
                    for (int i = 0; i < inbox.Count; i++)
                    {
                        list.Items.Add(new IncomingList.IncomingItem { DatePostedUtc = inbox[i].Item1, Location = new Uri(locationBase + i) });
                    }

                    var serializer = new DataContractJsonSerializer(typeof(IncomingList));
                    var contentStream = new MemoryStream();
                    serializer.WriteObject(contentStream, list);
                    contentStream.Position = 0;
                    return new HttpResponseMessage { Content = new StreamContent(contentStream) };
                }

                recipient = this.recipients.Keys.FirstOrDefault(r => request.RequestUri.AbsolutePath.StartsWith(r.MessageReceivingEndpoint.AbsolutePath + "/"));
                if (recipient != null)
                {
                    var messageIndex = int.Parse(request.RequestUri.Segments[request.RequestUri.Segments.Length - 1]);
                    var message = this.recipients[recipient][messageIndex];
                    byte[] messageBuffer = message.Item2;
                    return new HttpResponseMessage { Content = new StreamContent(new MemoryStream(messageBuffer)) };
                }
            }

            return null;
        }
    }