protected override void LogEventsFromTextOutput(string singleLine, MessageImportance messageImportance) { singleLine = singleLine.Trim(); if (singleLine.Length == 0) { return; } // When IncludeDebugInformation is true, prevents the debug symbols stats from braeking this. if (singleLine.StartsWith("WROTE SYMFILE") || singleLine.StartsWith("OffsetTable") || singleLine.StartsWith("Compilation succeeded") || singleLine.StartsWith("Compilation failed")) { return; } Match match = ErrorRegex.Match(singleLine); if (!match.Success) { Log.LogMessage(messageImportance, singleLine); return; } string filename = match.Result("${file}") ?? ""; string line = match.Result("${line}"); int lineNumber = !string.IsNullOrEmpty(line) ? Int32.Parse(line) : 0; string col = match.Result("${column}"); int columnNumber = 0; if (!string.IsNullOrEmpty(col)) { columnNumber = col.IndexOf("+") >= 0 ? -1 : Int32.Parse(col); } string category = match.Result("${level}"); string code = match.Result("${number}"); string text = match.Result("${message}"); if (String.Compare(category, "warning", StringComparison.OrdinalIgnoreCase) == 0) { Log.LogWarning(null, code, null, filename, lineNumber, columnNumber, -1, -1, text, null); } else if (String.Compare(category, "error", StringComparison.OrdinalIgnoreCase) == 0) { Log.LogError(null, code, null, filename, lineNumber, columnNumber, -1, -1, text, null); } else { Log.LogMessage(messageImportance, singleLine); } }
static IRCMessageType GetMessageType([NotNull] string rawline, [NotNull] string actualBotNick) { if (rawline == null) { throw new ArgumentNullException("rawline"); } if (actualBotNick == null) { throw new ArgumentNullException("actualBotNick"); } Match found = ReplyCodeRegex.Match(rawline); if (found.Success) { string code = found.Groups[1].Value; IRCReplyCode replycode = (IRCReplyCode)int.Parse(code); // check if this replycode is known in the RFC if (Array.IndexOf(ReplyCodes, replycode) == -1) { return(IRCMessageType.Unknown); } switch (replycode) { case IRCReplyCode.Welcome: case IRCReplyCode.YourHost: case IRCReplyCode.Created: case IRCReplyCode.MyInfo: case IRCReplyCode.Bounce: return(IRCMessageType.Login); case IRCReplyCode.LuserClient: case IRCReplyCode.LuserOp: case IRCReplyCode.LuserUnknown: case IRCReplyCode.LuserMe: case IRCReplyCode.LuserChannels: return(IRCMessageType.Info); case IRCReplyCode.MotdStart: case IRCReplyCode.Motd: case IRCReplyCode.EndOfMotd: return(IRCMessageType.Motd); case IRCReplyCode.NamesReply: case IRCReplyCode.EndOfNames: return(IRCMessageType.Name); case IRCReplyCode.WhoReply: case IRCReplyCode.EndOfWho: return(IRCMessageType.Who); case IRCReplyCode.ListStart: case IRCReplyCode.List: case IRCReplyCode.ListEnd: return(IRCMessageType.List); case IRCReplyCode.BanList: case IRCReplyCode.EndOfBanList: return(IRCMessageType.BanList); case IRCReplyCode.Topic: case IRCReplyCode.TopicSetBy: case IRCReplyCode.NoTopic: return(IRCMessageType.Topic); case IRCReplyCode.WhoIsUser: case IRCReplyCode.WhoIsServer: case IRCReplyCode.WhoIsOperator: case IRCReplyCode.WhoIsIdle: case IRCReplyCode.WhoIsChannels: case IRCReplyCode.EndOfWhoIs: return(IRCMessageType.WhoIs); case IRCReplyCode.WhoWasUser: case IRCReplyCode.EndOfWhoWas: return(IRCMessageType.WhoWas); case IRCReplyCode.UserModeIs: return(IRCMessageType.UserMode); case IRCReplyCode.ChannelModeIs: return(IRCMessageType.ChannelMode); default: if (((int)replycode >= 400) && ((int)replycode <= 599)) { return(IRCMessageType.ErrorMessage); } else { return(IRCMessageType.Unknown); } } } found = PingRegex.Match(rawline); if (found.Success) { return(IRCMessageType.Ping); } found = ErrorRegex.Match(rawline); if (found.Success) { return(IRCMessageType.Error); } found = ActionRegex.Match(rawline); if (found.Success) { switch (found.Groups[1].Value) { case "#": case "!": case "&": case "+": return(IRCMessageType.ChannelAction); default: return(IRCMessageType.QueryAction); } } found = CtcpRequestRegex.Match(rawline); if (found.Success) { return(IRCMessageType.CtcpRequest); } found = MessageRegex.Match(rawline); if (found.Success) { switch (found.Groups[1].Value) { case "#": case "!": case "&": case "+": return(IRCMessageType.ChannelMessage); default: return(IRCMessageType.QueryMessage); } } found = CtcpReplyRegex.Match(rawline); if (found.Success) { return(IRCMessageType.CtcpReply); } found = NoticeRegex.Match(rawline); if (found.Success) { switch (found.Groups[1].Value) { case "#": case "!": case "&": case "+": return(IRCMessageType.ChannelNotice); default: return(IRCMessageType.QueryNotice); } } found = InviteRegex.Match(rawline); if (found.Success) { return(IRCMessageType.Invite); } found = JoinRegex.Match(rawline); if (found.Success) { return(IRCMessageType.Join); } found = TopicRegex.Match(rawline); if (found.Success) { return(IRCMessageType.TopicChange); } found = NickRegex.Match(rawline); if (found.Success) { return(IRCMessageType.NickChange); } found = KickRegex.Match(rawline); if (found.Success) { return(IRCMessageType.Kick); } found = PartRegex.Match(rawline); if (found.Success) { return(IRCMessageType.Part); } found = ModeRegex.Match(rawline); if (found.Success) { if (found.Groups[1].Value == actualBotNick) { return(IRCMessageType.UserModeChange); } else { return(IRCMessageType.ChannelModeChange); } } found = QuitRegex.Match(rawline); if (found.Success) { return(IRCMessageType.Quit); } found = KillRegex.Match(rawline); return(found.Success ? IRCMessageType.Kill : IRCMessageType.Unknown); }