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; }
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!"); }
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; }
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>>(); }