Babel
Epitech's C++ VoIP project
|
Go to the documentation of this file.
22 void connect(
const std::string &hostname, uint16_t port)
override;
37 uint64_t
getId()
const override;
46 void setId(uint64_t
id)
override;
52 asio::ip::tcp::socket socket
88 asio::ip::tcp::socket socket
90 : _ioContext(ioContext),
91 _socket(std::move(socket)),
92 _callbackMessageReceived([](auto) {}),
124 if (this->isConnected()) {
125 asio::post(this->_ioContext, [
this]() { this->_socket.close(); });
132 return this->_socket.is_open();
138 message.
header.handleEndianness();
139 asio::post(this->_ioContext, [
this, message] {
140 bool isMessageBeingSend = this->_messagesOut.empty();
142 this->_messagesOut.pushBack(message);
143 if (isMessageBeingSend) {
152 this->_callbackMessageReceived = std::move(callMessageReceived);
164 asio::async_write(this->_socket, asio::buffer(&this->_messagesOut.front().header,
sizeof(
MessageHeader<T>)),
165 [
this](std::error_code ec, std::size_t) {
167 if (this->_messagesOut.front().body.size() > 0) {
170 this->_messagesOut.popFront();
172 if (!this->_messagesOut.empty()) {
177 std::cout <<
"[" << this->_id <<
"] Write Header Fail." << std::endl;
178 this->_socket.close();
186 asio::async_write(this->_socket,
187 asio::buffer(this->_messagesOut.front().body.data(), this->_messagesOut.front().body.size()),
188 [
this](std::error_code ec, std::size_t) {
190 this->_messagesOut.popFront();
192 if (!this->_messagesOut.empty()) {
196 std::cout <<
"[" << this->_id <<
"] Write Body Fail." << std::endl;
197 this->_socket.close();
205 asio::async_read(this->_socket, asio::buffer(&this->_tmpMessage.header,
sizeof(
MessageHeader<T>)),
206 [
this](std::error_code ec, std::size_t) {
208 this->_tmpMessage.header.handleEndianness();
209 if (this->_tmpMessage.header.bodySize > 0) {
210 this->_tmpMessage.body.resize(this->_tmpMessage.header.bodySize);
213 this->_messagesIn.pushBack(this->_tmpMessage);
214 this->_callbackMessageReceived(this->_tmpMessage);
218 std::cout <<
"[" << this->_id <<
"] Read Header Fail." << std::endl;
219 this->_socket.close();
227 asio::async_read(this->_socket, asio::buffer(this->_tmpMessage.body.data(), this->_tmpMessage.body.size()),
228 [
this](std::error_code ec, std::size_t) {
230 this->_messagesIn.pushBack(this->_tmpMessage);
231 this->_callbackMessageReceived(this->_tmpMessage);
234 std::cout <<
"[" << this->_id <<
"] Read Body Fail." << std::endl;
235 this->_socket.close();
243 return this->_socket.remote_endpoint().address().to_string();
249 return this->_socket.remote_endpoint().port();
uint64_t _id
id used to identify the connection
Definition: AsioTCPConnection.hpp:82
~AsioTCPConnection() override
Definition: AsioTCPConnection.hpp:98
AsioTCPConnection(asio::io_context &ioContext, asio::ip::tcp::socket socket)
Definition: AsioTCPConnection.hpp:87
void connect(const std::string &hostname, uint16_t port) override
connect to a hostname and a port
Definition: AsioTCPConnection.hpp:105
void setCallbackOnMessage(std::function< void(Message< T >)> callMessageReceived) override
set the callback to be called when a message is received
Definition: AsioTCPConnection.hpp:150
Message< T > _tmpMessage
Message used when reading a message.
Definition: AsioTCPConnection.hpp:80
MessageHeader< T > header
The message metadata.
Definition: Message.hpp:49
Definition: Message.hpp:46
uint16_t getPeerPort() const override
get the connected pair port
Definition: AsioTCPConnection.hpp:247
std::function< void(Message< T >)> _callbackMessageReceived
The function called when a message has been fully received.
Definition: AsioTCPConnection.hpp:74
void readForMessages() override
listen for new messages
Definition: AsioTCPConnection.hpp:156
Definition: IAudioManager.hpp:13
void writeBody()
write a message body
Definition: AsioTCPConnection.hpp:184
uint64_t getId() const override
Get the id of this connection.
Definition: AsioTCPConnection.hpp:110
Thread Safe queue.
Definition: TSQueue.hpp:17
std::string getPeerIp() const override
Get the connected pair address.
Definition: AsioTCPConnection.hpp:241
Definition: ITCPConnection.hpp:16
Asio implementation of a tcp communication.
Definition: AsioTCPConnection.hpp:18
void setId(uint64_t id) override
set the id of the connection
Definition: AsioTCPConnection.hpp:116
void readBody()
read a message body
Definition: AsioTCPConnection.hpp:225
void writeHeader()
write a message header
Definition: AsioTCPConnection.hpp:162
void readHeader()
read a message header
Definition: AsioTCPConnection.hpp:203
TSQueue< Message< T > > _messagesIn
All the received messages.
Definition: AsioTCPConnection.hpp:76
void disconnect() override
disconnect the connection
Definition: AsioTCPConnection.hpp:122
bool isConnected() const override
Tells if the connection is up.
Definition: AsioTCPConnection.hpp:130
asio::io_context & _ioContext
The asio context to link everything.
Definition: AsioTCPConnection.hpp:70
void send(Message< T > message) override
Send the message.
Definition: AsioTCPConnection.hpp:136
asio::ip::tcp::socket _socket
The connection's socket.
Definition: AsioTCPConnection.hpp:72
TSQueue< Message< T > > _messagesOut
All the messages that need to be sent.
Definition: AsioTCPConnection.hpp:78