/*
|
|
* @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<string, struct threadParams> 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_ */
|