protected TSMException( SerializationInfo info, StreamingContext context ) : base( info, context ) { if(info != null) { // this.ExitCode = info.GetInt32("ExitCode"); // this.TSMMessages = (List<clsTSMMessage>)info.GetValue("TSMMessages", typeof(List<clsTSMMessage>)); //var msg = info.GetValue("TSMMessage", typeof(clsTSMMessage)) as clsTSMMessage; //if (msg != null) // this.TSMMessage = msg; this.TSMMessage = info.GetValue("TSMMessage", typeof(clsTSMMessage)) as clsTSMMessage; } }
/// <summary> /// Try parse a string into an message string. /// </summary> /// <param name="MessageString"></param> /// <param name="tsmmsg"></param> /// <returns></returns> public static bool TryParse(string MessageString, out clsTSMMessage tsmmsg) { tsmmsg = null; if (string.IsNullOrWhiteSpace(MessageString)) return false; if (MessageString.Length < 9) return false; if (!Char.IsLetter(MessageString[0])) return false; if (!Char.IsLetter(MessageString[1])) return false; if (!Char.IsLetter(MessageString[2])) return false; var prefix = MessageString.Substring(0, 3).ToUpperInvariant(); int number = 0; if (!int.TryParse(MessageString.Substring(3, 4), out number)) return false; var severity = MessageString[7]; if (!Char.IsLetter(severity)) return false; string text = string.Empty; if (MessageString.Length > 9) text = MessageString.Substring(9); tsmmsg = new clsTSMMessage() { Prefix = prefix, Number = number, Type = severity, Text = text, }; return true; }
/// <summary> /// Tries to decode the error message inside message list. /// Actually only tries 2 last items... /// </summary> /// <param name="messages"></param> /// <returns></returns> protected virtual bool DecodeMessage(List<string> messages) { if (messages == null) return false; var count = messages.Count; if(count == 0) return false; if(count == 1) { clsTSMMessage msg; if(clsTSMMessage.TryParse(messages[0], out msg)) { this.TSMMessage = msg; return true; } //return false; } else { // get last 2 elements in list. // Yay, a linq call! //var last = messages.Skip(Math.Max(0, count - 2)).Take(2); var last = messages.Skip(count - 2); //var last = messages.Reverse<string>().Take(2); this reverts the whole array. This can be very big so dont. if(last != null) { Debug.Assert(last.Count() == 2, string.Format("Code to get last 2 items in list failed. Result: {0}", last.Count())); // try second last first. clsTSMMessage msg = null; if (clsTSMMessage.TryParse(last.First(), out msg)) this.TSMMessage = msg; else if (clsTSMMessage.TryParse(last.Last(), out msg)) this.TSMMessage = msg; if (TSMMessage != null) return true; } } return false; }