Advertisement
Guest User

Untitled

a guest
Dec 14th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.68 KB | None | 0 0
  1. #include "player.h"
  2. #include "bufor.h"
  3. #include "serwer.h"
  4. #include "eventy.h"
  5. #include <vector>
  6. #include <iostream>
  7. #include <ctime>
  8. #include <queue>
  9. #include <fstream>
  10. using namespace std;
  11. struct porownajEventy
  12. {
  13. bool operator ()(eventy x, eventy y)
  14. {
  15. if (x.czas > y.czas) return true;
  16. if (x.czas < y.czas) return false;
  17. return false;
  18. }
  19. };
  20.  
  21. int main()
  22. {
  23.  
  24. int pasmo_low = 5, pasmo_high = 20, predkoc_odczytywania = 10;//wartosci w mBs/s
  25. int pojemnosc_pakietu = 40;//wartosc w mB
  26. int liczba_pakietow = 100;
  27. int pobrane_pakiety = 0;
  28. int pojemnosc = 30;
  29.  
  30. ///////////////////// WYZEJ STAWAINIE ZMIENNYCH DO SYMULACJI
  31. ofstream plik_czas("czas.txt");
  32. ofstream plik_bufor("bufor.txt");
  33. int zajete = 0;
  34. int czas = 0;//(liczony w sekundach)
  35. int aktywne_pasmo;
  36. int zaplenienie_bufora = 0;//liczone w sekudnach
  37. int czas_do_zmiany;
  38. srand(time(0));
  39.  
  40. serwer *serwer1 = new serwer(1000, pasmo_low, pasmo_high);
  41. player *player1 = new player(predkoc_odczytywania);
  42. bufor bufor1 = bufor(pojemnosc);
  43.  
  44. // robimy eventy i ustawaimy ich zmienne
  45. eventy poczotekProgramu = eventy(0, 0, "poczotekProgramu");
  46. eventy rozpoczeciePobierania = eventy(0, 0, "rozpoczeciePobierania");
  47. eventy zakonczeniePobierania = eventy(0, 0, "zakonczeniePobierania");
  48. eventy czekanieNaBufor = eventy(0, 0, "czekanieNaBufor");
  49. eventy koniecProgramu = eventy(0, 0, "koniecProgramu");
  50. eventy obecnyEvent = eventy(0, 0, "lol");
  51. eventy nastepnyEvent = eventy(0, 0, "lol");
  52. eventy losowanieZmianyPasma = eventy(0, 0, "L");
  53. eventy zmianaPasma = eventy(0, 0, "Z");
  54. eventy odtwarzanie = eventy(0, 1, "O");
  55. eventy buforowanie = eventy(0, 1, "B");
  56. eventy terminowy = eventy(0, 0, "lol");
  57.  
  58. // kolejka priorytetowa
  59. priority_queue < eventy, vector<eventy>, porownajEventy > kolejka;
  60.  
  61. //dodajemy pierwszy event
  62. kolejka.push(poczotekProgramu);
  63.  
  64. //usatalmy pasmo poczotkowe
  65. aktywne_pasmo = pasmo_high;
  66. // pętla programu
  67. pobrane_pakiety = 0;
  68. int i = 0;
  69. int k;
  70. i = (pojemnosc_pakietu / aktywne_pasmo) + 1;
  71.  
  72. for (k = 0; k < i; k++)
  73. {
  74. plik_bufor << "0" << endl;
  75. plik_czas << k << endl;
  76. }
  77.  
  78. while (kolejka.size() > 0)
  79. {
  80. if (pobrane_pakiety == liczba_pakietow)
  81. {
  82. if (zajete == 0)
  83. {
  84. break;
  85. }
  86. }
  87.  
  88. obecnyEvent = kolejka.top();
  89. cout << obecnyEvent;
  90. czas = obecnyEvent.czas;
  91. kolejka.pop();
  92.  
  93.  
  94.  
  95. /////////////////
  96. if (obecnyEvent.nazwa == "poczotekProgramu")
  97. {
  98. nastepnyEvent = losowanieZmianyPasma;
  99. nastepnyEvent.czas = czas;
  100. kolejka.push(nastepnyEvent);///////////////
  101. nastepnyEvent = rozpoczeciePobierania;
  102. nastepnyEvent.czas = czas;
  103. kolejka.push(nastepnyEvent);///////////
  104. nastepnyEvent = odtwarzanie;
  105. czas = czas + (pojemnosc_pakietu / aktywne_pasmo)+1;
  106. nastepnyEvent.czas = czas;
  107. kolejka.push(nastepnyEvent);
  108.  
  109. }
  110. if (obecnyEvent.nazwa == "O")
  111. {
  112. zajete = zajete - 1;
  113. plik_bufor << zajete << endl;
  114. plik_czas << czas << endl;
  115. if (zajete > 0)
  116. {
  117. nastepnyEvent = odtwarzanie;
  118. czas = czas + nastepnyEvent.czas_trwania;
  119. nastepnyEvent.czas = czas;
  120. kolejka.push(nastepnyEvent);
  121. }
  122. else
  123. {
  124. nastepnyEvent = buforowanie;
  125. czas = czas + nastepnyEvent.czas_trwania;
  126. nastepnyEvent.czas = czas;
  127. kolejka.push(nastepnyEvent);
  128. }
  129.  
  130. }
  131.  
  132. if (obecnyEvent.nazwa == "B")
  133. {
  134. plik_bufor << zajete << endl;
  135. plik_czas << czas << endl;
  136. if (zajete > 0)
  137. {
  138. nastepnyEvent = odtwarzanie;
  139. czas = czas + nastepnyEvent.czas_trwania;
  140. nastepnyEvent.czas = czas;
  141. kolejka.push(nastepnyEvent);
  142. }
  143. else
  144. {
  145. nastepnyEvent = buforowanie;
  146. czas = czas + nastepnyEvent.czas_trwania;
  147. nastepnyEvent.czas = czas;
  148. kolejka.push(nastepnyEvent);
  149. }
  150. }
  151.  
  152. /////////// JESLI EVENT TO LOSOWANIE PASMA
  153. if (obecnyEvent.nazwa == "L")
  154. {
  155. czas_do_zmiany = (rand() % 40) + 20;
  156. nastepnyEvent = zmianaPasma;
  157. czas = czas + czas_do_zmiany + losowanieZmianyPasma.czas_trwania;
  158. nastepnyEvent.czas = czas;
  159. kolejka.push(nastepnyEvent);/////////////////////
  160. }
  161. ////////////////// JESLI EVENT TO ZMIANA PASMA
  162. if (obecnyEvent.nazwa == "Z")
  163. {
  164. if (aktywne_pasmo == pasmo_high)
  165. {
  166. aktywne_pasmo = pasmo_low;
  167. }
  168. else
  169. {
  170. aktywne_pasmo = pasmo_high;
  171. }
  172. nastepnyEvent = losowanieZmianyPasma;
  173. czas = czas + zmianaPasma.czas_trwania;
  174. nastepnyEvent.czas = czas;
  175. kolejka.push(nastepnyEvent);////////////////
  176.  
  177. }
  178. /////////////////// JESLI EVENT TO ROZPOCZENCIE POBIERANIA
  179. if (obecnyEvent.nazwa == "rozpoczeciePobierania")
  180. {
  181. nastepnyEvent = zakonczeniePobierania;
  182. czas = czas + rozpoczeciePobierania.czas_trwania + (pojemnosc_pakietu / aktywne_pasmo);
  183. nastepnyEvent.czas = czas;
  184. kolejka.push(nastepnyEvent);///////////////
  185. }
  186. ////////////////////JESLI EVENT TO ZAKONCZENIE POBIERANIA
  187. if (obecnyEvent.nazwa == "zakonczeniePobierania")
  188. {
  189. zajete = zajete + (pojemnosc_pakietu / predkoc_odczytywania);
  190. pobrane_pakiety++;
  191. if (liczba_pakietow != pobrane_pakiety)
  192. {
  193. if (zajete <= bufor1.pojemnosc - (pojemnosc_pakietu / aktywne_pasmo))
  194. {
  195.  
  196. //zajete = zajete + (pojemnosc_pakietu / predkoc_odczytywania);
  197. nastepnyEvent = rozpoczeciePobierania;
  198. czas = czas + zakonczeniePobierania.czas_trwania;
  199. nastepnyEvent.czas = czas;
  200. kolejka.push(nastepnyEvent);
  201. }
  202. else
  203. {
  204. nastepnyEvent = rozpoczeciePobierania;
  205. czas = czas + +zakonczeniePobierania.czas_trwania + zajete - (bufor1.pojemnosc - (pojemnosc_pakietu / aktywne_pasmo));
  206. nastepnyEvent.czas = czas;
  207. kolejka.push(nastepnyEvent);
  208.  
  209. }
  210. }
  211. }
  212.  
  213.  
  214.  
  215. cout << zajete << endl;
  216.  
  217. }
  218.  
  219.  
  220.  
  221. getchar();
  222. getchar();
  223.  
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement