Botcraft 1.21.4
Loading...
Searching...
No Matches
TCP_Com.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <deque>
5#include <thread>
6#include <mutex>
7#include <asio/error_code.hpp>
8#include <asio/ip/tcp.hpp>
9#include <asio/io_service.hpp>
10
11namespace Botcraft
12{
13#ifdef USE_ENCRYPTION
14 class AESEncrypter;
15#endif
16
17 class TCP_Com
18 {
19 public:
20 TCP_Com(const std::string& address,
21 std::function<void(const std::vector<unsigned char>&)> callback);
22 ~TCP_Com();
23
24 bool IsInitialized() const;
25
26 void close();
27
28 void SendPacket(const std::vector<unsigned char>& msg);
29#ifdef USE_ENCRYPTION
30 void SetEncrypter(const std::shared_ptr<AESEncrypter> encrypter_);
31#endif
32
33 const std::string& GetIp() const;
34 const unsigned short GetPort() const;
35
36 private:
37
38 void handle_connect(const asio::error_code& error);
39
40 void handle_read(const asio::error_code& error, std::size_t bytes_transferred);
41
42 void do_write(const std::vector<unsigned char>& msg);
43
44 void handle_write(const asio::error_code& error);
45
46 void do_close();
47
48 void SetIPAndPortFromAddress(const std::string& address);
49
50
51 private:
52 // io_service must be declared before socket
53 asio::io_service io_service;
54 asio::ip::tcp::socket socket;
55
56 std::thread thread_com;
57
58 std::array<unsigned char, 512> read_msg;
59 std::vector<unsigned char> input_msg;
60 std::deque<std::vector<unsigned char> > output_msg;
61
62 std::function<void(const std::vector<unsigned char>&)> NewPacketCallback;
63 std::mutex mutex_output;
64
65 std::string ip;
66 unsigned short port;
67
68#ifdef USE_ENCRYPTION
69 std::shared_ptr<AESEncrypter> encrypter;
70#endif
71
72 std::atomic<bool> initialized;
73 };
74} // Botcraft
void SendPacket(const std::vector< unsigned char > &msg)
Definition TCP_Com.cpp:54
asio::ip::tcp::socket socket
Definition TCP_Com.hpp:54
std::function< void(const std::vector< unsigned char > &)> NewPacketCallback
Definition TCP_Com.hpp:62
std::shared_ptr< AESEncrypter > encrypter
Definition TCP_Com.hpp:69
void SetEncrypter(const std::shared_ptr< AESEncrypter > encrypter_)
Definition TCP_Com.cpp:77
void handle_write(const asio::error_code &error)
Definition TCP_Com.cpp:199
void SetIPAndPortFromAddress(const std::string &address)
Definition TCP_Com.cpp:227
std::array< unsigned char, 512 > read_msg
Definition TCP_Com.hpp:58
std::deque< std::vector< unsigned char > > output_msg
Definition TCP_Com.hpp:60
std::mutex mutex_output
Definition TCP_Com.hpp:63
void do_write(const std::vector< unsigned char > &msg)
Definition TCP_Com.cpp:182
std::string ip
Definition TCP_Com.hpp:65
void handle_connect(const asio::error_code &error)
Definition TCP_Com.cpp:98
asio::io_service io_service
Definition TCP_Com.hpp:53
std::thread thread_com
Definition TCP_Com.hpp:56
unsigned short port
Definition TCP_Com.hpp:66
void handle_read(const asio::error_code &error, std::size_t bytes_transferred)
Definition TCP_Com.cpp:114
bool IsInitialized() const
Definition TCP_Com.cpp:49
const std::string & GetIp() const
Definition TCP_Com.cpp:83
std::atomic< bool > initialized
Definition TCP_Com.hpp:72
const unsigned short GetPort() const
Definition TCP_Com.cpp:88
std::vector< unsigned char > input_msg
Definition TCP_Com.hpp:59