Beispiel #1
0
 public ScanLinkParser(NewscanHandler newscanHandler, WarFilter warFilter)
     : base(newscanHandler)
 {
     AddPattern(@"http://www\.icewars\.de/portal/kb/de/sb\.php\?id=(\d+)&md_hash=([a-z0-9A-Z]{32})", "kb/de/sb.php", PatternFlags.All);
     this.warFilter = warFilter;
 }
Beispiel #2
0
 public static IWScan LoadXml(MySqlConnection con, String DBPrefix, WarFilter filter, uint iwid, string iwhash)
 {
     String url = String.Format("http://www.icewars.de/portal/kb/de/sb.php?id={0}&md_hash={1}&typ=xml", iwid, iwhash);
     XmlNode xml = IWCache.Query(url, con, DBPrefix);
     switch (xml.SelectSingleNode("scann/scann_typ/id").InnerText) {
         case "2": { //Sondierung (Gebäude/Ress)
             GebScan s = new GebScan(iwid, iwhash);
             s.LoadXml(xml, filter);
             return s;
             }
         case "3": { //Sondierung (Schiffe/Def/Ress)
             SchiffScan s = new SchiffScan(iwid, iwhash);
             s.LoadXml(xml, filter);
             return s;
             }
     }
     throw new InvalidOperationException("Unbekannter Scan-Typ!");
 }
Beispiel #3
0
 public void LoadXml(XmlNode xml, WarFilter warFilter)
 {
     this.xml = xml;
     XmlNode planidata = xml.SelectSingleNode("scann/plani_data");
     XmlNode coords = planidata.SelectSingleNode("koordinaten");
     gal = uint.Parse(coords["gal"].InnerText);
     sol = uint.Parse(coords["sol"].InnerText);
     pla = uint.Parse(coords["pla"].InnerText);
     pla_typ = planidata.SelectSingleNode("planeten_typ/name").InnerText;
     obj_typ = planidata.SelectSingleNode("objekt_typ/name").InnerText;
     owner_name = planidata.SelectSingleNode("user/name").InnerText;
     owner_ally = planidata.SelectSingleNode("user/allianz_tag").InnerText;
     timestamp = uint.Parse(xml.SelectSingleNode("scann/timestamp").InnerText);
     ress = new ResourceSet();
     ress.ParseXml(xml.SelectSingleNode("scann/ressourcen"));
     WarFilter.War war = warFilter.getWar(owner_ally, timestamp);
     warID = war != null ? war.id : 0;
 }
Beispiel #4
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>>();
        }