RavEngine
Loading...
Searching...
No Matches
NetworkServer.hpp
1#pragma once
2#include <cstdint>
3#include "NetworkBase.hpp"
4#include <steam/isteamnetworkingsockets.h>
5#include "DataStructures.hpp"
6#include "Ref.hpp"
7#include <phmap.h>
8#include "Function.hpp"
9#include "ComponentHandle.hpp"
10#include <string_view>
11
12namespace RavEngine {
13 struct Entity;
14 struct NetworkIdentity;
15
17public:
19 void Start(uint16_t port);
20 void Stop();
21 ~NetworkServer(); //calls stop
22 static void SteamNetConnectionStatusChanged(SteamNetConnectionStatusChangedCallback_t*);
23
24 void SpawnEntity(World*, ctti_t, Entity, const uuids::uuid&);
25 void DestroyEntity(const uuids::uuid&);
26
27 void SendMessageToAllClients(const std::string_view& msg, Reliability mode) const;
28
29 void SendMessageToClient(const std::string_view& msg, HSteamNetConnection connection, Reliability mode) const;
30
31 void SendMessageToAllClientsExcept(const std::string_view& msg, HSteamNetConnection connection, Reliability mode) const;
32
39 void DisconnectClient(HSteamNetConnection con, int reason, const char* msg_optional = nullptr);
40
47
48 //attach event listeners here
49 Function<void(HSteamNetConnection)> OnClientConnecting, OnClientConnected, OnClientDisconnected;
50
51 std::string CreateSpawnCommand(const uuids::uuid& id, ctti_t type, std::string_view& worldID);
52
53 std::string CreateDestroyCommand(const uuids::uuid& id);
54
55protected:
56 void OnRPC(const std::string_view& cmd, HSteamNetConnection);
57
58 ISteamNetworkingSockets *net_interface = nullptr;
61 void OnSteamNetConnectionStatusChanged(SteamNetConnectionStatusChangedCallback_t*);
62
64
65 // since the server owns all objects by default, we only need to update this
66 // when the ownership changes to a non-server client. If an object is not in this
67 // structure, we assume the server owns it.
69
70 // invoked automatically when a client disconnects. We destroy the entities it owns.
71 void HandleDisconnect(HSteamNetConnection);
72
73 static NetworkServer* currentServer;
74
75 void ServerTick();
76
77 //invoked when clients request to have their worlds synchronized
78 void SynchronizeWorldToClient(HSteamNetConnection connection, const std::string_view& in_message);
79
80public:
84 constexpr inline const decltype(clients)& GetClients() {
85 return clients;
86 }
87};
88
89}
Definition NetworkBase.hpp:12
Definition NetworkServer.hpp:16
constexpr const decltype(clients) & GetClients()
Definition NetworkServer.hpp:84
void ChangeOwnership(HSteamNetConnection newOwner, ComponentHandle< NetworkIdentity > object)
Definition NetworkServer.cpp:309
void DisconnectClient(HSteamNetConnection con, int reason, const char *msg_optional=nullptr)
Definition NetworkServer.cpp:294
Definition World.hpp:181
Definition concurrentqueue.h:747
Definition Animation.hpp:6
Definition Entity.hpp:11
Definition Uuid.hpp:7