R-Type
RTypeServer.hpp
Go to the documentation of this file.
1 /*
2 ** EPITECH PROJECT, 2023
3 ** RTypeServer.hpp
4 ** File description:
5 ** RTypeServer
6 */
7 
8 #ifndef RTYPESERVER_HPP_
9 #define RTYPESERVER_HPP_
10 
11 #include "RType.hpp"
12 #include "SafeQueue.hpp"
13 #include "UdpServer.hpp"
14 #include "TcpServer.hpp"
15 #include "GameEngine.hpp"
16 #include <asio.hpp>
17 #include <map>
18 #include <fstream>
19 #include "Protocol.hpp"
20 
21 using componentList = std::map<std::size_t, std::map<RType::Protocol::ComponentType, std::vector<bool>>>;
22 
23 namespace RType::Server
24 {
26  {
27  public:
28  RTypeServer(unsigned short port = 8080);
29  ~RTypeServer();
31  void gameLoop();
33  void handleEvent();
35  void handleConnexion(struct RType::Event event);
38  void handleMove(struct RType::Protocol::MoveData moveInfo);
41  void handleDestroy(struct RType::Event event);
44  void startNetwork(bool &isRunning);
45 
46  void handleShoot(struct RType::Protocol::ShootData shootInfo);
47  void spawnMob(std::chrono::steady_clock::time_point &now);
48 
49  void broadcastInformation();
50 
51  void handlingDamage(
52  std::size_t entityId, std::size_t i, SparseArray<GameEngine::CollisionComponent> &collisions);
53 
54  void destroyEntityCallback(const std::size_t &entityId, SparseArray<GameEngine::CollisionComponent> &collisions,
56 
57  void playerCollisionCallback(const std::size_t &entityId,
60 
61  void playerDamageCallback(const std::size_t &entityId, SparseArray<GameEngine::CollisionComponent> &collisions,
63 
65  void sendTransformComponent(uint16_t id, GameEngine::Vector2<float> position,
66  GameEngine::Vector2<float> velocity, asio::ip::udp::endpoint &endpoint);
67 
70  uint16_t id, GameEngine::Rectf collider, std::size_t layer, asio::ip::udp::endpoint &endpoint);
71 
73 
75  uint16_t id, std::size_t index, GameEngine::TextureComponent &texture, asio::ip::udp::endpoint &endpoint);
76 
77  void handleTextureResponse(struct RType::Event event);
78  void handleCollisionResponse(struct RType::Event event);
79  void handleInput(struct RType::Event event);
80 
82 
84 
86  std::vector<bool> listDisplayTexture, const GameEngine::Entity &entity, asio::ip::udp::endpoint &endpoint);
87 
89  void setPrefab();
90  void setGameEngineSystem();
91  void setGameEngine();
92  void setupGame();
93  void handlingTimers();
94  void handlingEndGame();
95  void setTimers();
96 
97  std::size_t findEntity(const std::size_t &networkId);
98  bool searchEntity(const std::size_t &networkId);
99 
100  void sendControllableInformation(GameEngine::Entity &entity, unsigned short port);
101 
102  void checkCollisionComponent(GameEngine::CollisionComponent &collision, std::size_t i);
103 
104  void handleShootType(const std::string &typeShootString, struct RType::Protocol::ShootData shootData,
105  RType::TextureType typeShoot);
107 
108  void handlingLifePoint(std::size_t entityId, std::size_t id);
109 
111  GameEngine::TransformComponent &transform, struct RType::Protocol::InputData inputInfo);
112 
113  void handleDestroyCallback(std::size_t &id);
114  void setDestroyCallback();
115  void setGameEngineCallback();
116 
117  void spawnEntityMob(const std::string &mob, RType::TextureType mobType);
118  void handleImmunity(std::chrono::steady_clock::time_point &now);
119  void sendScore(unsigned short port);
120 
121  void setImmunity(std::chrono::duration<float> timerInvincibility,
122  std::pair<const uint16_t, std::pair<bool, std::chrono::steady_clock::time_point>> playerTimer,
123  std::chrono::steady_clock::time_point &now);
124 
126  void saveHighScore();
127 
128  protected:
129  private:
130  GameEngine::GameEngine _gameEngine;
131  asio::io_context _IOContext;
132  asio::signal_set _signal;
133  bool _isRunning;
134  RType::Server::UdpServer _udpServer;
135  std::map<unsigned short, asio::ip::udp::endpoint> _listClients;
136  SafeQueue<struct RType::Event> _eventQueue;
137  std::map<uint16_t, uint8_t> _listIdType;
138  std::map<uint16_t, uint8_t> _listLifePoints;
139  std::map<uint16_t, uint8_t> _listIndexTexture;
140  std::map<unsigned short, componentList> _listInfosComponent;
141  std::map<std::string, std::chrono::steady_clock::time_point> _timers;
142  std::map<uint16_t, std::pair<bool, std::chrono::steady_clock::time_point>> _timerLifePoint;
143  std::vector<std::size_t> _nbPlayerTexture;
144  std::map<uint16_t, std::pair<bool, std::chrono::steady_clock::time_point>> _chargedAttackTimer;
145  std::size_t _nbPlayers;
146  bool _chargedAttack;
147  bool _killEnemy;
148  std::size_t _points;
149  std::vector<uint8_t> _inputsType;
150  };
151 } // namespace RType::Server
152 #endif /* !RTYPESERVER_HPP_ */
std::map< std::size_t, std::map< RType::Protocol::ComponentType, std::vector< bool > >> componentList
Definition: RTypeServer.hpp:21
Entity class for the game engine.
Definition: Entity.hpp:18
Game engine class, will manage all the necessary classes for the game.
Definition: GameEngine.hpp:40
Definition: RTypeServer.hpp:26
void sendControllableInformation(GameEngine::Entity &entity, unsigned short port)
Definition: HandlingConnection.cpp:13
componentList setEntitiesComponent()
Definition: UpdateGame.cpp:68
void handleDestroy(struct RType::Event event)
Function that will handle the disconnexion of a client.
Definition: HandlingDestroy.cpp:25
void playerDamageCallback(const std::size_t &entityId, SparseArray< GameEngine::CollisionComponent > &collisions, SparseArray< GameEngine::TransformComponent > &transforms)
Definition: Callback.cpp:105
void setGameEngineComponent()
Definition: SetGameEngine.cpp:43
void handleMove(struct RType::Protocol::MoveData moveInfo)
Function that will handle the move from a client.
Definition: HandlingMove.cpp:13
void sendCollisionComponent(uint16_t id, GameEngine::Rectf collider, std::size_t layer, asio::ip::udp::endpoint &endpoint)
Definition: HandlingCollision.cpp:26
void saveHighScore()
Definition: RTypeServer.cpp:68
~RTypeServer()
Definition: RTypeServer.cpp:33
void handleEvent()
Function that will handle every event from the udp server.
Definition: HandlingEvent.cpp:12
RTypeServer(unsigned short port=8080)
Definition: RTypeServer.cpp:17
void setGameEngine()
Definition: SetGameEngine.cpp:72
void setupGame()
Definition: SetupGame.cpp:13
void sendDestroyInfo(struct RType::Protocol::EntityIdData entity)
Definition: HandlingDestroy.cpp:13
void setTimers()
Definition: Timer.cpp:12
void broadcastTextureComponent()
Definition: HandlingTexture.cpp:59
void broadcastInformation()
Definition: UpdateGame.cpp:96
void broadcastTransformComponent()
Definition: HandlingTransform.cpp:29
void handleConnexion(struct RType::Event event)
Function that will handle the connexion of a client.
Definition: HandlingConnection.cpp:24
void setPrefab()
Definition: SetGameEngine.cpp:23
void handlingTimers()
Definition: Timer.cpp:22
void handlingDamage(std::size_t entityId, std::size_t i, SparseArray< GameEngine::CollisionComponent > &collisions)
Definition: Callback.cpp:15
GameEngine::Vector2< float > handlingMovement(GameEngine::TransformComponent &transform, struct RType::Protocol::InputData inputInfo)
Definition: HandlingInput.cpp:13
void spawnMob(std::chrono::steady_clock::time_point &now)
Definition: SpawnMob.cpp:34
void setDestroyCallback()
Definition: HandlingDestroy.cpp:80
void handleDestroyCallback(std::size_t &id)
Definition: HandlingDestroy.cpp:71
void handlingLifePoint(std::size_t entityId, std::size_t id)
Definition: Callback.cpp:86
std::size_t findEntity(const std::size_t &networkId)
void destroyEntityCallback(const std::size_t &entityId, SparseArray< GameEngine::CollisionComponent > &collisions, SparseArray< GameEngine::TransformComponent > &transforms)
Definition: Callback.cpp:32
void handleImmunity(std::chrono::steady_clock::time_point &now)
Definition: Immunity.cpp:12
void checkSendingTexture(std::vector< bool > listDisplayTexture, const GameEngine::Entity &entity, asio::ip::udp::endpoint &endpoint)
Definition: HandlingTexture.cpp:48
void setGameEngineCallback()
Definition: SetGameEngine.cpp:41
void sendScore(unsigned short port)
Definition: UpdateGame.cpp:12
void sendTransformComponent(uint16_t id, GameEngine::Vector2< float > position, GameEngine::Vector2< float > velocity, asio::ip::udp::endpoint &endpoint)
Definition: HandlingTransform.cpp:13
void handleCollisionResponse(struct RType::Event event)
Definition: HandlingCollision.cpp:13
void sendTextureComponent(uint16_t id, std::size_t index, GameEngine::TextureComponent &texture, asio::ip::udp::endpoint &endpoint)
Definition: HandlingTexture.cpp:26
bool searchEntity(const std::size_t &networkId)
void broadcastCollisionComponent()
Definition: HandlingCollision.cpp:52
void handlingEndGame()
Definition: RTypeServer.cpp:43
void handleShoot(struct RType::Protocol::ShootData shootInfo)
Definition: HandlingShoot.cpp:46
void startNetwork(bool &isRunning)
Function that will start the Network in a thread.
Definition: RTypeServer.cpp:35
void broadcastEntityInformation(const GameEngine::Entity &entity)
Definition: UpdateGame.cpp:43
void handleShootType(const std::string &typeShootString, struct RType::Protocol::ShootData shootData, RType::TextureType typeShoot)
Definition: HandlingShoot.cpp:13
void setGameEngineSystem()
Definition: SetGameEngine.cpp:54
void checkCollisionComponent(GameEngine::CollisionComponent &collision, std::size_t i)
Definition: HandlingCollision.cpp:42
void handleInput(struct RType::Event event)
Definition: HandlingInput.cpp:29
void handleTextureResponse(struct RType::Event event)
Definition: HandlingTexture.cpp:12
void updateComponentInformation(GameEngine::Entity &entity, RType::TextureType entityType)
Definition: UpdateGame.cpp:22
void spawnEntityMob(const std::string &mob, RType::TextureType mobType)
Definition: SpawnMob.cpp:12
void playerCollisionCallback(const std::size_t &entityId, SparseArray< GameEngine::CollisionComponent > &collisions, SparseArray< GameEngine::TransformComponent > &transforms)
Definition: Callback.cpp:64
void gameLoop()
GameLoop to run the game.
Definition: RTypeServer.cpp:84
void setImmunity(std::chrono::duration< float > timerInvincibility, std::pair< const uint16_t, std::pair< bool, std::chrono::steady_clock::time_point >> playerTimer, std::chrono::steady_clock::time_point &now)
UdpServer Class that create a UDP server that client can connect to communicate.
Definition: UdpServer.hpp:27
Definition: ClientSession.hpp:16
TextureType
Definition: RType.hpp:28
Definition: CollisionComponent.hpp:17
Definition: TextureComponent.hpp:16
Definition: TransformComponent.hpp:15
Definition: RType.hpp:31
Definition: Protocol.hpp:63
Definition: Protocol.hpp:40
Definition: Protocol.hpp:124
Definition: Protocol.hpp:133