RavEngine
Loading...
Searching...
No Matches
NetworkClient.hpp
1#pragma once
2#include <string>
3#include <cstdint>
4#include "NetworkBase.hpp"
5#include <steam/isteamnetworkingsockets.h>
6#include "ComponentHandle.hpp"
7#include "Function.hpp"
8#include "Ref.hpp"
9
10namespace RavEngine {
11 class World;
12 struct Entity;
13 class World;
14 struct NetworkIdentity;
15
17 UnorderedMap<ctti_t, Function<void(Entity, Ref<World>)>> OnNetSpawnHooks;
18 void RevokeOwnership(ComponentHandle<NetworkIdentity> id);
19 void GainOwnership(ComponentHandle<NetworkIdentity> id);
20public:
22 void Connect(const std::string& addr, uint16_t port);
23 void Disconnect();
24 ~NetworkClient(); //gracefully disconnect
25 static void SteamNetConnectionStatusChanged(SteamNetConnectionStatusChangedCallback_t*);
26
27 void SendMessageToServer(const std::string_view& msg, Reliability mode) const;
28
29 void OnRPC(const std::string_view& cmd);
30
31 void SendSyncWorldRequest(Ref<World> world);
32
33 template<typename T>
34 constexpr inline void SetNetSpawnHook(const decltype(OnNetSpawnHooks)::value_type::second_type& func) {
35 OnNetSpawnHooks.insert(std::make_pair(CTTI<T>(),func));
36 }
37
38 //attach event listeners here
39 Function<void(HSteamNetConnection)> OnConnecting, OnConnected, OnLostConnection;
40
41protected:
42 ISteamNetworkingSockets *net_interface = nullptr;
44 void OnSteamNetConnectionStatusChanged(SteamNetConnectionStatusChangedCallback_t*);
45
46 void ClientTick();
47
52 void NetSpawn(const std::string_view& cmd);
53
58 void NetDestroy(const std::string_view& cmd);
59
60 void OwnershipRevoked(const std::string_view& cmd);
61 void OwnershipToThis(const std::string_view& cmd);
62
63 static NetworkClient* currentClient;
64};
65
66}
Definition NetworkBase.hpp:12
Definition NetworkClient.hpp:16
void NetSpawn(const std::string_view &cmd)
Definition NetworkClient.cpp:176
void NetDestroy(const std::string_view &cmd)
Definition NetworkClient.cpp:219
Definition concurrentqueue.h:747
Definition phmap.h:4308
Definition Animation.hpp:6
Definition Entity.hpp:11