Botcraft 1.21.10
Loading...
Searching...
No Matches
NetworkManager.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <vector>
7#include <queue>
8#include <thread>
9#include <mutex>
10#include <condition_variable>
11
12#if PROTOCOL_VERSION > 759 /* > 1.19 */
14#endif
15#if PROTOCOL_VERSION > 760 /* > 1.19.2 */
16#include <atomic>
17#endif
18
19namespace Botcraft
20{
21 class TCP_Com;
22 class Authentifier;
23
25 {
26 public:
27 enum class AuthType
28 {
29 Offline,
32 };
33 NetworkManager(const std::string& address, const std::string& login_or_microsoft_cache_key_or_mc_token, const AuthType auth_type, const std::vector<ProtocolCraft::Handler*>& handlers = {});
34 // Used to create a dummy network manager that does not fire any packet
35 // but is always in constant_connection_state
36 NetworkManager(const ProtocolCraft::ConnectionState constant_connection_state);
38
39 void Stop();
40
42 void Send(const std::shared_ptr<ProtocolCraft::Packet> packet);
44 const std::string& GetMyName() const;
45
46 void SendChatMessage(const std::string& message);
47 void SendChatCommand(const std::string& command);
48
49 std::thread::id GetProcessingThreadId() const;
50
51 private:
52 void WaitForNewPackets();
53 void ProcessPacket(const std::vector<unsigned char>& bytes);
54 void OnNewRawData(const std::vector<unsigned char>& bytes);
55
56
57 virtual void Handle(ProtocolCraft::ClientboundLoginCompressionPacket& packet) override;
58#if PROTOCOL_VERSION < 768 /* < 1.21.2 */
59 virtual void Handle(ProtocolCraft::ClientboundGameProfilePacket& packet) override;
60#else
61 virtual void Handle(ProtocolCraft::ClientboundLoginFinishedPacket& packet) override;
62#endif
63 virtual void Handle(ProtocolCraft::ClientboundHelloPacket& packet) override;
64 virtual void Handle(ProtocolCraft::ClientboundKeepAlivePacket& packet) override;
65#if PROTOCOL_VERSION > 754 /* > 1.16.5 */
66 virtual void Handle(ProtocolCraft::ClientboundPingPacket& packet) override;
67#endif
68#if PROTOCOL_VERSION > 340 /* > 1.12.2 */
69 virtual void Handle(ProtocolCraft::ClientboundCustomQueryPacket& packet) override;
70#endif
71#if PROTOCOL_VERSION > 759 /* > 1.19 */
72 virtual void Handle(ProtocolCraft::ClientboundPlayerChatPacket& packet) override;
73#if PROTOCOL_VERSION < 761 /* < 1.19.3 */
74 virtual void Handle(ProtocolCraft::ClientboundPlayerChatHeaderPacket& packet) override;
75#endif
76#endif
77#if PROTOCOL_VERSION > 760 /* > 1.19.2 */
78 virtual void Handle(ProtocolCraft::ClientboundLoginPacket& packet) override;
79#endif
80#if PROTOCOL_VERSION > 763 /* > 1.20.1 */
83 virtual void Handle(ProtocolCraft::ClientboundPingConfigurationPacket& packet) override;
85 virtual void Handle(ProtocolCraft::ClientboundChunkBatchStartPacket& packet) override;
87#endif
88#if PROTOCOL_VERSION > 765 /* > 1.20.4 */
89 virtual void Handle(ProtocolCraft::ClientboundSelectKnownPacksPacket& packet) override;
90#endif
91
92 private:
93 std::vector<ProtocolCraft::Handler*> subscribed;
94
95 std::shared_ptr<TCP_Com> com;
96 std::shared_ptr<Authentifier> authentifier;
98
99 std::thread m_thread_process;//Thread running to process incoming packets without blocking com
100
101 std::queue<std::vector<unsigned char> > packets_to_process;
102 std::mutex mutex_process;
103 std::condition_variable process_condition;
105
106 std::mutex mutex_send;
107
108 std::string name;
109
110#if PROTOCOL_VERSION > 759 /* > 1.19 */
112#endif
113#if PROTOCOL_VERSION > 760 /* > 1.19.2 */
115 std::atomic<int> message_sent_index;
116#endif
117
118#if PROTOCOL_VERSION > 763 /* > 1.20.1 */
119 std::chrono::steady_clock::time_point chunk_batch_start_time;
120#endif
121
122 };
123}
std::condition_variable process_condition
void AddHandler(ProtocolCraft::Handler *h)
virtual void Handle(ProtocolCraft::ClientboundLoginCompressionPacket &packet) override
std::thread::id GetProcessingThreadId() const
void SendChatCommand(const std::string &command)
void Send(const std::shared_ptr< ProtocolCraft::Packet > packet)
void SendChatMessage(const std::string &message)
void ProcessPacket(const std::vector< unsigned char > &bytes)
LastSeenMessagesTracker chat_context
std::shared_ptr< TCP_Com > com
void OnNewRawData(const std::vector< unsigned char > &bytes)
std::chrono::steady_clock::time_point chunk_batch_start_time
const std::string & GetMyName() const
std::shared_ptr< Authentifier > authentifier
const ProtocolCraft::ConnectionState GetConnectionState() const
std::vector< ProtocolCraft::Handler * > subscribed
std::atomic< int > message_sent_index
ProtocolCraft::ConnectionState state
std::queue< std::vector< unsigned char > > packets_to_process
ProtocolCraft::UUID chat_session_uuid
std::array< unsigned char, 16 > UUID