void Save() { XmlData scoreFile=new XmlData(highscorePath, true); XmlNode root=scoreFile.AddRoot("xml"); foreach(KeyValuePair<string, int> pair in userHighscore) { XmlNode score=scoreFile.AddElement(root, "Score"); scoreFile.AddAttribute(score, "name", pair.Key); scoreFile.AddAttribute(score, "value", pair.Value); } scoreFile.Save(); }
public static void Main(string[] args) { //Console Console.WriteLine("Initializing sensor..."); //Load config XmlData config; try { config=new XmlData("sensor.xml"); } catch(Exception e) { Console.WriteLine("Konfiguration konnte nicht gelesen werden."); Console.WriteLine(e.ToString()); return; } bool miscCheckCertificates=Convert.ToBoolean(config.GetElementAsString("xml.misc.checkcertificates")); if(miscCheckCertificates==false) { //Disable certificate check ServicePointManager.ServerCertificateValidationCallback=delegate { return true; }; } bool verbose=Convert.ToBoolean(config.GetElementAsString("xml.misc.verbose")); string apiToken=config.GetElementAsString("xml.api.token"); string apiUrl=config.GetElementAsString("xml.api.url"); //EAPI Setup EAPI eAPI=new EAPI(apiUrl, apiToken); #region Network scan Console.WriteLine("Scan network..."); //Scan network Dictionary<string, List<NetworkEntry>> networkScans=new Dictionary<string, List<NetworkEntry>>(); List<XmlNode> networkSegments=config.GetElements("xml.network.segment"); foreach(XmlNode node in networkSegments) { bool active=Convert.ToBoolean(node["active"].InnerText); if(!active) continue; string key=node.Attributes["key"].Value; Console.WriteLine("Scan network segment {0}...", key); //IP Ranges List<string> segmentIPRanges=new List<string>(); foreach(XmlNode childNode in node.ChildNodes) { if(childNode.LocalName=="iprange") segmentIPRanges.Add(childNode.InnerText); } //Scan ranges List<NetworkEntry> entries=new List<NetworkEntry>(); foreach(string segmentIPRange in segmentIPRanges) { NetworkScanner scanner=new NetworkScanner(); List<NetworkEntry> segmentEntries=scanner.GetNetworkInformation(segmentIPRange); Console.WriteLine("Detected network devices in segment {0}/{1}: {2}", key, segmentIPRange, segmentEntries.Count); if(verbose) { foreach(NetworkEntry networkEntry in segmentEntries) { Console.WriteLine("Detected network device: {0} / {1} ({2}, {3} ms)", networkEntry.IP, networkEntry.Hostname, networkEntry.Up?"online":"offline", networkEntry.RoundtripTime); } } entries.AddRange(segmentEntries); } networkScans.Add(key, entries); } #endregion #region Detection Console.WriteLine("Start detection..."); //Entity Detection int countEntities=0; bool entityDetection=Convert.ToBoolean(config.GetElementAsString("xml.detection.entity.active")); if(entityDetection) { Console.WriteLine("Start entity detection..."); string sensorType=config.GetElementAsString("xml.detection.entity.sensortype"); string networkSegment=config.GetElementAsString("xml.detection.entity.networksegment"); int minimumCount=Convert.ToInt32(config.GetElementAsString("xml.detection.entity.minimumcount")); TimeSpan minimumTime=new TimeSpan(0, 0, Convert.ToInt32(config.GetElementAsString("xml.detection.entity.minimumtime"))); long significantTimeAsLong=Convert.ToInt64(config.GetElementAsString("xml.detection.entity.significanttime")); DateTime significantTime=new DateTime(significantTimeAsLong); if(sensorType=="network") { Console.WriteLine("Start entity detection with sensor type network..."); if(networkScans.ContainsKey(networkSegment)) { List<NetworkEntry> segmentEntries=networkScans[networkSegment]; //Check if minimum count is reached if(segmentEntries.Count>minimumCount) { if(significantTimeAsLong==0) { significantTime=DateTime.Now; config.WriteElement("xml.detection.entity.significanttime", significantTime.Ticks.ToString()); } //Check if minimum time is reached if(DateTime.Now>significantTime+minimumTime) { countEntities=segmentEntries.Count; } } else { config.WriteElement("xml.detection.entity.significanttime", "0"); } } else { Console.WriteLine("Network segment for detection not found."); } } } #endregion #region API Console.WriteLine("Transfer sensor data to API..."); //Write Network informations into API Database int countDevices=0; foreach(KeyValuePair<string, List<NetworkEntry>> pair in networkScans) { countDevices+=pair.Value.Count; eAPI.SetStatus(pair.Key, pair.Value.Count); } eAPI.SetStatus("devices", countDevices); //Write Entites eAPI.SetStatus("entities", countEntities); #endregion //set last run config.WriteElement("xml.misc.lastrun", DateTime.Now.Ticks.ToString()); config.Save(); }
public void Save(string filename, bool compressed=true) { XmlData fileData=new XmlData(); #region Root speichern und Attribute anhängen XmlNode root=fileData.AddRoot("map"); fileData.AddAttribute(root, "version", MapVersion); fileData.AddAttribute(root, "orientation", Orientation); fileData.AddAttribute(root, "width", Width); fileData.AddAttribute(root, "height", Height); fileData.AddAttribute(root, "tilewidth", TileWidth); fileData.AddAttribute(root, "tileheight", TileHeight); #endregion #region Properties speichern if(Properties.Count>0) { XmlNode properties=fileData.AddElement(root, "properties"); foreach(Property prop in Properties) { XmlNode propertyXml=fileData.AddElement(properties, "property"); fileData.AddAttribute(propertyXml, "name", prop.Name); fileData.AddAttribute(propertyXml, "value", prop.Value); } } #endregion #region Tilesets foreach(TilesetData tileset in Tilesets) { XmlNode tilesetXml=fileData.AddElement(root, "tileset"); fileData.AddAttribute(tilesetXml, "firstgid", tileset.firstgid); fileData.AddAttribute(tilesetXml, "name", tileset.name); fileData.AddAttribute(tilesetXml, "tilewidth", tileset.tilewidth); fileData.AddAttribute(tilesetXml, "tileheight", tileset.tileheight); XmlNode imageTag=fileData.AddElement(tilesetXml, "image"); fileData.AddAttribute(imageTag, "source", tileset.imgsource); foreach(Tile tile in tileset.Tiles) { XmlNode tileTag=fileData.AddElement(tilesetXml, "tile"); fileData.AddAttribute(tileTag, "id", tile.ID); if(tile.Properties.Count>0) { XmlNode properties=fileData.AddElement(tileTag, "properties"); foreach(Property prop in tile.Properties) { XmlNode propertyXml=fileData.AddElement(properties, "property"); fileData.AddAttribute(propertyXml, "name", prop.Name); fileData.AddAttribute(propertyXml, "value", prop.Value); } } } } #endregion #region Layer foreach(LayerData layer in Layers) { XmlNode layerXml=fileData.AddElement(root, "layer"); fileData.AddAttribute(layerXml, "name", layer.name); fileData.AddAttribute(layerXml, "width", layer.width); fileData.AddAttribute(layerXml, "height", layer.height); XmlNode dataTag=fileData.AddElement(layerXml, "data", ConvertLayerDataToString(layer, compressed)); fileData.AddAttribute(dataTag, "encoding", "base64"); if(compressed) { fileData.AddAttribute(dataTag, "compression", "gzip"); } } #endregion #region Objectlayer foreach(Objectgroup objGroup in ObjectLayers) { XmlNode objGroupXml=fileData.AddElement(root, "objectgroup"); fileData.AddAttribute(objGroupXml, "name", objGroup.Name); fileData.AddAttribute(objGroupXml, "width", objGroup.Width); fileData.AddAttribute(objGroupXml, "height", objGroup.Height); fileData.AddAttribute(objGroupXml, "x", objGroup.X); fileData.AddAttribute(objGroupXml, "y", objGroup.Y); foreach(Object obj in objGroup.Objects) { XmlNode objXml=fileData.AddElement(objGroupXml, "object"); fileData.AddAttribute(objXml, "name", obj.Name); fileData.AddAttribute(objXml, "type", obj.Type); fileData.AddAttribute(objXml, "x", obj.X); fileData.AddAttribute(objXml, "y", obj.Y); fileData.AddAttribute(objXml, "width", obj.Width); fileData.AddAttribute(objXml, "height", obj.Height); XmlNode objPropertiesXml=fileData.AddElement(objXml, "properties"); foreach(Property objProp in obj.Properties) { XmlNode propertyXml=fileData.AddElement(objPropertiesXml, "property"); fileData.AddAttribute(propertyXml, "name", objProp.Name); fileData.AddAttribute(propertyXml, "value", objProp.Value); } } } #endregion fileData.Save(filename); }