コード例 #1
0
        private void InitiateSend(AwfulThreadRequest data, Action<ActionResult> result)
        {
            var dispatch = Deployment.Current.Dispatcher;
            Logger.AddEntry("ThreadReplyService - Initiating Reply...");

            try
            {
                string url = NEW_THREAD_URL;
                HttpWebRequest request = AwfulWebRequest.CreateFormDataPostRequest(url, SEND_THREAD_CONTENT_TYPE);

                if (request == null)
                    throw new NullReferenceException("request is not an http request.");

                request.AllowAutoRedirect = true;

                request.BeginGetRequestStream((asyncResult) =>
                {
                    byte[] formData = this.GetSendMultipartFormData(data);
                    var requestSuccessful = this.HandleGetRequest(asyncResult, formData);
                    if (!requestSuccessful)
                    {
                        Logger.AddEntry("ThreadCreatorService - Send failed @ GetRequest.");
                        Deployment.Current.Dispatcher.BeginInvoke(() => { result(ActionResult.Failure); });
                        return;
                    }

                    HttpWebRequest webRequest = asyncResult.AsyncState as HttpWebRequest;
                    webRequest.BeginGetResponse(getResponseResult =>
                    {
                        var responseSuccessful = HandleGetResponse(getResponseResult);
                        if (!responseSuccessful)
                        {
                            Logger.AddEntry("ThreadCreatorService - Get failed @ GetResponse.");
                            dispatch.BeginInvoke(() => { result(ActionResult.Failure); });
                        }
                        else
                        {
                            Logger.AddEntry("ThreadReplyService - Get successful.");
                            dispatch.BeginInvoke(() => { result(ActionResult.Success); });
                        }

                    }, webRequest);
                }, request);
            }

            catch (Exception)
            {
                Logger.AddEntry("ThreadGetService - Get failed.");
                dispatch.BeginInvoke(() => { result(ActionResult.Failure); });
            }
        }
コード例 #2
0
        private byte[] GetSendMultipartFormData(AwfulThreadRequest data)
        {
            Stream dataStream = new MemoryStream();
            StringBuilder sb = new StringBuilder();

            string header = SEND_THREAD_HEADER;
            string footer = SEND_THREAD_FOOTER;

            // add forum id
            this.AddFormDataString(sb, THREAD_FORUMID_KEY, data.Forum.ID.ToString(), header);
            // add action
            this.AddFormDataString(sb, THREAD_ACTION_KEY, THREAD_ACTION_VALUE, header);
            // add form key
            this.AddFormDataString(sb, THREAD_FORMKEY_KEY, data.FormKey, header);
            // add form cookie
            this.AddFormDataString(sb, THREAD_FORMCOOKIE_KEY, data.FormCookie, header);
            // add subject
            this.AddFormDataString(sb, THREAD_SUBJECT_KEY, data.Title, header);
            // add icon id
            this.AddFormDataString(sb, THREAD_ICONID_KEY, data.SelectedIcon.Value, header);
            // add message
            this.AddFormDataString(sb, THREAD_MESSAGE_KEY, data.Text, header);
            // add parse url
            this.AddFormDataString(sb, THREAD_PARSEURL_KEY, THREAD_PARSEURL_VALUE, header);
            // add submit
            this.AddFormDataString(sb, SEND_THREAD_SUBMIT_KEY, SEND_THREAD_SUBMIT_VALUE, header);

            sb.AppendLine(footer);
            string content = sb.ToString();

            dataStream.Write(this._encoding.GetBytes(content), 0, content.Length);
            dataStream.Position = 0;
            byte[] formData = new byte[dataStream.Length];
            dataStream.Read(formData, 0, formData.Length);
            dataStream.Close();

            return formData;
        }
コード例 #3
0
 public void GetPreviewAsync(AwfulThreadRequest request, Action<ActionResult, AwfulThreadPage> result)
 {
     ThreadPool.QueueUserWorkItem(state => { this.InitiatePreview(request, result); }, null);
 }
コード例 #4
0
 public void SendNewThreadRequestAsync(AwfulThreadRequest request, Action<ActionResult> result)
 {
     ThreadPool.QueueUserWorkItem(state => { this.InitiateSend(request, result); }, null);
 }
コード例 #5
0
        private void InitiatePreview(AwfulThreadRequest data, Action<Awful.Core.Models.ActionResult, SAThreadPage> result)
        {
            var dispatch = Deployment.Current.Dispatcher;
            Awful.Core.Event.Logger.AddEntry("ThreadReplyService - Initiating Reply...");

            try
            {
                string url = NEW_THREAD_URL;
                HttpWebRequest request = Awful.Core.Web.AwfulWebRequest.CreatePostRequest(url);

                if (request == null)
                    throw new NullReferenceException("request is not an http request.");

                request.AllowAutoRedirect = true;

                var keys = request.Headers.AllKeys;

                foreach (var key in keys)
                    Awful.Core.Event.Logger.AddEntry(key.ToString());

                request.BeginGetRequestStream((asyncResult) =>
                {
                    byte[] formData = this.GetPreviewMultipartFormData(data);
                    var requestSuccessful = this.HandleGetRequest(asyncResult, formData);
                    if (!requestSuccessful)
                    {
                        Awful.Core.Event.Logger.AddEntry("ThreadCreatorService - Send failed @ GetRequest.");
                        Deployment.Current.Dispatcher.BeginInvoke(() => { result(Awful.Core.Models.ActionResult.Failure, null); });
                        return;
                    }

                    HttpWebRequest webRequest = asyncResult.AsyncState as HttpWebRequest;
                    webRequest.BeginGetResponse(getResponseResult =>
                    {
                        string html = HandleGetResponseHtml(getResponseResult);
                        if (html == null)
                        {
                            Awful.Core.Event.Logger.AddEntry("ThreadCreatorService - Get failed @ GetResponse.");
                            dispatch.BeginInvoke(() => { result(Awful.Core.Models.ActionResult.Failure, null); });
                        }
                        else
                        {
                            Awful.Core.Event.Logger.AddEntry("ThreadReplyService - Get successful.");
                            SAThreadPage page = new SAThreadPreviewPage(html);
                            dispatch.BeginInvoke(() => { result(Awful.Core.Models.ActionResult.Success, page); });
                        }

                    }, webRequest);
                }, request);
            }

            catch (Exception)
            {
                Awful.Core.Event.Logger.AddEntry("ThreadGetService - Get failed.");
                dispatch.BeginInvoke(() => { result(Awful.Core.Models.ActionResult.Failure, null); });
            }
        }