Example #1
0
        //============================================================
        //    CLASS SUMMARY
        //============================================================
        /// <summary>
        /// Provides example code for the TrackbackClient class.
        /// </summary>
        public static void ClassExample()
        {
            #region TrackbackClient
            // Initialize the Trackback peer-to-peer notification protocol client
            TrackbackClient client      = new TrackbackClient();
            client.Host                 = new Uri("http://www.example.com/trackback/5");

            // Construct the trackback message to be sent
            TrackbackMessage message    = new TrackbackMessage(new Uri("http://www.bar.com/"));
            message.Encoding            = Encoding.UTF8;
            message.WeblogName          = "Foo";
            message.Title               = "Foo Bar";
            message.Excerpt             = "My Excerpt";

            // Send a synchronous trackback ping
            TrackbackResponse response  = client.Send(message);

            // Verify response to the trackback ping
            if (response != null)
            {
                if (response.HasError)
                {
                    // Use the TrackbackResponse.ErrorMessage property to determine the reason the trackback ping failed
                }
            }
            #endregion
        }
        /// <summary>
        /// Sends the specified message to an Trackback server to execute an Trackback ping request.
        /// This method does not block the calling thread and allows the caller to pass an object to the method that is invoked when the operation completes.
        /// </summary>
        /// <param name="message">A <see cref="TrackbackMessage"/> that represents the information needed to execute the Trackback ping request.</param>
        /// <param name="userToken">A user-defined object that is passed to the method invoked when the asynchronous operation completes.</param>
        /// <remarks>
        ///     <para>
        ///         To receive notification when the Trackback ping request has been sent or the operation has been cancelled, add an event handler to the <see cref="SendCompleted"/> event.
        ///         You can cancel a <see cref="SendAsync(TrackbackMessage, Object)"/> operation by calling the <see cref="SendAsyncCancel()"/> method.
        ///     </para>
        /// </remarks>
        /// <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>
        //[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
        public void SendAsync(TrackbackMessage message, Object userToken)
        {
            Guard.ArgumentNotNull(message, "message");

            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));
            }

            this.SendOperationInProgress   = true;
            this.AsyncSendHasBeenCancelled = false;

            asyncHttpWebRequest = TrackbackClient.CreateWebRequest(this.Host, this.UserAgent, message, this.UseDefaultCredentials, this.clientOptions);

            object[] state = new object[6] {
                asyncHttpWebRequest, this, this.Host, message, this.clientOptions, userToken
            };
            IAsyncResult result = asyncHttpWebRequest.BeginGetResponse(new AsyncCallback(AsyncSendCallback), state);

            ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(AsyncTimeoutCallback), state, this.Timeout, true);
        }
        /// <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;
                }
            }
        }
Example #4
0
        //============================================================
        //	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;
                }
            }
        }
Example #5
0
        public void SendAsync(TrackbackMessage message, Object userToken)
        {
            //------------------------------------------------------------
            //	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));
            }

            //------------------------------------------------------------
            //	Set async operation tracking indicators
            //------------------------------------------------------------
            this.SendOperationInProgress   = true;
            this.AsyncSendHasBeenCancelled = false;

            //------------------------------------------------------------
            //	Build Trackback web request used to send the Trackback ping request
            //------------------------------------------------------------
            asyncHttpWebRequest = TrackbackClient.CreateWebRequest(this.Host, this.UserAgent, message, this.UseDefaultCredentials, this.clientOptions);

            //------------------------------------------------------------
            //	Get the async response to the web request
            //------------------------------------------------------------
            object[] state = new object[6] {
                asyncHttpWebRequest, this, this.Host, message, this.clientOptions, userToken
            };
            IAsyncResult result = asyncHttpWebRequest.BeginGetResponse(new AsyncCallback(AsyncSendCallback), state);

            //------------------------------------------------------------
            //  Register the timeout callback
            //------------------------------------------------------------
            ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(AsyncTimeoutCallback), state, this.Timeout, true);
        }
Example #6
0
        //============================================================
        //	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);
        }