public override void Matched(MatchCollection matches, uint posterID, uint victimID, DateTime now, MySql.Data.MySqlClient.MySqlConnection con, SingleNewscanRequestHandler handler, ParserResponse resp) { foreach (Match forschungsInfo in matches) { try { TechtreeItem item = TechtreeForschung.Parse(forschungsInfo.Value, DBPrefix); if (item == null) { resp.RespondError("Eine Forschung konnte nicht richtig erkannt werden! Bitte als Bug melden!"); continue; } item.WriteToDB(con); resp.Respond("Forschung " + item.Name + " eingelesen.\n"); } catch (FormatException) { resp.RespondError("Ein Formatfehler ist beim Einlesen einer Forschung aufgetreten! Sind die Tausendertrennzeichen richtig eingestellt?"); continue; } } }
public override void Matched(MatchCollection matches, uint posterID, uint victimID, DateTime now, MySqlConnection con, SingleNewscanRequestHandler handler, ParserResponse resp) { foreach (Match m in matches) { String url = m.Value+"&typ=xml"; XmlNode xml = IWCache.Query(url, con, DBPrefix); if (xml.SelectSingleNode("scann/informationen/vollstaendig").InnerText != "1") { resp.Respond("Ein Scan war nicht vollständig!"); continue; } switch (xml.SelectSingleNode("scann/scann_typ/id").InnerText) { case "1": //Sondierung (Geologie) GeoScan scan = GeoScan.Parse(xml, DBPrefix, handler.BesData); if (scan == null) { resp.RespondError("Beim Einlesen eines Geoscans ist ein Fehler aufgetreten!\n"); continue; } scan.ToDB(con); resp.Respond("Geoscan eingelesen!\n"); break; case "2": //Sondierung (Gebäude/Ress) GebScan s = new GebScan(uint.Parse(m.Groups[1].Value), m.Groups[2].Value); s.LoadXml(xml, warFilter); if (s.ToDB(con, DBPrefix, warFilter.TechKostenCache)) { resp.Respond("Gebäudescan eingelesen!\n"); } else { resp.Respond("Gebäudescan übersprungen!\n"); } break; case "3": //Sondierung (Schiffe/Def/Ress) SchiffScan schiffScan = new SchiffScan(uint.Parse(m.Groups[1].Value), m.Groups[2].Value); schiffScan.LoadXml(xml, warFilter); if(schiffScan.ToDB(con, DBPrefix, warFilter.TechKostenCache)) { resp.Respond("Schiffscan eingelesen!\n"); } else { resp.Respond("Schiffscan übersprungen!\n"); } break; } } }
public override void Matched(MatchCollection matches, uint posterID, uint victimID, DateTime now, MySqlConnection con, SingleNewscanRequestHandler handler, ParserResponse resp) { uint unixnow = IWDBUtils.toUnixTimestamp(now); String dot = Regex.Escape(System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator); String comma = Regex.Escape(System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator); foreach (Match outerMatch in matches) { MatchCollection innerMatches = Regex.Matches(outerMatch.Value, "\n" + KolonieName + @"\s+(\d+):(\d+):(\d+)\s+ \((?:Kolonie|Kampfbasis|Sammelbasis)\)\s+((?:[\d" + dot + @"]+\s+ \([-\d" + dot + comma + @"]+\)\s+ (?:---|[\d" + dot + @"]+)\s+ [\d" + dot + @"]+\s){7})+", RegexOptions.IgnorePatternWhitespace); uint uid = 0; if (innerMatches.Count == 0) return; foreach (Match innerMatch in innerMatches) { ResourceSet aktRess = new ResourceSet(); ResourceSet vRess = new ResourceSet(); ResourceSet lager = new ResourceSet(); MatchCollection ressMatches = Regex.Matches(innerMatch.Groups[4].Value, @"([\d" + dot + @"]+)\s+ \(([-\d" + dot + comma + @"]+)\)\s+ (---|[\d" + dot + @"]+)\s+ [\d" + dot + @"]+\s", RegexOptions.IgnorePatternWhitespace); int i = 0; foreach (Match m in ressMatches) { aktRess.Set(i, m.Groups[1].Value); vRess.Set(i, m.Groups[2].Value); String str = m.Groups[3].Value; if (str != "---") lager.Set(i, str); ++i; } uint gala = uint.Parse(innerMatch.Groups[1].Value); uint sys = uint.Parse(innerMatch.Groups[2].Value); uint pla = uint.Parse(innerMatch.Groups[3].Value); uint planid; if (uid == 0) { MySqlCommand uidPlanidQry = new MySqlCommand(@"SELECT universum.id , igm_data.id FROM " + DBPrefix + "universum AS universum LEFT JOIN " + DBPrefix + @"igm_data AS igm_data ON universum.ownername=igm_data.igmname WHERE universum.sys=?sys AND universum.gala=?gala AND universum.pla=?pla", con); uidPlanidQry.Parameters.Add("?sys", MySqlDbType.UInt32).Value = sys; uidPlanidQry.Parameters.Add("?gala", MySqlDbType.UInt32).Value = gala; uidPlanidQry.Parameters.Add("?pla", MySqlDbType.UInt32).Value = pla; MySqlDataReader r = uidPlanidQry.ExecuteReader(); if (!r.Read() || r.IsDBNull(1)) { resp.RespondError("Universumsdaten fehlerhaft oder unvollständig!\n"); r.Close(); continue; } planid = r.GetUInt32(0); uid = r.GetUInt32(1); r.Close(); MySqlCommand cleanupQry = new MySqlCommand(@"DELETE FROM " + DBPrefix + "ressuebersicht WHERE uid=?uid", con); cleanupQry.Parameters.Add("?uid", MySqlDbType.UInt32).Value = uid; cleanupQry.ExecuteNonQuery(); } else { MySqlCommand planIdQry = new MySqlCommand("SELECT id from " + DBPrefix + "universum WHERE sys=?sys AND gala=?gala AND pla=?pla", con); planIdQry.Parameters.Add("?sys", MySqlDbType.UInt32).Value = sys; planIdQry.Parameters.Add("?gala", MySqlDbType.UInt32).Value = gala; planIdQry.Parameters.Add("?pla", MySqlDbType.UInt32).Value = pla; object res = planIdQry.ExecuteScalar(); if (res == null || Convert.IsDBNull(res)) { resp.RespondError("Universumsdaten fehlerhaft oder unvollständig!\n"); continue; } planid = (uint)res; } MySqlCommand insertQry = new MySqlCommand("INSERT INTO " + DBPrefix + @"ressuebersicht (uid, planid, fe, st, vv, ch, ei, wa, en, vFe, vSt, vVv, vCh, vEi, vWa, vEn, lCh, lEi, lWa, lEn, time) VALUES ( ?uid, ?planid, ?fe, ?st, ?vv, ?ch, ?ei, ?wa, ?en, ?vFe, ?vSt, ?vVv, ?vCh, ?vEi, ?vWa, ?vEn, ?lCh, ?lEi, ?lWa, ?lEn, ?time) on duplicate key update uid=VALUES(uid), fe=VALUES(fe), st=VALUES(st), vv=VALUES(vv), ch=VALUES(ch), ei=VALUES(ei), wa=VALUES(wa), en=VALUES(en), vFe=VALUES(vFe), vSt=VALUES(vSt), vVv=VALUES(vVv), vCh=VALUES(vCh), vEi=VALUES(vEi), vWa=VALUES(vWa), vEn=VALUES(vEn), lCh=VALUES(lCh), lEi=VALUES(lEi), lWa=VALUES(lWa), lEn=VALUES(lEn), time=VALUES(time)", con); insertQry.Parameters.Add("?uid", MySqlDbType.UInt32).Value = uid; insertQry.Parameters.Add("?planid", MySqlDbType.UInt32).Value = planid; insertQry.Parameters.Add("?fe", MySqlDbType.UInt32).Value = aktRess.Eisen; insertQry.Parameters.Add("?st", MySqlDbType.UInt32).Value = aktRess.Stahl; insertQry.Parameters.Add("?vv", MySqlDbType.UInt32).Value = aktRess.VV4A; insertQry.Parameters.Add("?ch", MySqlDbType.UInt32).Value = aktRess.Chemie; insertQry.Parameters.Add("?ei", MySqlDbType.UInt32).Value = aktRess.Eis; insertQry.Parameters.Add("?wa", MySqlDbType.UInt32).Value = aktRess.Wasser; insertQry.Parameters.Add("?en", MySqlDbType.UInt32).Value = aktRess.Energie; insertQry.Parameters.Add("?vFe", MySqlDbType.Int32).Value = vRess.Eisen * 100; insertQry.Parameters.Add("?vSt", MySqlDbType.Int32).Value = vRess.Stahl * 100; insertQry.Parameters.Add("?vVv", MySqlDbType.Int32).Value = vRess.VV4A * 100; insertQry.Parameters.Add("?vCh", MySqlDbType.Int32).Value = vRess.Chemie * 100; insertQry.Parameters.Add("?vEi", MySqlDbType.Int32).Value = vRess.Eis * 100; insertQry.Parameters.Add("?vWa", MySqlDbType.Int32).Value = vRess.Wasser * 100; insertQry.Parameters.Add("?vEn", MySqlDbType.Int32).Value = vRess.Energie * 100; insertQry.Parameters.Add("?lCh", MySqlDbType.UInt32).Value = lager.Chemie; insertQry.Parameters.Add("?lEi", MySqlDbType.UInt32).Value = lager.Eis; insertQry.Parameters.Add("?lWa", MySqlDbType.UInt32).Value = lager.Wasser; insertQry.Parameters.Add("?lEn", MySqlDbType.UInt32).Value = lager.Energie; insertQry.Parameters.Add("?time", MySqlDbType.UInt32).Value = unixnow; insertQry.ExecuteNonQuery(); } resp.Respond("Ressourcenkoloübersicht eingelesen!\n"); } }
public override void Matched(MatchCollection matches, uint posterID, uint victimID, DateTime now, MySqlConnection con, SingleNewscanRequestHandler handler, ParserResponse resp) { foreach (Match outerMatch in matches) { uint creditsGes = (uint)Math.Round(float.Parse(outerMatch.Groups[4].Value)); float globalFpMod = float.Parse(outerMatch.Groups[2].Value)+float.Parse(outerMatch.Groups[3].Value); String dot = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator; String comma = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator; MatchCollection c = Regex.Matches(outerMatch.Groups[1].Value, KolonieName + @"\s+(\d+):(\d+):(\d+)\s+([\d"+dot+comma+@"]+)\s+ \([^)]+\)\)\s+(\S+)\s+\d+%\s+\S+\s+/\s+(\S+)\s+/\s+\S+\s+ \(([^)]+)\)\s+(?:(\S+)\s+ \(([^)]+)\))?", RegexOptions.IgnorePatternWhitespace); if (c.Count == 0) return; int planiCnt = c.Count; float creditsAllysteuer = float.Parse(outerMatch.Groups[5].Value) / planiCnt; foreach (Match innerMatch in c) { uint gala = uint.Parse(innerMatch.Groups[1].Value); uint sys = uint.Parse(innerMatch.Groups[2].Value); uint pla = uint.Parse(innerMatch.Groups[3].Value); float fp = globalFpMod*float.Parse(innerMatch.Groups[4].Value); float creds = float.Parse(innerMatch.Groups[5].Value); uint bev = uint.Parse(innerMatch.Groups[6].Value, System.Globalization.NumberStyles.Integer|System.Globalization.NumberStyles.AllowThousands); int vBev = int.Parse(innerMatch.Groups[7].Value, System.Globalization.NumberStyles.Integer | System.Globalization.NumberStyles.AllowThousands); float zu, vZu; if (innerMatch.Groups[8].Length > 0) { zu = float.Parse(innerMatch.Groups[8].Value); vZu = float.Parse(innerMatch.Groups[9].Value); } else { zu = 100; vZu = 0; } uint insertFP = (uint)Math.Round(fp * 100); int realCreds = (int)Math.Round((creds + creditsAllysteuer) * 100); uint realZu = (uint)Math.Round(zu * 100); int realVZu = (int)Math.Round(vZu * 100); MySqlCommand planIdQry = new MySqlCommand("SELECT id from " + DBPrefix + "universum WHERE sys=?sys AND gala=?gala AND pla=?pla", con); planIdQry.Parameters.Add("?sys", MySqlDbType.UInt32).Value = sys; planIdQry.Parameters.Add("?gala", MySqlDbType.UInt32).Value = gala; planIdQry.Parameters.Add("?pla", MySqlDbType.UInt32).Value = pla; object res = planIdQry.ExecuteScalar(); if (res == null || Convert.IsDBNull(res)) { resp.RespondError("Universumsdaten fehlerhaft oder unvollständig!\n"); continue; } uint planid = (uint)res; MySqlCommand updateQry = new MySqlCommand("UPDATE " + DBPrefix + @"ressuebersicht SET fp=?fp, cr=?cr, bev=?bev, zu=?zu, vCr=?vCr, vBev=?vBev, vZu=?vZu WHERE planid=?planid", con); updateQry.Parameters.Add("?fp", MySqlDbType.UInt32).Value = insertFP; updateQry.Parameters.Add("?cr", MySqlDbType.UInt32).Value = creditsGes; updateQry.Parameters.Add("?bev", MySqlDbType.UInt32).Value = bev; updateQry.Parameters.Add("?zu", MySqlDbType.UInt32).Value = realZu; updateQry.Parameters.Add("?vCr", MySqlDbType.Int32).Value = realCreds; updateQry.Parameters.Add("?vBev", MySqlDbType.Int32).Value = vBev; updateQry.Parameters.Add("?vZu", MySqlDbType.Int32).Value = realVZu; updateQry.Parameters.Add("?planid", MySqlDbType.UInt32).Value = planid; updateQry.ExecuteNonQuery(); } resp.Respond("RessourcenKoloÜbersicht Teil 2 eingelesen!\n"); } }
public override void Matched(MatchCollection matches, uint posterID, uint victimID, DateTime now, MySql.Data.MySqlClient.MySqlConnection con, SingleNewscanRequestHandler handler, ParserResponse resp) { foreach (Match gebinfo in matches) { try { TechtreeItem item = TechtreeGebäude.Parse(gebinfo.Value, DBPrefix); if (item == null) { resp.RespondError("Bei einem Gebäude ist das Einlesen fehlgeschlagen!"); continue; } item.WriteToDB(con); resp.Respond("Gebäude " + item.Name + " eingelesen.\n"); } catch (FormatException) { resp.RespondError("Ein Formatfehler ist beim Einlesen eines Gebäudes aufgetreten! Sind die Tausendertrennzeichen richtig eingestellt?"); continue; } } }
public bool ToDB(MySqlConnection con, String DBPrefix, BesonderheitenData dta, ParserResponse resp, String desc) { PlaniFetcher f = new PlaniFetcher(dta, con, DBPrefix) {Gala = zielGala, Sys=zielSys, Pla=zielPla}; List<PlaniInfo> ids = f.FetchMatching(PlaniDataFlags.ID); if (ids.Count == 0) { resp.RespondError(desc+" übersprungen, Unidaten fehlerhaft bei " + zielGala + ":" + zielSys); return false; } uint planid = ids[0].ID; MySqlCommand cmd = new MySqlCommand("INSERT IGNORE INTO " + DBPrefix + "bilanz (planid, empfaenger, absender, zeit, eisen, stahl, chemie, vv4a, eis, wasser, energie, bev) VALUES (?planid, ?empf, ?abs, ?zeit, ?fe, ?st, ?ch, ?vv, ?ei, ?wa, ?en, ?bev)", con); cmd.Parameters.Add("?planid", MySqlDbType.UInt32).Value = planid; cmd.Parameters.Add("?empf", MySqlDbType.String).Value = empfänger; cmd.Parameters.Add("?abs", MySqlDbType.String).Value = absender; cmd.Parameters.Add("?zeit", MySqlDbType.UInt32).Value = ankunftszeit; cmd.Parameters.Add("?fe", MySqlDbType.UInt32).Value = eisen; cmd.Parameters.Add("?st", MySqlDbType.UInt32).Value = stahl; cmd.Parameters.Add("?ch", MySqlDbType.UInt32).Value = chem; cmd.Parameters.Add("?vv", MySqlDbType.UInt32).Value = vv4a; cmd.Parameters.Add("?ei", MySqlDbType.UInt32).Value = eis; cmd.Parameters.Add("?wa", MySqlDbType.UInt32).Value = wasser; cmd.Parameters.Add("?en", MySqlDbType.UInt32).Value = energie; cmd.Parameters.Add("?bev", MySqlDbType.UInt32).Value = bev; if (cmd.ExecuteNonQuery() == 0) resp.Respond("Bereits bekannten "+desc+" übersprungen!"); else resp.Respond(desc+" eingelesen!"); return true; }