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); }); } }
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; }
public void GetPreviewAsync(AwfulThreadRequest request, Action<ActionResult, AwfulThreadPage> result) { ThreadPool.QueueUserWorkItem(state => { this.InitiatePreview(request, result); }, null); }
public void SendNewThreadRequestAsync(AwfulThreadRequest request, Action<ActionResult> result) { ThreadPool.QueueUserWorkItem(state => { this.InitiateSend(request, result); }, null); }
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); }); } }