private void ServerOnHandlePost(SimpleHttpProcessor httpProcessor, StreamReader streamReader)
        {
            var resourceName = httpProcessor.Url.Substring(1);
            var body         = streamReader.ReadToEnd();
            var formData     = JsonConvert.DeserializeObject <JObject>(body).AsJEnumerable().Cast <JProperty>()
                               .ToDictionary(data => data.Name, data => Convert.ToString(data.Value, CultureInfo.InvariantCulture));

            var queryString  = HttpUtility.ParseQueryString(httpProcessor.Query);
            var paramObjects = queryString.AllKeys
                               .ToDictionary(key => key, key => queryString[key]);

            var session = GetSession(httpProcessor);
            var content = _resourceLoader.Post(session, resourceName, paramObjects, formData);

            if (content == null)
            {
                httpProcessor.WriteNotFound();
                return;
            }
            httpProcessor.WriteSuccess(content.ContentType);
            if (content.IsBinary)
            {
                httpProcessor.WriteContent(content.Data);
            }
            else
            {
                httpProcessor.WriteContent(content.Text);
            }
        }
        private void ServerOnHandleGet(SimpleHttpProcessor httpProcessor)
        {
            var session = GetSession(httpProcessor);
            var header  = new Dictionary <string, string> {
                { "Cookie", "StonehengeSession=" + session.Id }
            };

            if (httpProcessor.Url == "/")
            {
                httpProcessor.WriteRedirect("/Index.html?stonehenge-id=" + session.Id, header);
                return;
            }

            var resourceName = httpProcessor.Url.Substring(1);
            var parameters   = new Dictionary <string, string>(); //TODO: extract parameters from URL
            var content      = _resourceLoader.Get(session, resourceName, parameters);

            if (content == null)
            {
                httpProcessor.WriteNotFound();
                return;
            }
            if (content.IsBinary)
            {
                header.Add("Content-Length", content.Data.Length.ToString());
                httpProcessor.WriteSuccess(content.ContentType, header);
                httpProcessor.WriteContent(content.Data);
            }
            else
            {
                httpProcessor.WriteSuccess(content.ContentType, header);
                httpProcessor.WriteContent(content.Text);
            }
        }