R-Type
ACommunication.hpp
Go to the documentation of this file.
1 /*
2 ** EPITECH PROJECT, 2023
3 ** Communication.hpp
4 ** File description:
5 ** Communication
6 */
7 
8 #ifndef COMMUNICATION_HPP_
9 #define COMMUNICATION_HPP_
10 
11 #include "../../include/RType.hpp"
12 #include <any>
13 #include <asio.hpp>
14 #include <iostream>
15 #include "../../include/Protocol.hpp"
16 
18 {
20  {
21  public:
25  ACommunication(asio::io_context &IOContext, unsigned short port);
26  // ACommunication(asio::io_context &IOContext, unsigned short port);
27  virtual ~ACommunication(){};
36  template <typename Socket, typename Endpoint>
37  void sendData(void *data, std::size_t size, uint8_t packetType, Socket &socket, Endpoint &endpoint)
38  {
39  struct RType::Protocol::HeaderDataPacket header = {};
40 
41  header.packetType = packetType;
42  header.payloadSize = size;
43  this->sendInformation(data, size, socket, endpoint, header);
44  };
51  void sendInformation(void *data, std::size_t size, asio::ip::udp::socket &socket,
52  asio::ip::udp::endpoint &endpoint, struct RType::Protocol::HeaderDataPacket &header);
59  void sendInformation(void *data, std::size_t size, asio::ip::tcp::socket &socket, asio::ip::tcp::endpoint &,
60  struct RType::Protocol::HeaderDataPacket &header);
65  void handleReceive(
66  const asio::error_code &error, std::size_t recvBytes, struct RType::Protocol::HeaderDataPacket &header);
68  void readHeader();
69 
70  protected:
72  virtual void handleData(struct RType::Protocol::HeaderDataPacket &, unsigned short port) = 0;
73 
74  protected:
75  asio::streambuf _streamBuffer;
76  asio::ip::udp::socket _udpSocket;
77  asio::streambuf::mutable_buffers_type _buffer;
79  asio::ip::udp::endpoint _endpoint;
80  std::map<unsigned short, asio::ip::udp::endpoint> _listClient;
81 
82  private:
83  };
84 
85 }; // namespace GameEngine::Network
86 
87 #endif /* !COMMUNICATION_HPP_ */
Definition: ACommunication.hpp:20
virtual void handleData(struct RType::Protocol::HeaderDataPacket &, unsigned short port)=0
function that will be set and used from derived class from this abstract
void sendInformation(void *data, std::size_t size, asio::ip::udp::socket &socket, asio::ip::udp::endpoint &endpoint, struct RType::Protocol::HeaderDataPacket &header)
send the data to endpoint from the socket
Definition: ACommunication.cpp:17
void handleReceive(const asio::error_code &error, std::size_t recvBytes, struct RType::Protocol::HeaderDataPacket &header)
handle the header information
Definition: ACommunication.cpp:43
asio::streambuf _streamBuffer
Definition: ACommunication.hpp:75
void sendData(void *data, std::size_t size, uint8_t packetType, Socket &socket, Endpoint &endpoint)
Set the header to send the value.
Definition: ACommunication.hpp:37
asio::ip::udp::endpoint _endpoint
Definition: ACommunication.hpp:79
ACommunication(asio::io_context &IOContext, unsigned short port)
Abstract class that will handle communication.
Definition: ACommunication.cpp:12
virtual ~ACommunication()
Definition: ACommunication.hpp:27
asio::streambuf::mutable_buffers_type _buffer
Definition: ACommunication.hpp:77
void readHeader()
read the header to retrieve informations
Definition: ACommunication.cpp:63
struct RType::Protocol::HeaderDataPacket _header
Definition: ACommunication.hpp:78
std::map< unsigned short, asio::ip::udp::endpoint > _listClient
Definition: ACommunication.hpp:80
asio::ip::udp::socket _udpSocket
Definition: ACommunication.hpp:76
Definition: ACommunication.hpp:18
Definition: Protocol.hpp:68
uint8_t packetType
Definition: Protocol.hpp:70
uint16_t payloadSize
Definition: Protocol.hpp:71