//============================================================ // ICOMPARABLE IMPLEMENTATION //============================================================ #region CompareTo(object obj) /// <summary> /// Compares the current instance with another object of the same type. /// </summary> /// <param name="obj">An object to compare with this instance.</param> /// <returns>A 32-bit signed integer that indicates the relative order of the objects being compared.</returns> /// <exception cref="ArgumentException">The <paramref name="obj"/> is not the expected <see cref="Type"/>.</exception> public int CompareTo(object obj) { //------------------------------------------------------------ // If target is a null reference, instance is greater //------------------------------------------------------------ if (obj == null) { return(1); } //------------------------------------------------------------ // Determine comparison result using property state of objects //------------------------------------------------------------ TrackbackResponse value = obj as TrackbackResponse; if (value != null) { int result = String.Compare(this.ErrorMessage, value.ErrorMessage, StringComparison.OrdinalIgnoreCase); result = result | this.HasError.CompareTo(value.HasError); return(result); } else { throw new ArgumentException(String.Format(null, "obj is not of type {0}, type was found to be '{1}'.", this.GetType().FullName, obj.GetType().FullName), "obj"); } }
/// <summary> /// Called when a corresponding asynchronous send operation completes. /// </summary> /// <param name="result">The result of the asynchronous operation.</param> private static void AsyncSendCallback(IAsyncResult result) { TrackbackResponse response = null; WebRequest httpWebRequest = null; TrackbackClient client = null; Uri host = null; TrackbackMessage message = null; WebRequestOptions options = null; object userToken = null; if (result.IsCompleted) { object[] parameters = (object[])result.AsyncState; httpWebRequest = parameters[0] as WebRequest; client = parameters[1] as TrackbackClient; host = parameters[2] as Uri; message = parameters[3] as TrackbackMessage; options = parameters[4] as WebRequestOptions; userToken = parameters[5]; if (client != null) { WebResponse httpWebResponse = (WebResponse)httpWebRequest.EndGetResponse(result); response = new TrackbackResponse(httpWebResponse); client.OnMessageSent(new TrackbackMessageSentEventArgs(host, message, response, options, userToken)); client.SendOperationInProgress = false; } } }
//============================================================ // CALLBACK DELEGATE METHODS //============================================================ #region AsyncSendCallback(IAsyncResult result) /// <summary> /// Called when a corresponding asynchronous send operation completes. /// </summary> /// <param name="result">The result of the asynchronous operation.</param> private static void AsyncSendCallback(IAsyncResult result) { //------------------------------------------------------------ // Local members //------------------------------------------------------------ TrackbackResponse response = null; WebRequest httpWebRequest = null; TrackbackClient client = null; Uri host = null; TrackbackMessage message = null; WebRequestOptions options = null; object userToken = null; //------------------------------------------------------------ // Determine if the async send operation completed //------------------------------------------------------------ if (result.IsCompleted) { //------------------------------------------------------------ // Extract the send operations parameters from the user state //------------------------------------------------------------ object[] parameters = (object[])result.AsyncState; httpWebRequest = parameters[0] as WebRequest; client = parameters[1] as TrackbackClient; host = parameters[2] as Uri; message = parameters[3] as TrackbackMessage; options = parameters[4] as WebRequestOptions; userToken = parameters[5]; //------------------------------------------------------------ // Verify expected parameters were found //------------------------------------------------------------ if (client != null) { //------------------------------------------------------------ // Get the Trackback response to the Trackback ping request //------------------------------------------------------------ WebResponse httpWebResponse = (WebResponse)httpWebRequest.EndGetResponse(result); //------------------------------------------------------------ // Extract the Trackback response to the Trackback ping request //------------------------------------------------------------ response = new TrackbackResponse(httpWebResponse); //------------------------------------------------------------ // Raise SendCompleted event to notify registered handlers of state change //------------------------------------------------------------ client.OnMessageSent(new TrackbackMessageSentEventArgs(host, message, response, options, userToken)); //------------------------------------------------------------ // Reset async operation in progress indicator //------------------------------------------------------------ client.SendOperationInProgress = false; } } }
/// <summary> /// Initializes a new instance of the <see cref="TrackbackMessageSentEventArgs"/> class using the supplied parameters. /// </summary> /// <param name="host">A <see cref="Uri"/> that represents the URL of the host computer used for the XML-RPC transaction.</param> /// <param name="message">An <see cref="TrackbackMessage"/> that represents the Trackback ping request payload.</param> /// <param name="response">An <see cref="TrackbackResponse"/> that represents the response to the Trackback ping request.</param> /// <param name="options">A <see cref="WebRequestOptions"/> that holds options that should be applied to web requests.</param> /// <param name="state">A <see cref="Object"/> containing state information that was passed to the asynchronous send operation. This parameter may be <b>null</b>.</param> /// <exception cref="ArgumentNullException">The <paramref name="host"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="message"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="response"/> is a null reference (Nothing in Visual Basic).</exception> public TrackbackMessageSentEventArgs(Uri host, TrackbackMessage message, TrackbackResponse response, WebRequestOptions options, Object state) { Guard.ArgumentNotNull(host, "host"); Guard.ArgumentNotNull(message, "message"); Guard.ArgumentNotNull(response, "response"); eventHost = host; eventMessage = message; eventResponse = response; eventOptions = options ?? new WebRequestOptions(); eventUserToken = state; }
/// <summary> /// Initializes a new instance of the <see cref="TrackbackMessageSentEventArgs"/> class using the supplied parameters. /// </summary> /// <param name="host">A <see cref="Uri"/> that represents the URL of the host computer used for the XML-RPC transaction.</param> /// <param name="message">An <see cref="TrackbackMessage"/> that represents the Trackback ping request payload.</param> /// <param name="response">An <see cref="TrackbackResponse"/> that represents the response to the Trackback ping request.</param> /// <param name="credentials">A <see cref="ICredentials"/> that represents the authentication credentials utilized by the client when making the Trackback ping request. This parameter may be <b>null</b>.</param> /// <param name="proxy">A <see cref="IWebProxy"/> that represents the web proxy utilized by the client to proxy the Trackback ping request. This parameter may be <b>null</b>.</param> /// <param name="state">A <see cref="Object"/> containing state information that was passed to the asynchronous send operation. This parameter may be <b>null</b>.</param> /// <exception cref="ArgumentNullException">The <paramref name="host"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="message"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="response"/> is a null reference (Nothing in Visual Basic).</exception> public TrackbackMessageSentEventArgs(Uri host, TrackbackMessage message, TrackbackResponse response, ICredentials credentials, IWebProxy proxy, Object state) { Guard.ArgumentNotNull(host, "host"); Guard.ArgumentNotNull(message, "message"); Guard.ArgumentNotNull(response, "response"); eventHost = host; eventMessage = message; eventResponse = response; eventOptions = new WebRequestOptions(credentials, proxy); eventUserToken = state; }
/// <summary> /// Initializes a new instance of the <see cref="TrackbackMessageSentEventArgs"/> class using the supplied parameters. /// </summary> /// <param name="host">A <see cref="Uri"/> that represents the URL of the host computer used for the XML-RPC transaction.</param> /// <param name="message">An <see cref="TrackbackMessage"/> that represents the Trackback ping request payload.</param> /// <param name="response">An <see cref="TrackbackResponse"/> that represents the response to the Trackback ping request.</param> /// <param name="credentials">A <see cref="ICredentials"/> that represents the authentication credentials utilized by the client when making the Trackback ping request. This parameter may be <b>null</b>.</param> /// <param name="proxy">A <see cref="IWebProxy"/> that represents the web proxy utilized by the client to proxy the Trackback ping request. This parameter may be <b>null</b>.</param> /// <param name="state">A <see cref="Object"/> containing state information that was passed to the asynchronous send operation. This parameter may be <b>null</b>.</param> /// <exception cref="ArgumentNullException">The <paramref name="host"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="message"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="ArgumentNullException">The <paramref name="response"/> is a null reference (Nothing in Visual Basic).</exception> public TrackbackMessageSentEventArgs(Uri host, TrackbackMessage message, TrackbackResponse response, ICredentials credentials, IWebProxy proxy, Object state) { //------------------------------------------------------------ // Validate parameters //------------------------------------------------------------ Guard.ArgumentNotNull(host, "host"); Guard.ArgumentNotNull(message, "message"); Guard.ArgumentNotNull(response, "response"); //------------------------------------------------------------ // Initialize class members //------------------------------------------------------------ eventHost = host; eventMessage = message; eventResponse = response; eventOptions = new WebRequestOptions(credentials, proxy); eventUserToken = state; }
/// <summary> /// Compares the current instance with another object of the same type. /// </summary> /// <param name="obj">An object to compare with this instance.</param> /// <returns>A 32-bit signed integer that indicates the relative order of the objects being compared.</returns> /// <exception cref="ArgumentException">The <paramref name="obj"/> is not the expected <see cref="Type"/>.</exception> public int CompareTo(object obj) { if (obj == null) { return(1); } TrackbackResponse value = obj as TrackbackResponse; if (value != null) { int result = String.Compare(this.ErrorMessage, value.ErrorMessage, StringComparison.OrdinalIgnoreCase); result = result | this.HasError.CompareTo(value.HasError); return(result); } else { throw new ArgumentException(String.Format(null, "obj is not of type {0}, type was found to be '{1}'.", this.GetType().FullName, obj.GetType().FullName), "obj"); } }
//============================================================ // PUBLIC METHODS //============================================================ #region Send(TrackbackMessage message) /// <summary> /// Sends the specified message to a Trackback server to execute an Trackback ping request. /// </summary> /// <param name="message">A <see cref="TrackbackMessage"/> that represents the information needed to execute the Trackback ping request.</param> /// <returns>A <see cref="TrackbackResponse"/> that represents the server's response to the Trackback ping request.</returns> /// <exception cref="ArgumentNullException">The <paramref name="message"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="InvalidOperationException">The <see cref="Host"/> is a <b>null</b> reference (Nothing in Visual Basic).</exception> /// <exception cref="InvalidOperationException">This <see cref="TrackbackClient"/> has a <see cref="SendAsync(TrackbackMessage, Object)"/> call in progress.</exception> public TrackbackResponse Send(TrackbackMessage message) { //------------------------------------------------------------ // Local members //------------------------------------------------------------ TrackbackResponse response = null; //------------------------------------------------------------ // Validate parameter //------------------------------------------------------------ Guard.ArgumentNotNull(message, "message"); //------------------------------------------------------------ // Validate client state //------------------------------------------------------------ if (this.Host == null) { throw new InvalidOperationException(String.Format(null, "Unable to send Trackback message. The Host property has not been initialized. \n\r Message payload: {0}", message)); } else if (this.SendOperationInProgress) { throw new InvalidOperationException(String.Format(null, "Unable to send Trackback message. The TrackbackClient has a SendAsync call in progress. \n\r Message payload: {0}", message)); } //------------------------------------------------------------ // Execute the Trackback ping request //------------------------------------------------------------ WebRequest webRequest = TrackbackClient.CreateWebRequest(this.Host, this.UserAgent, message, this.UseDefaultCredentials, this.clientOptions); using (WebResponse webResponse = (WebResponse)webRequest.GetResponse()) { response = new TrackbackResponse(webResponse); } return(response); }
/// <summary> /// Called when a corresponding asynchronous send operation completes. /// </summary> /// <param name="result">The result of the asynchronous operation.</param> private static void AsyncSendCallback(IAsyncResult result) { //------------------------------------------------------------ // Local members //------------------------------------------------------------ TrackbackResponse response = null; WebRequest httpWebRequest = null; TrackbackClient client = null; Uri host = null; TrackbackMessage message = null; WebRequestOptions options = null; object userToken = null; //------------------------------------------------------------ // Determine if the async send operation completed //------------------------------------------------------------ if (result.IsCompleted) { //------------------------------------------------------------ // Extract the send operations parameters from the user state //------------------------------------------------------------ object[] parameters = (object[])result.AsyncState; httpWebRequest = parameters[0] as WebRequest; client = parameters[1] as TrackbackClient; host = parameters[2] as Uri; message = parameters[3] as TrackbackMessage; options = parameters[4] as WebRequestOptions; userToken = parameters[5]; //------------------------------------------------------------ // Verify expected parameters were found //------------------------------------------------------------ if (client != null) { //------------------------------------------------------------ // Get the Trackback response to the Trackback ping request //------------------------------------------------------------ WebResponse httpWebResponse = (WebResponse)httpWebRequest.EndGetResponse(result); //------------------------------------------------------------ // Extract the Trackback response to the Trackback ping request //------------------------------------------------------------ response = new TrackbackResponse(httpWebResponse); //------------------------------------------------------------ // Raise SendCompleted event to notify registered handlers of state change //------------------------------------------------------------ client.OnMessageSent(new TrackbackMessageSentEventArgs(host, message, response, options, userToken)); //------------------------------------------------------------ // Reset async operation in progress indicator //------------------------------------------------------------ client.SendOperationInProgress = false; } } }
/// <summary> /// Sends the specified message to a Trackback server to execute an Trackback ping request. /// </summary> /// <param name="message">A <see cref="TrackbackMessage"/> that represents the information needed to execute the Trackback ping request.</param> /// <returns>A <see cref="TrackbackResponse"/> that represents the server's response to the Trackback ping request.</returns> /// <exception cref="ArgumentNullException">The <paramref name="message"/> is a null reference (Nothing in Visual Basic).</exception> /// <exception cref="InvalidOperationException">The <see cref="Host"/> is a <b>null</b> reference (Nothing in Visual Basic).</exception> /// <exception cref="InvalidOperationException">This <see cref="TrackbackClient"/> has a <see cref="SendAsync(TrackbackMessage, Object)"/> call in progress.</exception> public TrackbackResponse Send(TrackbackMessage message) { //------------------------------------------------------------ // Local members //------------------------------------------------------------ TrackbackResponse response = null; //------------------------------------------------------------ // Validate parameter //------------------------------------------------------------ Guard.ArgumentNotNull(message, "message"); //------------------------------------------------------------ // Validate client state //------------------------------------------------------------ if(this.Host == null) { throw new InvalidOperationException(String.Format(null, "Unable to send Trackback message. The Host property has not been initialized. \n\r Message payload: {0}", message)); } else if (this.SendOperationInProgress) { throw new InvalidOperationException(String.Format(null, "Unable to send Trackback message. The TrackbackClient has a SendAsync call in progress. \n\r Message payload: {0}", message)); } //------------------------------------------------------------ // Execute the Trackback ping request //------------------------------------------------------------ WebRequest webRequest = TrackbackClient.CreateWebRequest(this.Host, this.UserAgent, message, this.UseDefaultCredentials, this.clientOptions); using (WebResponse webResponse = (WebResponse)webRequest.GetResponse()) { response = new TrackbackResponse(webResponse); } return response; }