Symulacja NAT na przedmiot Symulacje Komputerowe
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

84 lines
2.0 KiB

/*
* @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_ */