| |
\-----------------/
| depending of the incoming packet
- +---------------------------------------
- v v
-+-----------------------------+ +-----------------------------+
-|IN: | |IN: |
-| TOSERVER_INIT_LEGACY |----- | TOSERVER_INIT | invalid playername,
-+-----------------------------+ | +-----------------------------+ password (for _LEGACY),
- | | | or denied by mod
- | Auth ok -------------------+---------------------------------
- v v |
-+-----------------------------+ +-----------------------------+ |
-|OUT: | |OUT: | |
-| TOCLIENT_INIT_LEGACY | | TOCLIENT_HELLO | |
-+-----------------------------+ +-----------------------------+ |
- | | |
- | | |
- v v |
- /-----------------\ /-----------------\ |
- | | | | |
- | AwaitingInit2 |<--------- | HelloSent | |
- | | | | | |
- \-----------------/ | \-----------------/ |
- | | | |
-+-----------------------------+ | *-----------------------------* Auth fails |
-|IN: | | |Authentication, depending on |-----------------+
+ ----------------------------------------
+ v
+ +-----------------------------+
+ |IN: |
+ | TOSERVER_INIT |
+ +-----------------------------+
+ | invalid playername
+ | or denied by mod
+ v
+ +-----------------------------+
+ |OUT: |
+ | TOCLIENT_HELLO |
+ +-----------------------------+
+ |
+ |
+ v
+ /-----------------\ /-----------------\
+ | | | |
+ | AwaitingInit2 |<--------- | HelloSent |
+ | | | | |
+ \-----------------/ | \-----------------/
+ | | |
++-----------------------------+ | *-----------------------------* Auth fails
+|IN: | | |Authentication, depending on |------------------
| TOSERVER_INIT2 | | | packet sent by client | |
+-----------------------------+ | *-----------------------------* |
| | | |
| | +-----------------------------+ |
| DefinitionsSent | |IN: | |
| | | TOSERVER_REQUEST_MEDIA | |
- \-----------------/ | TOSERVER_RECEIVED_MEDIA | |
+ \-----------------/ | | |
| +-----------------------------+ |
| ^ | |
| ----------------------------- |
- v |
+ v v
+-----------------------------+ --------------------------------+
-|IN: | | |
+|IN: | | ^
| TOSERVER_CLIENT_READY | v |
-+-----------------------------+ +-------------------------------+ |
- | |OUT: | |
- v | TOCLIENT_ACCESS_DENIED_LEGAGY | |
-+-----------------------------+ +-------------------------------+ |
++-----------------------------+ +------------------------+ |
+ | |OUT: | |
+ v | TOCLIENT_ACCESS_DENIED | |
++-----------------------------+ +------------------------+ |
|OUT: | | |
| TOCLIENT_MOVE_PLAYER | v |
| TOCLIENT_PRIVILEGES | /-----------------\ |
*/
struct PrioritySortedBlockTransfer
{
- PrioritySortedBlockTransfer(float a_priority, const v3s16 &a_pos, u16 a_peer_id)
+ PrioritySortedBlockTransfer(float a_priority, const v3s16 &a_pos, session_t a_peer_id)
{
priority = a_priority;
pos = a_pos;
}
float priority;
v3s16 pos;
- u16 peer_id;
+ session_t peer_id;
};
class RemoteClient
// NOTE: If client is made allowed to exist while peer doesn't,
// this has to be set to 0 when there is no peer.
// Also, the client must be moved to some other container.
- u16 peer_id = PEER_ID_INEXISTENT;
+ session_t peer_id = PEER_ID_INEXISTENT;
// The serialization version to use with the client
u8 serialization_version = SER_FMT_VER_INVALID;
//
bool isMechAllowed(AuthMechanism mech)
{ return allowed_auth_mechs & mech; }
- RemoteClient() = default;
+ RemoteClient();
~RemoteClient() = default;
/*
*/
void ResendBlockIfOnWire(v3s16 p);
- s32 SendingCount()
- {
- return m_blocks_sending.size();
- }
+ u32 getSendingCount() const { return m_blocks_sending.size(); }
// Increments timeouts and removes timed-out blocks from list
// NOTE: This doesn't fix the server-not-sending-block bug
v3s16 m_last_center;
float m_nearest_unsent_reset_timer = 0.0f;
+ const u16 m_max_simul_sends;
+ const float m_min_time_from_building;
+ const s16 m_max_send_distance;
+ const s16 m_block_optimize_distance;
+ const s16 m_max_gen_distance;
+ const bool m_occ_cull;
+
/*
Blocks that are currently on the line.
This is used for throttling the sending of blocks.
void step(float dtime);
/* get list of active client id's */
- std::vector<u16> getClientIDs(ClientState min_state=CS_Active);
+ std::vector<session_t> getClientIDs(ClientState min_state=CS_Active);
+
+ /* mark block as not sent to active client sessions */
+ void markBlockposAsNotSent(const v3s16 &pos);
/* verify is server user limit was reached */
bool isUserLimitReached();
const std::vector<std::string> &getPlayerNames() const { return m_clients_names; }
/* send message to client */
- void send(u16 peer_id, u8 channelnum, NetworkPacket* pkt, bool reliable);
+ void send(session_t peer_id, u8 channelnum, NetworkPacket *pkt, bool reliable);
/* send to all clients */
void sendToAll(NetworkPacket *pkt);
void sendToAllCompat(NetworkPacket *pkt, NetworkPacket *legacypkt, u16 min_proto_ver);
/* delete a client */
- void DeleteClient(u16 peer_id);
+ void DeleteClient(session_t peer_id);
/* create client */
- void CreateClient(u16 peer_id);
+ void CreateClient(session_t peer_id);
/* get a client by peer_id */
- RemoteClient* getClientNoEx(u16 peer_id, ClientState state_min=CS_Active);
+ RemoteClient *getClientNoEx(session_t peer_id, ClientState state_min = CS_Active);
/* get client by peer_id (make sure you have list lock before!*/
- RemoteClient* lockedGetClientNoEx(u16 peer_id, ClientState state_min=CS_Active);
+ RemoteClient *lockedGetClientNoEx(session_t peer_id, ClientState state_min = CS_Active);
/* get state of client by id*/
- ClientState getClientState(u16 peer_id);
+ ClientState getClientState(session_t peer_id);
/* set client playername */
- void setPlayerName(u16 peer_id,std::string name);
+ void setPlayerName(session_t peer_id, const std::string &name);
/* get protocol version of client */
- u16 getProtocolVersion(u16 peer_id);
+ u16 getProtocolVersion(session_t peer_id);
/* set client version */
- void setClientVersion(u16 peer_id, u8 major, u8 minor, u8 patch, std::string full);
+ void setClientVersion(session_t peer_id, u8 major, u8 minor, u8 patch,
+ const std::string &full);
/* event to update client state */
- void event(u16 peer_id, ClientStateEvent event);
+ void event(session_t peer_id, ClientStateEvent event);
/* Set environment. Do not call this function if environment is already set */
void setEnv(ServerEnvironment *env)