mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-10-30 21:20:28 +01:00
multiplayer stage 2: peer identity, stable vehicle ids and a session lobby
TTrain::id() numbers cabs with a local counter, in the order each peer happens to create them, so it cannot address a vehicle across the session. Neither was there any way for a player to see what is available to drive. - network/entities: PeerId (the host is peer 1, remote peers are numbered from 2, so it is a participant rather than a special case) and NetworkEntityId, plus a registry that numbers the drivable vehicles of the loaded scenario in name order and resolves ids back to TDynamicObject - the server owns the numbering and publishes it as VEHICLE_LIST - name, crew occupancy, crew capacity, AI state, availability - on every change and at least every 120 frames, out of band so it stays out of the replay backbuffer; a client binds the received ids to its own copy of the scenario by name - SERVER_HELLO hands the joining peer its PeerId - a multiplayer lobby listing that roster, with vehicles taken by other players shown as such rather than hidden; entering one goes through the existing entervehicle command, the vehicle is never moved The lobby lives inside the driver mode instead of a mode of its own: the world has to keep running while somebody is choosing (a client stops consuming the server's frames the moment its mode is not a command processor), and the same screen is what a player needs to change vehicles later on. Crew occupancy is still derived from the presence of a cab instance; the real crew model, claim handshake and AI takeover follow in stage 3.
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include <queue>
|
||||
#include <chrono>
|
||||
#include "network/message.h"
|
||||
#include "network/entities.h"
|
||||
#include "input/command.h"
|
||||
|
||||
namespace network
|
||||
@@ -47,6 +48,9 @@ namespace network
|
||||
DEAD
|
||||
};
|
||||
peer_state state;
|
||||
|
||||
// session identity of the peer on the other side of this connection
|
||||
PeerId peer_id { PEER_NONE };
|
||||
};
|
||||
|
||||
class server
|
||||
@@ -64,6 +68,9 @@ namespace network
|
||||
public:
|
||||
server(std::shared_ptr<std::istream> buf);
|
||||
void push_delta(const frame_info &msg);
|
||||
// sends an out of band message to every active peer. unlike push_delta this is not
|
||||
// written to the backbuffer, so it does not become part of the replayed history
|
||||
void push_message(const message &msg);
|
||||
command_queue::commands_map pop_commands();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user