예제 #1
0
파일: GeoScan.cs 프로젝트: Grollicus/iwdb
 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;
 }
예제 #2
0
파일: GeoScan.cs 프로젝트: Grollicus/iwdb
        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;
        }
예제 #3
0
파일: GeoScan.cs 프로젝트: Grollicus/iwdb
 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;
 }
예제 #4
0
파일: GeoScan.cs 프로젝트: Grollicus/iwdb
 protected abstract uint getScore(TechTreeCache tkc, MySqlConnection con, String DBPrefix);
예제 #5
0
파일: GeoScan.cs 프로젝트: Grollicus/iwdb
 public abstract bool ToDB(MySqlConnection con, String DBPrefix, TechTreeCache tkc);
예제 #6
0
파일: GeoScan.cs 프로젝트: Grollicus/iwdb
 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);
 }
예제 #7
0
파일: GeoScan.cs 프로젝트: Grollicus/iwdb
 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;
 }
예제 #8
0
        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>>();
        }