public void Test5()
        {
            var systemResources = new[]
            {
                new SystemResource(ResourceName.A, 10),
                new SystemResource(ResourceName.B, 9),
                new SystemResource(ResourceName.C, 3),
            };

            var system = new SystemResources(systemResources, new NoOpSystemLog());

            var processResources = new[]
            {
                new BankProcessResource(ResourceName.A, 1),
                new BankProcessResource(ResourceName.B, 2),
                new BankProcessResource(ResourceName.C, 1),
            };

            var process = new BankProcess("P1", 100, processResources);

            system.ClaimResources(process).Should().BeTrue();
            system.GetSystemSummary().Should().Be("Name A - Cur:9 Max:10 | Name B - Cur:7 Max:9 | Name C - Cur:2 Max:3");
            system.RestoreResources(process);
            system.GetSystemSummary().Should().Be("Name A - Cur:10 Max:10 | Name B - Cur:9 Max:9 | Name C - Cur:3 Max:3");
        }
        public void Test3()
        {
            var systemResources = new[]
            {
                new SystemResource(ResourceName.A, 2),
                new SystemResource(ResourceName.B, 3),
            };

            var system = new SystemResources(systemResources, new NoOpSystemLog());

            var processResources = new[]
            {
                new BankProcessResource(ResourceName.A, 1),
                new BankProcessResource(ResourceName.B, 1),
            };

            var process = new BankProcess("P1", 100, processResources);

            system.ClaimResources(process).Should().BeTrue();
            system.GetSystemSummary().Should().Be("Name A - Cur:1 Max:2 | Name B - Cur:2 Max:3");
        }
        public void Test1()
        {
            var systemResources = new[]
            {
                new SystemResource(ResourceName.A, 0),
                new SystemResource(ResourceName.B, 0),
            };

            var system = new SystemResources(systemResources, new NoOpSystemLog());

            var processResources = new[]
            {
                new BankProcessResource(ResourceName.A, 1),
                new BankProcessResource(ResourceName.B, 1),
            };

            var process = new BankProcess("P1", 100, processResources);

            system.ClaimResources(process).Should().BeFalse();
            system.GetSystemSummary().Should().Be("Name A - Cur:0 Max:0 | Name B - Cur:0 Max:0");
        }
Exemple #4
0
        // The logic and models depends on the file template
        private async void saveToDBAsync()
        {
            string templ = comboBox2?.SelectedItem?.ToString();

            switch (templ)
            {
            case "Процессы банка":
                await Task.Run(() =>
                {
                    List <string> bankDepartments = new List <string>();

                    // patterns for process code
                    string patternTheme   = @"^\w?[0-9]+$";                 // 2 hierarchy level
                    string patternAction  = @"^\w?[0-9]+\.[0-9]+$";         // 3 hierarchy level
                    string patternProcess = @"^\w?[0-9]+\.[0-9]+\.[0-9]+$"; // 4 hierarchy level
                    using (BankProcessContext bankProcessDB = new BankProcessContext())
                    {
                        // actual models object
                        // 1 hierarchy level
                        BankProcType bankProcType = null;
                        // 2 hierarchy level
                        BankTheme bankTheme = null;
                        // 3 hierarchy level
                        BankAction bankAction = null;
                        // 4 hierarchy level
                        BankProcess bankProcess = null;
                        // catalog
                        BankDepartment bankDepartment = null;
                        // file processing
                        foreach (BankProcCSV bankProc in filesLoaded[templ])
                        {
                            if (bankProc.Department == "")
                            {
                                if (bankProc.Id == "" &&
                                    bankProcessDB.BankProcTypes.FirstOrDefault(p => p.Name == bankProc.Name) == null)
                                {
                                    // Row to BankProcTypes (1 lvl)
                                    bankProcType = new BankProcType {
                                        Name = bankProc.Name
                                    };
                                    bankProcessDB.BankProcTypes.Add(bankProcType);
                                }
                                else
                                {
                                    if (Regex.IsMatch(bankProc.Id, patternTheme) &&
                                        bankProcessDB.BankThemes.FirstOrDefault(p => p.Code == bankProc.Id) == null)
                                    {
                                        // Row to BankThemes (2 lvl)
                                        bankTheme = new BankTheme {
                                            Name = bankProc.Name, Code = bankProc.Id, BankProcType = bankProcType
                                        };
                                        bankProcessDB.BankThemes.Add(bankTheme);
                                    }

                                    if (Regex.IsMatch(bankProc.Id, patternAction) &&
                                        bankProcessDB.BankActions.FirstOrDefault(p => p.Code == bankProc.Id) == null)
                                    {
                                        // Row to BankActions (3 lvl)
                                        bankAction = new BankAction {
                                            Name = bankProc.Name, Code = bankProc.Id, BankTheme = bankTheme
                                        };
                                        bankProcessDB.BankActions.Add(bankAction);
                                    }
                                }
                            }
                            else
                            {
                                if (bankProc.Id != "")
                                {
                                    if (Regex.IsMatch(bankProc.Id, patternProcess) &&
                                        bankProcessDB.BankProcesses.FirstOrDefault(p => p.Code == bankProc.Id) == null)
                                    {
                                        // Row to BankProcesses (4 lvl)
                                        if (!bankDepartments.Contains(bankProc.Department))
                                        {
                                            // Row to BankDepartments (catalog)
                                            bankDepartments.Add(bankProc.Department);
                                            bankDepartment = new BankDepartment {
                                                Name = bankProc.Department
                                            };
                                            bankProcessDB.BankDepartments.Add(bankDepartment);
                                        }
                                        else
                                        {
                                            bankDepartment = bankProcessDB.BankDepartments.FirstOrDefault(d => d.Name == bankProc.Department);
                                        }

                                        bankProcess = new BankProcess {
                                            Name = bankProc.Name, Code = bankProc.Id, BankAction = bankAction, BankDepartment = bankDepartment
                                        };
                                        bankProcessDB.BankProcesses.Add(bankProcess);
                                    }
                                }
                                else
                                {
                                    // Logic for empty Rows from file
                                }
                            }
                            bankProcessDB.SaveChanges();
                        }
                    }
                });

                comboBox1.Items.AddRange(new string[] { "BankProcTypes", "BankThemes", "BankActions", "BankProcesses", "BankDepartments" });
                comboBox1.SelectedItem = "BankProcesses";
                label6.Text            = "Файл сохранен в БД";
                break;

            default:
                label6.Text = "Укажите шаблон";
                break;
            }
        }
Exemple #5
0
 private void Form1_Load(object sender, EventArgs e)
 {
     ptr = new BankProcess(Bank.startup);
 }
Exemple #6
0
        public static void Lab4_Bank()
        {
            const double customerDelayIn         = 0.5;
            const double customerServiceDelay    = 1;
            const double initialCustomerIn       = 0.1;
            const int    initialQueueForCarLines = 2;
            const int    windowMaxQueue          = 3;

            var q1 = new Queue <EventBase>(initialQueueForCarLines);
            var q2 = new Queue <EventBase>(initialQueueForCarLines);

            for (int i = 0; i < initialQueueForCarLines; i++)
            {
                q1.Enqueue(new EventBase {
                    createTime = 0.0
                });
                q2.Enqueue(new EventBase {
                    createTime = 0.0
                });
            }

            var creator = new Creator(customerDelayIn)
            {
                distribution = NumberGenerators.Distributions.EXPONENTIAL,
                tnext        = initialCustomerIn
            };

            var window1 = new BankProcess("window1", customerServiceDelay, windowMaxQueue)
            {
                //queue = initialQueueForCarLines,
                eventQueue = q1
                             //tnext = NumberGenerators.RandomNumberGenerators.Normal(1d, 0.3)
            };

            window1.inAct(new EventBase {
                createTime = 0.0
            });

            var window2 = new BankProcess("window2", customerServiceDelay, windowMaxQueue)
            {
                //queue = initialQueueForCarLines,
                eventQueue = q2
                             //tnext = NumberGenerators.RandomNumberGenerators.Normal(1d, 0.3)
            };

            window2.inAct(new EventBase {
                createTime = 0.0
            });

            var bankExit = new BankDesposer("exit");

            var windowChoice = new BankAutoBranch(new List <(Element element, double percent)>
            {
                (window1, 0.5),
                (window2, 0.5)
            });

            window1.windowsChoose = windowChoice;
            window2.windowsChoose = windowChoice;

            creator.nextElement = windowChoice;
            window1.nextElement = bankExit;
            window2.nextElement = bankExit;

            var model = new SimulationModel(new List <Element>
            {
                creator,
                window1,
                window2,
                bankExit
            },
                                            SimulateTime);

            model.Simulate(false);
            model.PrintResultStatistic();
            bankExit.printResult();
            Console.WriteLine("Average clinets in bank: " + (window1.avgClientInBank + window2.avgClientInBank) / SimulateTime);
            Console.WriteLine("Number of line changes: " + windowChoice.QueueChanges);
        }
Exemple #7
0
 private void button5_Click(object sender, EventArgs e)
 {
     ptr += Bank.Backup;
 }
Exemple #8
0
 private void button6_Click(object sender, EventArgs e)
 {
     ptr = new BankProcess(Bank.startup);
 }
Exemple #9
0
 private void button4_Click(object sender, EventArgs e)
 {
     ptr += Bank.Mail;
 }
Exemple #10
0
 private void button3_Click(object sender, EventArgs e)
 {
     ptr += Bank.Powermanagement;
 }
Exemple #11
0
 private void button2_Click(object sender, EventArgs e)
 {
     ptr += Bank.Lights;
 }
Exemple #12
0
 private void button1_Click(object sender, EventArgs e)
 {
     ptr += Bank.Door;
 }
Exemple #13
0
        public void Run()
        {
            var systemResources = new[]
            {
                new SystemResource(ResourceName.A, 10),
                new SystemResource(ResourceName.B, 10),
                new SystemResource(ResourceName.C, 10),
                new SystemResource(ResourceName.D, 10),
            };

            var stopwatch = new Stopwatch();

            var consoleSystemLog = new ConsoleSystemLog(
                stopwatch);

            var system = new SystemResources(systemResources, consoleSystemLog);

            // **

            var processes = new List <BankProcess>();

            var resourcesSignal = new ManualResetEvent(false);

            var process1 = new BankProcess("P1", 500, new[]
            {
                new BankProcessResource(ResourceName.A, 5),
                new BankProcessResource(ResourceName.B, 5),
                new BankProcessResource(ResourceName.C, 6),
                new BankProcessResource(ResourceName.D, 5),
            },
                                           resourcesSignal);

            processes.Add(process1);

            var process2 = new BankProcess("P2", 10, new[]
            {
                new BankProcessResource(ResourceName.A, 7),
                new BankProcessResource(ResourceName.B, 1),
                new BankProcessResource(ResourceName.C, 3),
                new BankProcessResource(ResourceName.D, 9),
            },
                                           resourcesSignal);

            processes.Add(process2);

            var process3 = new BankProcess("P3", 300, new[]
            {
                new BankProcessResource(ResourceName.A, 1),
                new BankProcessResource(ResourceName.B, 1),
                new BankProcessResource(ResourceName.C, 1),
                new BankProcessResource(ResourceName.D, 1),
            },
                                           resourcesSignal);

            processes.Add(process3);

            var tasks = new List <Task>();

            stopwatch.Start();

            foreach (var process in processes)
            {
                var task = Task.Run(() => { process.Start(system); });

                tasks.Add(task);
            }

            foreach (var task in tasks)
            {
                task.Wait();
            }

            stopwatch.Stop();
            resourcesSignal.Dispose();
        }