Advertisement
MikecIT

z1

Nov 20th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.54 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.IO;
  4.  
  5. namespace zadatak1
  6. {
  7.     delegate void SiloLogHandler(string status);
  8.  
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Silo silo = new Silo();
  14.             SiloMonitoring monitoring = new SiloMonitoring(silo);
  15.             monitoring.Start(1, 5);
  16.         }
  17.     }
  18.  
  19.     class Silo
  20.     {
  21.         public int Level { get; set; }
  22.         public string Status { get; set; }
  23.  
  24.         public Silo()
  25.         {
  26.             Level = 2;
  27.             Status = "polupun";
  28.         }
  29.     }
  30.  
  31.     class SiloMonitoring
  32.     {
  33.         private Silo silo;
  34.         private Thread thread;
  35.         private SiloLogHandler siloStatusChanged;
  36.  
  37.         public SiloMonitoring(Silo s)
  38.         {
  39.             silo = s;
  40.             thread = new Thread(Simulation);
  41.             siloStatusChanged += OnSiloStatusChangedConsole;
  42.             siloStatusChanged += OnSiloStatusChangedFile;
  43.         }
  44.  
  45.         public void Start(int seconds, int changeRate)
  46.         {
  47.             thread.Start(Tuple.Create(seconds, changeRate));
  48.         }
  49.  
  50.         private void Simulation(object obj)
  51.         {
  52.             Tuple<int, int> temp = (Tuple<int, int>)obj;
  53.             int seconds = temp.Item1;
  54.             int changeRate = temp.Item2;
  55.             while(silo.Status != "prazan")
  56.             {
  57.                 if (silo.Status != "pun")
  58.                 {
  59.                     silo.Level += changeRate;
  60.                     if (silo.Level >= 20)
  61.                     {
  62.                         silo.Status = "pun";
  63.                         silo.Level = 20;
  64.                         siloStatusChanged(silo.Status);
  65.                     }
  66.  
  67.                 }
  68.                 else
  69.                 {
  70.                     silo.Level -= changeRate;
  71.                     if (silo.Level <= 0)
  72.                     {
  73.                         silo.Status = "prazan";
  74.                         silo.Level = 0;
  75.                         siloStatusChanged(silo.Status);
  76.                     }
  77.                 }
  78.                 Thread.Sleep(seconds * 1000);
  79.             }
  80.             Thread.Sleep(5000);
  81.         }
  82.  
  83.         private void OnSiloStatusChangedConsole(string status)
  84.         {
  85.             Console.WriteLine($"Silos je {status}");
  86.         }
  87.  
  88.         private void OnSiloStatusChangedFile(string status)
  89.         {
  90.             using (StreamWriter writer = File.AppendText("siloLog.txt"))
  91.             {
  92.                 writer.WriteLine($"Silos je {status}");
  93.             }
  94.         }
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement