fCraft.Heartbeat.ResponseCallback C# (CSharp) Method

ResponseCallback() private static method

private static ResponseCallback ( IAsyncResult result ) : void
result IAsyncResult
return void
        private static void ResponseCallback( IAsyncResult result )
        {
            if ( Server.IsShuttingDown )
                return;
            HeartbeatRequestState state = ( HeartbeatRequestState )result.AsyncState;
            try {
                string responseText;
                using ( HttpWebResponse response = ( HttpWebResponse )state.Request.EndGetResponse( result ) ) {
                    // ReSharper disable AssignNullToNotNullAttribute
                    using ( StreamReader responseReader = new StreamReader( response.GetResponseStream() ) ) {
                        // ReSharper restore AssignNullToNotNullAttribute
                        responseText = responseReader.ReadToEnd();
                    }
                    RaiseHeartbeatSentEvent( state.Data, response, responseText );
                }

                // try parse response as server Uri, if needed
                if ( state.GetServerUri ) {
                    string replyString = responseText.Trim();
                    if ( replyString.StartsWith( "bad heartbeat", StringComparison.OrdinalIgnoreCase ) ) {
                        Logger.Log( LogType.Error, "Heartbeat: {0}", replyString );
                    } else {
                        try {
                            Uri newUri = new Uri( replyString );
                            Uri oldUri = Server.Uri;
                            if ( newUri != oldUri ) {
                                Server.Uri = newUri;
                                RaiseUriChangedEvent( oldUri, newUri );
                            }
                        } catch ( UriFormatException ) {
                            Logger.Log( LogType.Error,
                                        "Heartbeat: Server replied with: {0}",
                                        replyString );
                        }
                    }
                }
            } catch ( Exception ex ) {
                if ( ex is WebException || ex is IOException ) {
                    Logger.Log( LogType.Warning,
                                "Heartbeat: {0} is probably down ({1})",
                                state.Request.RequestUri.Host,
                                ex.Message );
                } else {
                    Logger.Log( LogType.Error, "Heartbeat: {0}", ex );
                }
            }
        }