public async Task WriteRouteToDatabase(Aap aap, DataTable monkeyrecords, DataTable logs) { using (SqlConnection connection = new SqlConnection(ConnString)) { connection.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = "Logs"; bulkCopy.ColumnMappings.Add("Id", "Id"); bulkCopy.ColumnMappings.Add("woodID", "woodID"); bulkCopy.ColumnMappings.Add("monkeyID", "monkeyID"); bulkCopy.ColumnMappings.Add("message", "message"); bulkCopy.WriteToServer(logs); bulkCopy.DestinationTableName = "MonkeyRecords"; bulkCopy.ColumnMappings.Clear(); bulkCopy.ColumnMappings.Add("recordID", "recordID"); bulkCopy.ColumnMappings.Add("monkeyID", "monkeyID"); bulkCopy.ColumnMappings.Add("monkeyName", "monkeyName"); bulkCopy.ColumnMappings.Add("woodID", "woodID"); bulkCopy.ColumnMappings.Add("seqnr", "seqnr"); bulkCopy.ColumnMappings.Add("treeID", "treeID"); bulkCopy.ColumnMappings.Add("x", "x"); bulkCopy.ColumnMappings.Add("y", "y"); bulkCopy.WriteToServer(monkeyrecords); } } Console.WriteLine($"write route to database wood: {aap.Bos.Id}, monkey: {aap.Naam} -end"); }
public Log(Aap aap, Boom boom, TimeSpan elapsedTime, int seqNr) { Aap = aap; Boom = boom; ElapsedTime = elapsedTime; SeqNr = seqNr; }
private void InitialiseerAap(Aap aap) { //voeg aap toe aan lijst van apen apen.Add(aap); //update lijst van bomen met boom met aap in int teUpdatenBoom = bomen.IndexOf(aap.bezochteBomen[0]); bomen[teUpdatenBoom].apenInBoom.Add(aap); }
public async Task OntsnappingsRoutePerAap(Aap aap) { Console.WriteLine($"Start calculating escape route for wood: {aap.Bos.Id}, monkey: {aap.Naam}"); while (aap.Ontsnapt != true) { aap.Sprong(); } await CreateRoutesDatatables(aap); Console.WriteLine($"End calculating escape route for wood: {aap.Bos.Id}, monkey: {aap.Naam}"); }
private double LengteTussenAapEnRand(Aap aap) { Boom currentboom = aap.bezochteBomen.Last(); double lengte = (new List <double>() { yMaxWaarde - currentboom.yCoordinaat, xMaxWaarde - currentboom.xCoordinaat, currentboom.yCoordinaat - yMinWaarde, currentboom.xCoordinaat - xMinWaarde }).Min(); return(lengte); }
private void VerwijderAap(Aap aap) { if (apen.Contains(aap)) { log.AddAap(aap); apen.Remove(aap); Console.WriteLine($"Aap {aap} verwijdert uit lijst van apen."); } else { Console.WriteLine($"Aap {aap} niet gevonden in lijst van apen"); } }
public async Task Escape(Bos bos, Stopwatch stopwatch) { Console.WriteLine($"start escape wood {bos.Id}"); DatabaseManager dbm = new DatabaseManager(@"Data Source=LAPTOP-1U6AQSEQ\SQLEXPRESS;Initial Catalog=EscapeFromTheWoods;Integrated Security=True"); List <Task> tasks = new List <Task>(); tasks.Add(Task.Run(() => dbm.AddWoodRecords(bos))); Random rnd = new Random(); for (int i = 0; i < bos.Apen.Count; i++) { Console.WriteLine($"{bos.Apen[i].Naam} starts escape"); Aap aap = bos.Apen[i]; stopwatch.Start(); Boom beginboom = bos.Bomen[rnd.Next(1, bos.Bomen.Count - 1)]; bos.Graphics.FillCircle(new SolidBrush(aap.Color), beginboom.X, beginboom.Y, 3); aap.TouchedBomen.Add(beginboom); int seqNr = 1; while (beginboom != null) { Log log = new Log(aap, beginboom, stopwatch.Elapsed, seqNr); aap.Logs.Add(log); Boom nieuweBoom = bos.Bomen.OrderBy(boom => BerekenAfstand(boom, beginboom)).Except(aap.TouchedBomen).First(); if (DistanceToBorder(beginboom, bos.Bitmap) > BerekenAfstand(beginboom, nieuweBoom)) { bos.Graphics.DrawLine(aap.Pen, beginboom.X, beginboom.Y, nieuweBoom.X, nieuweBoom.Y); aap.TouchedBomen.Add(nieuweBoom); beginboom = nieuweBoom; } else { beginboom = null; } Console.WriteLine(log.ToString()); tasks.Add(Task.Run(() => dbm.AddLogs(bos.Id, log))); tasks.Add(Task.Run(() => dbm.AddMonkeyRecords(bos.Id, log))); seqNr++; } Console.WriteLine($"{bos.Apen[i].Naam} has escaped"); } Writer writer = new Writer(); tasks.Add(Task.Run(() => writer.WriteLogs(bos))); Task.WaitAll(tasks.ToArray()); bos.Bitmap.Save(Path.Combine(@"C:\Users\davy\Documents\data\EscapeFromTheWoods", $"{bos.Id}_Escapethewoods.Jpeg"), ImageFormat.Jpeg); Console.WriteLine($"Stop escape wood {bos.Id}"); }
public async Task CreateRoutesDatatables(Aap aap) { Console.WriteLine($"write route to database wood: {aap.Bos.Id}, monkey: {aap.Naam} -start"); DataTable MonkeyRecords = new DataTable(); MonkeyRecords.Clear(); DataTable Logs = new DataTable(); Logs.Clear(); MonkeyRecords.Columns.Add(new DataColumn("recordID", typeof(int))); MonkeyRecords.Columns.Add(new DataColumn("monkeyID", typeof(int))); MonkeyRecords.Columns.Add(new DataColumn("monkeyName", typeof(string))); MonkeyRecords.Columns.Add(new DataColumn("woodID", typeof(int))); MonkeyRecords.Columns.Add(new DataColumn("seqnr", typeof(int))); MonkeyRecords.Columns.Add(new DataColumn("treeID", typeof(int))); MonkeyRecords.Columns.Add(new DataColumn("x", typeof(int))); MonkeyRecords.Columns.Add(new DataColumn("y", typeof(int))); Logs.Columns.Add(new DataColumn("Id", typeof(int))); Logs.Columns.Add(new DataColumn("woodID", typeof(int))); Logs.Columns.Add(new DataColumn("monkeyID", typeof(int))); Logs.Columns.Add(new DataColumn("message", typeof(string))); int seqnr = 1; foreach (Boom boom in aap.BezochteBomen) { DataRow dr = MonkeyRecords.NewRow(); MonkeyRecordId++; dr[0] = MonkeyRecordId; dr[1] = aap.Id; dr[2] = aap.Naam; dr[3] = boom.Bos.Id; dr[4] = seqnr; dr[5] = boom.Id; dr[6] = boom.X; dr[7] = boom.Y; MonkeyRecords.Rows.Add(dr); seqnr++; } foreach (string logstring in aap.LogsPerAap) { DataRow dr = Logs.NewRow(); LogsId++; dr[0] = LogsId; dr[1] = aap.Bos.Id; dr[2] = aap.Id; dr[3] = logstring; } await WriteRouteToDatabase(aap, MonkeyRecords, Logs); }
public void SpringAap(Aap aap) { Tuple <double, Boom> result = null; double lengteRand = 0; Task zoekBoom = Task.Run(() => { result = ZoekDichtsteBoom(aap); }); Task lengte = Task.Run(() => { lengteRand = LengteTussenAapEnRand(aap); }); Task.WaitAll(zoekBoom, lengte); double dichtsteLengte = result.Item1; Boom dichtsteBoom = result.Item2; if (dichtsteLengte < lengteRand) { aap.Spring(dichtsteBoom); SpringAap(aap); } else { VerwijderAap(aap); } }
private Tuple <double, Boom> ZoekDichtsteBoom(Aap aap) { Console.WriteLine($"start calculating escape route for wood: {id}, monkey: {aap.naam}"); Boom huidigeBoom = aap.bezochteBomen.Last(); double dichtste = double.MaxValue; Boom dichtsteBoom = null; foreach (Boom boom in bomen) { if (!aap.bezochteBomen.Contains(boom)) { double lengte = LengteTussenBomen(boom, huidigeBoom); if (lengte != 0) { if (lengte < dichtste) { dichtste = lengte; dichtsteBoom = boom; } } } } return(new Tuple <double, Boom>(dichtste, dichtsteBoom)); }
public void AddAap(Aap aap) { ontsnapteApen.Add(aap); }
private static DataSet GetDataTables(Bos bos) { Console.WriteLine("getting info"); //WoodRecords DataTable woodRecords = new DataTable("WoodRecords"); woodRecords.Columns.Add("recordId", typeof(int)); woodRecords.Columns.Add("woodID", typeof(int)); woodRecords.Columns.Add("treeID", typeof(int)); woodRecords.Columns.Add("x", typeof(int)); woodRecords.Columns.Add("y", typeof(int)); woodRecords.PrimaryKey = new DataColumn[] { woodRecords.Columns["recordId"] }; //MonkeyRecords DataTable monkeyRecords = new DataTable("MonkeyRecords"); monkeyRecords.Columns.Add("recordID", typeof(int)); monkeyRecords.Columns.Add("monkeyID", typeof(int)); monkeyRecords.Columns.Add("monkeyName", typeof(string)); monkeyRecords.Columns.Add("woodID", typeof(int)); monkeyRecords.Columns.Add("seqnr", typeof(int)); monkeyRecords.Columns.Add("treeID", typeof(int)); monkeyRecords.Columns.Add("x", typeof(int)); monkeyRecords.Columns.Add("y", typeof(int)); monkeyRecords.PrimaryKey = new DataColumn[] { monkeyRecords.Columns["recordID"] }; //Logs DataTable logs = new DataTable("Logs"); logs.Columns.Add("Id", typeof(int)); logs.Columns.Add("woodID", typeof(int)); logs.Columns.Add("monkeyID", typeof(int)); logs.Columns.Add("message", typeof(string)); logs.PrimaryKey = new DataColumn[] { logs.Columns["Id"] }; #region datatables aanvullen //WoodRecords int bosId = bos.id; for (int i = 0; i < bos.bomen.Count; i++) { Boom currentBoom = bos.bomen[i]; woodRecords.Rows.Add(woodRecordID, bosId, currentBoom.id, currentBoom.xCoordinaat, currentBoom.yCoordinaat); woodRecordID++; } //MonkeyRecords for (int i = 0; i < bos.log.ontsnapteApen.Count; i++) { Aap currentAap = bos.log.ontsnapteApen[i]; for (int seqnr = 0; seqnr < currentAap.bezochteBomen.Count; seqnr++) { Boom currentBoom = currentAap.bezochteBomen[seqnr]; monkeyRecords.Rows.Add(monkeyRecordID, currentAap.id, currentAap.naam, bosId, seqnr, currentBoom.id, currentBoom.xCoordinaat, currentBoom.yCoordinaat); monkeyRecordID++; //Logs logs.Rows.Add(logID, bosId, currentAap.id, $"{currentAap.naam} is now in tree {currentBoom.id} at location ({currentBoom.xCoordinaat},{currentBoom.yCoordinaat})"); logID++; } } #endregion //create DataSet => kan gebruikt worden om xml mee te maken DataSet set = new DataSet("EscapeFromTheWoods"); set.Tables.Add(woodRecords); set.Tables.Add(monkeyRecords); set.Tables.Add(logs); return(set); }