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

  1. /*
  2. * @file Simulation.h
  3. *
  4. * Created on: 16.01.2017
  5. * @author Piotr Dergun
  6. */
  7. #ifndef SIMULATION_H_
  8. #define SIMULATION_H_
  9. #include "common.h"
  10. #include "Log.h"
  11. enum THREAD_TYPE
  12. {
  13. NODE_RECV,
  14. SIM_TIMER,
  15. SIM_RESIZE,
  16. NAT_FP,
  17. };
  18. struct threadParams
  19. {
  20. THREAD_TYPE type;
  21. void *context;
  22. pthread_t thread_id;
  23. };
  24. class Simulation : public Log
  25. {
  26. /** mapa z informacjami o wątkach */
  27. map<string, struct threadParams> threads;
  28. /** ilość kolumn terminala */
  29. int cols;
  30. /** ilość wierszy terminala */
  31. int rows;
  32. /** nazwa obiektu, wymagana przez klasę Log */
  33. string name;
  34. /** timestamp w momencie uruchomienia symulacji */
  35. unsigned long startTime;
  36. public:
  37. Simulation();
  38. ~Simulation();
  39. /**
  40. * tworzy wątek
  41. * @param name nazwa wątku
  42. * @param type typ wątku, do ustalania rzutowania i wywołania odpowiedniej metody
  43. * @param context wskaźnik do obiektu, z którego będzie wywoływana odpowiednia metoda
  44. */
  45. void createThread(string name, THREAD_TYPE type, void * context);
  46. /**
  47. * usuwa wątek
  48. * @param name nazwa wątku
  49. */
  50. void destroyThread(string name);
  51. /**
  52. * wrapper, w który trzeba opakować metody do zastosowania w wątku
  53. * @param context wskaźnik do obiektu, z którego będzie wywoływana odpowiednia metoda
  54. */
  55. static void * threadWrapper(void * context);
  56. /**
  57. * wykonuje się w wątku i dba o właściwe dane o rozmiarze okna
  58. */
  59. void resizeWnd();
  60. /**
  61. * wykonuje się w wątku i wyświetla aktualny czas symulacji
  62. */
  63. void timer();
  64. /**
  65. * uruchamia symulację typowego P2P - seed i peer łączy się z serwerem-trackerem
  66. * a serwer odsyła informację zwrotną do seeda z informacją o adresie IP i porcie
  67. * źródłowym peera
  68. */
  69. void p2pSimulation();
  70. /**
  71. * uruchamia symulację przeciążenia NAT - sytuacji, w której wszystkie 65535 portów
  72. * w tablicy NAT routera zajęte i nie można dokonać SNAT+maskarady
  73. * @param nNodes liczba klientów łączących się z serwerem
  74. */
  75. void natOverflowSimulation(int nNodes);
  76. };
  77. #endif /* SIMULATION_H_ */