/* * @file Simulation.h * * Created on: 16.01.2017 * @author Piotr Dergun */ #ifndef SIMULATION_H_ #define SIMULATION_H_ #include "common.h" #include "Log.h" enum THREAD_TYPE { NODE_RECV, SIM_TIMER, SIM_RESIZE, NAT_FP, }; struct threadParams { THREAD_TYPE type; void *context; pthread_t thread_id; }; class Simulation : public Log { /** mapa z informacjami o wątkach */ map threads; /** ilość kolumn terminala */ int cols; /** ilość wierszy terminala */ int rows; /** nazwa obiektu, wymagana przez klasę Log */ string name; /** timestamp w momencie uruchomienia symulacji */ unsigned long startTime; public: Simulation(); ~Simulation(); /** * tworzy wątek * @param name nazwa wątku * @param type typ wątku, do ustalania rzutowania i wywołania odpowiedniej metody * @param context wskaźnik do obiektu, z którego będzie wywoływana odpowiednia metoda */ void createThread(string name, THREAD_TYPE type, void * context); /** * usuwa wątek * @param name nazwa wątku */ void destroyThread(string name); /** * wrapper, w który trzeba opakować metody do zastosowania w wątku * @param context wskaźnik do obiektu, z którego będzie wywoływana odpowiednia metoda */ static void * threadWrapper(void * context); /** * wykonuje się w wątku i dba o właściwe dane o rozmiarze okna */ void resizeWnd(); /** * wykonuje się w wątku i wyświetla aktualny czas symulacji */ void timer(); /** * uruchamia symulację typowego P2P - seed i peer łączy się z serwerem-trackerem * a serwer odsyła informację zwrotną do seeda z informacją o adresie IP i porcie * źródłowym peera */ void p2pSimulation(); /** * uruchamia symulację przeciążenia NAT - sytuacji, w której wszystkie 65535 portów * w tablicy NAT routera są zajęte i nie można dokonać SNAT+maskarady * @param nNodes liczba klientów łączących się z serwerem */ void natOverflowSimulation(int nNodes); }; #endif /* SIMULATION_H_ */