예제 #1
0
 private static string GetClassificationString(StatusCodeClassification classes)
 {
     var flags = Enum.GetValues(typeof(StatusCodeClassification)).Cast<StatusCodeClassification>();
     List<StatusCodeClassification> flagsSet = new List<StatusCodeClassification>(3);
     foreach (var flag in flags)
     {
         if ((classes & flag) == flag)
             flagsSet.Add(flag);
     }
     return string.Join("/", flagsSet.Select(t => t.ToString()).ToArray());
 }
예제 #2
0
        /// <summary>
        /// <para>Creates an instance based on action, status and diagnostic code of a report.</para>
        /// </summary>
        /// <param name="action">Example: "failed".</param>
        /// <param name="statusCode">Example: "5.1.1"</param>
        /// <param name="diagnosticCode">Optional. Represents response from the final MTA.</param>
        public Status(string action, string statusCode, string diagnosticCode)
        {
            if (string.IsNullOrEmpty(action))
                throw new ArgumentNullException("action");
            if (string.IsNullOrEmpty(statusCode))
                throw new ArgumentNullException("statusCode");
            if (!Char.IsDigit(statusCode[0]))
                throw new UnknownStatusException(statusCode);

            WillRetryUntil = null;

            #pragma warning disable 0618
            StatusCode = statusCode;
            Classes = ParseStatusCode(statusCode);
            #pragma warning restore 0618
            Action = (ActionStatus)Enum.Parse(typeof(ActionStatus), action, true);
            DiagnosticCode = diagnosticCode;

            _innerCode = new KeyValuePair<string, StatusCodeClassification>();
            if (!string.IsNullOrEmpty(diagnosticCode))
            {
                bool firstMatch;
                var match = _reDiagCodeClass.Match(diagnosticCode);
                firstMatch = match.Success;
                while (match.Success)
                {
                    var innerClasses = ParseStatusCode(match.Value);
            #pragma warning disable 0618
                    if (innerClasses > Classes
                        && (_innerCode.Key == null || _innerCode.Value < innerClasses))
                    {
                        // Categorization more accurante found in diagnosticCode:
                        _innerCode = new KeyValuePair<string, StatusCodeClassification>(match.Value, innerClasses);
                    }
            #pragma warning restore 0618
                    match = match.NextMatch();
                }

                if (!firstMatch)
                {
                    match = _reDiagCodeClass_Secondary.Match(diagnosticCode);
                    try
                    {
                        while (match.Success)
                        {
                            var value = match.Value;
                            var c = string.Format("{0}.{1}.{2}", value[0], value[1], value.Substring(2));
                            var innerClasses = ParseStatusCode(c);
            #pragma warning disable 0618
                            if (innerClasses > Classes
                                && (_innerCode.Key == null || _innerCode.Value < innerClasses))
                            {
                                // Categorization more accurante found in diagnosticCode:
                                _innerCode = new KeyValuePair<string, StatusCodeClassification>(c, innerClasses);
                            }
            #pragma warning restore 0618
                            match = match.NextMatch();
                        }
                    }
                    catch(Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex.ToString());
                    }
                }
            }
        }