Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "player.h"
- #include "bufor.h"
- #include "serwer.h"
- #include "eventy.h"
- #include <vector>
- #include <iostream>
- #include <ctime>
- #include <queue>
- #include <fstream>
- using namespace std;
- struct porownajEventy
- {
- bool operator ()(eventy x, eventy y)
- {
- if (x.czas > y.czas) return true;
- if (x.czas < y.czas) return false;
- return false;
- }
- };
- int main()
- {
- int pasmo_low = 5, pasmo_high = 20, predkoc_odczytywania = 10;//wartosci w mBs/s
- int pojemnosc_pakietu = 40;//wartosc w mB
- int liczba_pakietow = 100;
- int pobrane_pakiety = 0;
- int pojemnosc = 30;
- ///////////////////// WYZEJ STAWAINIE ZMIENNYCH DO SYMULACJI
- ofstream plik_czas("czas.txt");
- ofstream plik_bufor("bufor.txt");
- int zajete = 0;
- int czas = 0;//(liczony w sekundach)
- int aktywne_pasmo;
- int zaplenienie_bufora = 0;//liczone w sekudnach
- int czas_do_zmiany;
- srand(time(0));
- serwer *serwer1 = new serwer(1000, pasmo_low, pasmo_high);
- player *player1 = new player(predkoc_odczytywania);
- bufor bufor1 = bufor(pojemnosc);
- // robimy eventy i ustawaimy ich zmienne
- eventy poczotekProgramu = eventy(0, 0, "poczotekProgramu");
- eventy rozpoczeciePobierania = eventy(0, 0, "rozpoczeciePobierania");
- eventy zakonczeniePobierania = eventy(0, 0, "zakonczeniePobierania");
- eventy czekanieNaBufor = eventy(0, 0, "czekanieNaBufor");
- eventy koniecProgramu = eventy(0, 0, "koniecProgramu");
- eventy obecnyEvent = eventy(0, 0, "lol");
- eventy nastepnyEvent = eventy(0, 0, "lol");
- eventy losowanieZmianyPasma = eventy(0, 0, "L");
- eventy zmianaPasma = eventy(0, 0, "Z");
- eventy odtwarzanie = eventy(0, 1, "O");
- eventy buforowanie = eventy(0, 1, "B");
- eventy terminowy = eventy(0, 0, "lol");
- // kolejka priorytetowa
- priority_queue < eventy, vector<eventy>, porownajEventy > kolejka;
- //dodajemy pierwszy event
- kolejka.push(poczotekProgramu);
- //usatalmy pasmo poczotkowe
- aktywne_pasmo = pasmo_high;
- // pętla programu
- pobrane_pakiety = 0;
- int i = 0;
- int k;
- i = (pojemnosc_pakietu / aktywne_pasmo) + 1;
- for (k = 0; k < i; k++)
- {
- plik_bufor << "0" << endl;
- plik_czas << k << endl;
- }
- while (kolejka.size() > 0)
- {
- if (pobrane_pakiety == liczba_pakietow)
- {
- if (zajete == 0)
- {
- break;
- }
- }
- obecnyEvent = kolejka.top();
- cout << obecnyEvent;
- czas = obecnyEvent.czas;
- kolejka.pop();
- /////////////////
- if (obecnyEvent.nazwa == "poczotekProgramu")
- {
- nastepnyEvent = losowanieZmianyPasma;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);///////////////
- nastepnyEvent = rozpoczeciePobierania;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);///////////
- nastepnyEvent = odtwarzanie;
- czas = czas + (pojemnosc_pakietu / aktywne_pasmo)+1;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);
- }
- if (obecnyEvent.nazwa == "O")
- {
- zajete = zajete - 1;
- plik_bufor << zajete << endl;
- plik_czas << czas << endl;
- if (zajete > 0)
- {
- nastepnyEvent = odtwarzanie;
- czas = czas + nastepnyEvent.czas_trwania;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);
- }
- else
- {
- nastepnyEvent = buforowanie;
- czas = czas + nastepnyEvent.czas_trwania;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);
- }
- }
- if (obecnyEvent.nazwa == "B")
- {
- plik_bufor << zajete << endl;
- plik_czas << czas << endl;
- if (zajete > 0)
- {
- nastepnyEvent = odtwarzanie;
- czas = czas + nastepnyEvent.czas_trwania;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);
- }
- else
- {
- nastepnyEvent = buforowanie;
- czas = czas + nastepnyEvent.czas_trwania;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);
- }
- }
- /////////// JESLI EVENT TO LOSOWANIE PASMA
- if (obecnyEvent.nazwa == "L")
- {
- czas_do_zmiany = (rand() % 40) + 20;
- nastepnyEvent = zmianaPasma;
- czas = czas + czas_do_zmiany + losowanieZmianyPasma.czas_trwania;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);/////////////////////
- }
- ////////////////// JESLI EVENT TO ZMIANA PASMA
- if (obecnyEvent.nazwa == "Z")
- {
- if (aktywne_pasmo == pasmo_high)
- {
- aktywne_pasmo = pasmo_low;
- }
- else
- {
- aktywne_pasmo = pasmo_high;
- }
- nastepnyEvent = losowanieZmianyPasma;
- czas = czas + zmianaPasma.czas_trwania;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);////////////////
- }
- /////////////////// JESLI EVENT TO ROZPOCZENCIE POBIERANIA
- if (obecnyEvent.nazwa == "rozpoczeciePobierania")
- {
- nastepnyEvent = zakonczeniePobierania;
- czas = czas + rozpoczeciePobierania.czas_trwania + (pojemnosc_pakietu / aktywne_pasmo);
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);///////////////
- }
- ////////////////////JESLI EVENT TO ZAKONCZENIE POBIERANIA
- if (obecnyEvent.nazwa == "zakonczeniePobierania")
- {
- zajete = zajete + (pojemnosc_pakietu / predkoc_odczytywania);
- pobrane_pakiety++;
- if (liczba_pakietow != pobrane_pakiety)
- {
- if (zajete <= bufor1.pojemnosc - (pojemnosc_pakietu / aktywne_pasmo))
- {
- //zajete = zajete + (pojemnosc_pakietu / predkoc_odczytywania);
- nastepnyEvent = rozpoczeciePobierania;
- czas = czas + zakonczeniePobierania.czas_trwania;
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);
- }
- else
- {
- nastepnyEvent = rozpoczeciePobierania;
- czas = czas + +zakonczeniePobierania.czas_trwania + zajete - (bufor1.pojemnosc - (pojemnosc_pakietu / aktywne_pasmo));
- nastepnyEvent.czas = czas;
- kolejka.push(nastepnyEvent);
- }
- }
- }
- cout << zajete << endl;
- }
- getchar();
- getchar();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement