protected override uint getScore(TechTreeCache tkc, MySqlConnection con, string DBPrefix) { return (uint)Flotten.Aggregate(new ResourceSet(), (rs, f) => f.schiffe.Aggregate(rs, (r, s) => r + tkc.Kosten(s.name, con, DBPrefix) * s.anz)).RaidScore; }
protected long ToDB(MySqlConnection con, String DBPrefix, String type, TechTreeCache tkc) { MySqlCommand scanInsert = new MySqlCommand("INSERT IGNORE INTO " + DBPrefix + @"scans ( iwid, iwhash, time, gala, sys, pla, typ, planityp, objekttyp, ownername, ownerally, fe, st, vv, ch, ei, wa, en, warid, ressScore, score ) VALUES ( ?iwid, ?iwhash, ?time, ?gala, ?sys, ?pla, ?typ, ?planityp, ?objekttyp, ?ownername, ?ownerally, ?fe, ?st, ?vv, ?ch, ?ei, ?wa, ?en, ?warid, ?ressScore, ?score )", con); scanInsert.Parameters.Add("?iwid", MySqlDbType.UInt32).Value = iwid; scanInsert.Parameters.Add("?iwhash", MySqlDbType.String).Value = hash; scanInsert.Parameters.Add("?time", MySqlDbType.UInt32).Value = timestamp; scanInsert.Parameters.Add("?gala", MySqlDbType.UInt32).Value = gal; scanInsert.Parameters.Add("?sys", MySqlDbType.UInt32).Value = sol; scanInsert.Parameters.Add("?pla", MySqlDbType.UInt32).Value = pla; scanInsert.Parameters.Add("?typ", MySqlDbType.String).Value = type; scanInsert.Parameters.Add("?planityp", MySqlDbType.String).Value = pla_typ; scanInsert.Parameters.Add("?objekttyp", MySqlDbType.String).Value = obj_typ; scanInsert.Parameters.Add("?ownername", MySqlDbType.String).Value = owner_name; scanInsert.Parameters.Add("?ownerally", MySqlDbType.String).Value = owner_ally; scanInsert.Parameters.Add("?fe", MySqlDbType.UInt32).Value = (uint)(ress.Eisen); scanInsert.Parameters.Add("?st", MySqlDbType.UInt32).Value = (uint)(ress.Stahl); scanInsert.Parameters.Add("?vv", MySqlDbType.UInt32).Value = (uint)(ress.VV4A); scanInsert.Parameters.Add("?ch", MySqlDbType.UInt32).Value = (uint)(ress.Chemie); scanInsert.Parameters.Add("?ei", MySqlDbType.UInt32).Value = (uint)(ress.Eis); scanInsert.Parameters.Add("?wa", MySqlDbType.UInt32).Value = (uint)(ress.Wasser); scanInsert.Parameters.Add("?en", MySqlDbType.UInt32).Value = (uint)(ress.Energie); scanInsert.Parameters.Add("?warid", MySqlDbType.UInt32).Value = warID; scanInsert.Parameters.Add("?ressScore", MySqlDbType.UInt32).Value = ress.RaidScore; scanInsert.Parameters.Add("?score", MySqlDbType.UInt32).Value = getScore(tkc, con, DBPrefix); scanInsert.ExecuteNonQuery(); long scanID = scanInsert.LastInsertedId; if (scanID == 0) return scanID; PlaniIDFetcher f = new PlaniIDFetcher(KnownData.Owner, con, DBPrefix); uint planid = f.GetID(gal, sol, pla, null, owner_name); MySqlCommand dateQry = new MySqlCommand(@"SELECT scans.time FROM " + DBPrefix + @"lastest_scans AS lastest_scans LEFT JOIN " + DBPrefix + @"scans AS scans ON lastest_scans.scanid=scans.id WHERE lastest_scans.planid=?planid AND lastest_scans.typ=?type", con); dateQry.Parameters.Add("?planid", MySqlDbType.UInt32).Value = planid; dateQry.Parameters.Add("?type", MySqlDbType.String).Value = type; MySqlDataReader r = dateQry.ExecuteReader(); if (!r.Read()) { r.Close(); MySqlCommand lastestScanInsert = new MySqlCommand("INSERT INTO " + DBPrefix + "lastest_scans(planid, typ, scanid) VALUES (?planid, ?type, ?scanid)", con); lastestScanInsert.Parameters.Add("?planid", MySqlDbType.UInt32).Value = planid; lastestScanInsert.Parameters.Add("?scanid", MySqlDbType.UInt32).Value = scanID; lastestScanInsert.Parameters.Add("?type", MySqlDbType.String).Value = type; lastestScanInsert.ExecuteNonQuery(); } else if(r.IsDBNull(0) || r.GetUInt32(0) < timestamp) { r.Close(); MySqlCommand lastestScanUpdate = new MySqlCommand("UPDATE " + DBPrefix + "lastest_scans SET scanid=?scanid WHERE planid=?planid AND typ=?type", con); lastestScanUpdate.Parameters.Add("?planid", MySqlDbType.UInt32).Value = planid; lastestScanUpdate.Parameters.Add("?type", MySqlDbType.String).Value = type; lastestScanUpdate.Parameters.Add("?scanid", MySqlDbType.UInt32).Value = scanID; lastestScanUpdate.ExecuteNonQuery(); } else { r.Close(); } return scanID; }
public override bool ToDB(MySqlConnection con, String DBPrefix, TechTreeCache tc) { long scanid = (long)base.ToDB(con, DBPrefix, "schiff", tc); if (scanid == 0) return false; MySqlCommand flInsert = new MySqlCommand("INSERT INTO " + DBPrefix + "scans_flotten (scanid, owner, typ) VALUES (?scanid, ?owner, ?typ)", con); MySqlParameter fl_scanid = flInsert.Parameters.Add("?scanid", MySqlDbType.String); MySqlParameter fl_owner = flInsert.Parameters.Add("?owner", MySqlDbType.String); MySqlParameter fl_typ = flInsert.Parameters.Add("?typ", MySqlDbType.String); flInsert.Prepare(); MySqlCommand schiffsInsert = new MySqlCommand("INSERT INTO " + DBPrefix + "scans_flotten_schiffe (flid, schid, anz) VALUES (?flid, ?schid, ?anz)", con); MySqlParameter sch_flid = schiffsInsert.Parameters.Add("?flid", MySqlDbType.UInt32); MySqlParameter sch_schid = schiffsInsert.Parameters.Add("?schid", MySqlDbType.UInt32); MySqlParameter sch_anz = schiffsInsert.Parameters.Add("?anz", MySqlDbType.UInt32); schiffsInsert.Prepare(); foreach (ScanFlotte fl in Flotten) { fl_scanid.Value = scanid; fl_owner.Value = fl.ownerName; fl_typ.Value = fl.typ; flInsert.ExecuteNonQuery(); sch_flid.Value = flInsert.LastInsertedId; foreach (ScanSchiff s in fl.schiffe) { schiffsInsert.Parameters["?schid"].Value = tc.ID(s.name, "schiff", con, DBPrefix); schiffsInsert.Parameters["?anz"].Value = s.anz; schiffsInsert.ExecuteNonQuery(); } } return true; }
protected abstract uint getScore(TechTreeCache tkc, MySqlConnection con, String DBPrefix);
public abstract bool ToDB(MySqlConnection con, String DBPrefix, TechTreeCache tkc);
protected override uint getScore(TechTreeCache tc, MySqlConnection con, string DBPrefix) { return (uint)Gebs.Aggregate((float)0, (acc, geb) => acc + tc.Kosten(geb.name, con, DBPrefix).RaidScore * geb.anz); }
public override bool ToDB(MySqlConnection con, String DBPrefix, TechTreeCache tc) { long scanID = base.ToDB(con, DBPrefix, "geb", tc); if (scanID == 0) return false; MySqlCommand gebInsert = new MySqlCommand("INSERT INTO " + DBPrefix + @"scans_gebs (scanid, gebid, anzahl) VALUES (?scanid, ?gebid, ?anz)", con); gebInsert.Parameters.Add("?scanid", MySqlDbType.UInt32).Value = scanID; gebInsert.Parameters.Add("?gebid", MySqlDbType.UInt32); gebInsert.Parameters.Add("?anz", MySqlDbType.UInt16); gebInsert.Prepare(); foreach (ScanGeb geb in Gebs) { gebInsert.Parameters["?gebid"].Value = tc.ID(geb.name, "geb", con, DBPrefix); gebInsert.Parameters["?anz"].Value = geb.anz; gebInsert.ExecuteNonQuery(); } return true; }
internal IWDBParser(XmlNode config, IWDBParserModule parserMod) { Check.NotNull(config["name"], "IWDBParser ohne Name!"); Check.NotNull(config["ip"], "IWDBParser " + config["name"].InnerText + " fehlt 'ip'"); Check.NotNull(config["port"], "IWDBParser " + config["name"].InnerText + " fehlt 'port'"); Check.NotNull(config["mysql"], "IWDBParser " + config["name"].InnerText + " fehlt 'mysql'"); Check.NotNull(config["dbprefix"], "IWDBParser " + config["name"].InnerText + " fehlt 'dbprefix'"); Check.NotNull(config["roundstart"], "IWDBParser " + config["name"].InnerText + " fehlt 'roundstart'"); DBPrefix = config["dbprefix"].InnerText; mysql = parserMod.GetMysqlConnection(config["mysql"].InnerText); roundStart = IWDBUtils.fromUnixTimestamp(uint.Parse(config["roundstart"].InnerText)); Monitor.Enter(mysql); try { mysql.Open(); handlers = new Dictionary<string, RequestHandler>(); techKostenCache = new TechTreeCache(); warFilter = new WarFilter(DBPrefix, mysql, techKostenCache, config["mysql"].InnerText); FlugRechner.ReloadCache(DBPrefix, mysql); AddHandler(warFilter); AddHandler(new NewscanHandler(mysql, DBPrefix, config["mysql"].InnerText, this, warFilter, techKostenCache, roundStart)); AddHandler(new BauschleifenHandler()); AddHandler(new TechTreeDepthHandler(mysql, DBPrefix)); AddHandler(new WarStats(DBPrefix, config["mysql"].InnerText, warFilter)); kabaFilter = new KabaFilter(DBPrefix, mysql); AddHandler(kabaFilter); } finally { mysql.Close(); Monitor.Exit(mysql); } usersLoggedIn = new List<string>(); listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ep = new IPEndPoint(IPAddress.Parse(config["ip"].InnerText), int.Parse(config["port"].InnerText)); listeningSocket.Bind(ep); listeningSocket.Listen(5); parserMod.RegisterListeningSocket(listeningSocket, NetworkCallback); parserMod.RegisterRawCommand(IrcCommand.NICK, UserNickChangeHandler); parserMod.RegisterRawCommand(IrcCommand.RPL_WHOISUSER, WhoisCallback); this.parserMod = parserMod; checkingUsers = new Dictionary<string, List<string>>(); }