10#include "ecs/component/core/transform.h"
11#include "ecs/entity.h"
12#include "net/prediction/command.h"
13#include "net/prediction/rewind.h"
14#include "net/replication/silence.h"
15#include "net/replication/snapshot.h"
16#include "net/transport/connection.h"
17#include "net/transport/join_cookie.h"
18#include "net/wire/bit_stream.h"
19#include "net/wire/protocol.h"
21namespace Vkm::Engine {
50 explicit NetServer(
NetCore& core);
53 NetServer(
const NetServer& other) =
delete;
54 NetServer& operator=(
const NetServer& other) =
delete;
56 NetServer(NetServer && other) =
delete;
57 NetServer& operator=(NetServer && other) =
delete;
63 void open(uint32_t maxPlayers);
68 void advance(
float seconds);
105 size_t playerCount()
const {
return m_peers.size(); }
107 std::string describe()
const;
128 NetSnapshotStats sendSnapshot(Scene& scene,
const NetSchema& schema, Peer& peer, uint32_t tick);
138 void holdScalesToTheWire(Scene& scene);
156 const NetAddress& from,
160 uint64_t& actionNames
171 void acceptCommands(Peer& peer, BitReader& reader);
187 const NetAddress& from,
191 ResourceManager& resources
194 void challenge(
const NetAddress& to);
195 void refuse(
const NetAddress& from, NetRefusal reason, uint64_t token);
196 void welcome(Peer& peer,
const NetAddress& to);
205 PlayerId freePlayerId()
const;
206 void dropPeer(Scene& scene, ResourceManager& resources,
size_t index,
const char* why);
208 Peer* findPeer(
const NetAddress& address);
213 std::vector<std::unique_ptr<Peer>> m_peers;
218 uint32_t m_maxPlayers = 0;
219 PlayerId m_nextPlayer = 1;
221 NetSnapshotStats m_lastSnapshot;
222 bool m_warnedScale =
false;
225 std::vector<Rewound> m_rewound;
227 NetSilenceMap m_silence;
229 NetJoinCookie m_cookie;
230 double m_seconds = 0.0;
232 uint32_t m_refusedMismatch = 0;
233 uint32_t m_refusedFull = 0;
235 std::vector<InputCommand> m_received;
238 NetConnection m_unseated;
void rewind(Scene &scene, EntityId shooter)
Put every player but shooter where shooter saw them.
std::function< void(Scene &, ResourceManager &, PlayerId, EntityId)> DespawnPlayer
Undo what SpawnPlayer did.
Definition net_server.h:47
void receive(Scene &scene, ResourceManager &resources)
Take every datagram that has arrived, then give back the seats that are going.
std::function< EntityId(Scene &, ResourceManager &, PlayerId)> SpawnPlayer
What a joining player is given, decided by the game.
Definition net_server.h:40
void close()
Tell every player goodbye and forget them.
void open(uint32_t maxPlayers)
Start taking up to maxPlayers players, under a fresh join key.
void forgetWorld()
Drop everything naming an entity; see NetSession::forgetWorld.
const InputCommand * commandFor(EntityId entity) const
The command entity's player sent for this tick.
void send(Scene &scene, uint32_t tick)
Send every player who has answered its snapshot of this tick.
void beginTick(uint32_t tick)
Hand every player the command its entity runs this tick.
void endTick(const Scene &scene, uint32_t tick)
Remember where every player is, for judging a shot later.
void restore(Scene &scene)
Put back exactly what rewind moved.
Open type-erased resource registry with typed handles and generational lifetimes.
Definition resource_manager.h:46
Central registry managing entities and an open set of component types.
Definition scene.h:29
Names one entity of one Scene, for as long as that slot holds it.
Definition entity.h:23
What a session's server and client halves share: the socket, what the two ends agreed,...
Definition net_session.h:53