TheBulgarianWolf

Agent(PART 2)

Dec 3rd, 2020
663
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5.  
  6. namespace Area51Elevator
  7. {
  8.     class Agent
  9.     {
  10.         int count = 0;
  11.  
  12.         public enum AgentCurrentFloor { G, S, T1, T2 };
  13.  
  14.         public AgentCurrentFloor CurrentAgentFloor { get; set; }
  15.         public string AgentLevel { get; set; }
  16.  
  17.         public string AgentNumber { get; set; }
  18.  
  19.         public Elevator Elevator { get; set; }
  20.  
  21.         public bool inTheBase { get; set; }
  22.  
  23.         static Random rand = new Random();
  24.  
  25.         ManualResetEvent eventFinishedWork = new ManualResetEvent(false);
  26.  
  27.         public BaseFloors GetRandomFloor()
  28.         {
  29.             int leaveOrNot = rand.Next(1, 3);
  30.             int floor = rand.Next(1, 5);
  31.             if (floor == 1)
  32.             {
  33.  
  34.                 return BaseFloors.S;
  35.             }
  36.             else if (floor == 2)
  37.             {
  38.  
  39.                 return BaseFloors.T1;
  40.             }
  41.             else if (floor == 3)
  42.             {
  43.  
  44.                 return BaseFloors.T2;
  45.             }
  46.             else
  47.             {
  48.                 return BaseFloors.G;
  49.             }
  50.  
  51.            
  52.  
  53.         }
  54.  
  55.         private void EnteredTheBase()
  56.         {
  57.             Console.WriteLine("Agent number " + AgentNumber + " with security level " + AgentLevel + " entered the base and is currently at level G.");
  58.             inTheBase = true;
  59.             Thread.Sleep(400);
  60.         }
  61.  
  62.         private void ElevatorActions()
  63.         {
  64.             while (inTheBase == true)
  65.             {
  66.                 int someAction = rand.Next(1, 7);
  67.                 Thread.Sleep(300);
  68.                 if(someAction == 5 || someAction == 3)
  69.                 {
  70.                     Console.WriteLine(AgentNumber + " waits for the elevator.");
  71.                     Elevator.EnterElevator(this);
  72.                 }
  73.                
  74.                  
  75.  
  76.                 if(this.CurrentAgentFloor == AgentCurrentFloor.G && someAction == 1)
  77.                 {
  78.                     inTheBase = false;
  79.                     Console.WriteLine("Agent number" + this.AgentNumber + " finished work.");
  80.                     eventFinishedWork.Set();
  81.                 }
  82.                
  83.                
  84.             }
  85.         }
  86.  
  87.         private void StartTheEventsInternal()
  88.         {
  89.             EnteredTheBase();//Initial state for each agent-he enters the base
  90.             while(inTheBase == true)
  91.             {
  92.                 int randomNum = rand.Next(20);
  93.                 if(randomNum < 4)
  94.                 {
  95.                     ElevatorActions();
  96.                    
  97.                 }
  98.                 else
  99.                 {
  100.                     Thread.Sleep(5000);
  101.                     ElevatorActions();
  102.                 }
  103.                
  104.             }
  105.            
  106.         }
  107.  
  108.  
  109.         public void StartTheEvents()
  110.         {
  111.             Thread t = new Thread(StartTheEventsInternal);
  112.             t.Start();
  113.  
  114.         }
  115.  
  116.         public bool FinishWork
  117.         {
  118.             get
  119.             {
  120.                 return eventFinishedWork.WaitOne(0);
  121.             }
  122.         }
  123.     }
  124. }
  125.  
RAW Paste Data