X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclientiface.h;h=a7cbc01071d56aac0244e5a21488698d2db3ca37;hb=f4fedfed070ffd85c3446bc5d38d2fbd577640d6;hp=b19a91b6f86fadefe3e3da02f9fb9cfaa47f4678;hpb=1d8d01074fdb52946f81110bebf1d001185b394b;p=dragonfireclient.git diff --git a/src/clientiface.h b/src/clientiface.h index b19a91b6f..a7cbc0107 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -16,8 +16,8 @@ You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _CLIENTIFACE_H_ -#define _CLIENTIFACE_H_ + +#pragma once #include "irr_v3d.h" // for irrlicht datatypes @@ -49,30 +49,30 @@ class EmergeManager; | | \-----------------/ | 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 | | +-----------------------------+ | *-----------------------------* | | | | | @@ -101,18 +101,18 @@ class EmergeManager; | | +-----------------------------+ | | 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 | /-----------------\ | @@ -205,7 +205,7 @@ enum ClientStateEvent */ struct PrioritySortedBlockTransfer { - PrioritySortedBlockTransfer(float a_priority, 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; @@ -217,7 +217,7 @@ struct PrioritySortedBlockTransfer } float priority; v3s16 pos; - u16 peer_id; + session_t peer_id; }; class RemoteClient @@ -227,7 +227,7 @@ 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; // @@ -246,8 +246,8 @@ class RemoteClient bool isMechAllowed(AuthMechanism mech) { return allowed_auth_mechs & mech; } - RemoteClient() {} - ~RemoteClient() {} + RemoteClient(); + ~RemoteClient() = default; /* Finds block that should be sent next to the client. @@ -272,10 +272,7 @@ class RemoteClient */ 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 @@ -357,6 +354,13 @@ class RemoteClient 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. @@ -418,14 +422,14 @@ class ClientInterface { friend class Server; - ClientInterface(con::Connection* con); + ClientInterface(const std::shared_ptr &con); ~ClientInterface(); /* run sync step */ void step(float dtime); /* get list of active client id's */ - std::vector getClientIDs(ClientState min_state=CS_Active); + std::vector getClientIDs(ClientState min_state=CS_Active); /* verify is server user limit was reached */ bool isUserLimitReached(); @@ -434,38 +438,39 @@ class ClientInterface { const std::vector &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) @@ -487,7 +492,7 @@ class ClientInterface { void UpdatePlayerList(); // Connection - con::Connection* m_con; + std::shared_ptr m_con; std::mutex m_clients_mutex; // Connected clients (behind the con mutex) RemoteClientMap m_clients; @@ -495,11 +500,8 @@ class ClientInterface { // Environment ServerEnvironment *m_env; - std::mutex m_env_mutex; float m_print_info_timer; static const char *statenames[]; }; - -#endif