Engine
Raylib based game framework
Loading...
Searching...
No Matches
NetworkManager.h
1#pragma once
2
3#include <unordered_map>
4#ifndef assert
5#define assert(condition) ((void)0)
6#endif
7
8#include "Networking/NetworkCore.h"
9#include "ThreadSafeQueue/blockingconcurrentqueue.h"
10#include "ThreadSafeQueue/concurrentqueue.h"
11
13{
14public:
15
18
19 bool InitServer(const u16 port, const u32 maxPeers = 64, const u32 channels = 1, const u32 timeoutMs = 0);
20 bool InitClient(const u32 channels = 1, const u32 timeoutMs = 0);
21 void Shutdown();
22
23 Peer Connect(const Address& address, const u32 data = 0);
24 void Disconnect(const PeerId peerId, const u32 data = 0);
25
26 void Send(const PeerId peerId, std::vector<u8>& data, const ChannelId channel = 0, const bool reliable = true);
27
28 std::queue<NetworkEvent> Poll();
29
30 Peer GetPeer(const PeerId peerId);
31 const std::unordered_map<PeerId, Peer>& GetPeers();
32
33private:
34
35 void Loop(const u32 timeoutMs = 0);
36
37 struct SendData
38 {
39 PeerId peer;
40 std::vector<u8> data;
41 ChannelId channel;
42 bool reliable;
43 };
44
45 NetworkCore m_networkCore;
46 std::atomic<bool> m_running;
47
48 std::thread m_thread;
49
50 moodycamel::ConcurrentQueue<std::pair<Address, u32>> m_connectQueue;
51 moodycamel::BlockingConcurrentQueue<Peer> m_connectReturnQueue;
52 moodycamel::ConcurrentQueue<SendData> m_sendQueue;
53 moodycamel::ConcurrentQueue<std::queue<NetworkEvent>> m_eventQueue;
54 moodycamel::ConcurrentQueue<std::pair<PeerId, u32>> m_disconnectQueue;
55 moodycamel::ConcurrentQueue<PeerId> m_peerIdQueue;
56 moodycamel::BlockingConcurrentQueue<Peer> m_peersQueue;
57
58 std::atomic<bool> m_peerMapRequest = false;
59 moodycamel::BlockingConcurrentQueue<const std::unordered_map<PeerId, Peer>*> m_peerMapQueue;
60};
Definition NetworkManager.h:13