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");
 }
Exemplo n.º 2
0
 public Log(Aap aap, Boom boom, TimeSpan elapsedTime, int seqNr)
 {
     Aap         = aap;
     Boom        = boom;
     ElapsedTime = elapsedTime;
     SeqNr       = seqNr;
 }
Exemplo n.º 3
0
        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}");
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 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);
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 10
0
        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));
        }
Exemplo n.º 11
0
 public void AddAap(Aap aap)
 {
     ontsnapteApen.Add(aap);
 }
Exemplo n.º 12
0
        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);
        }