diff options
Diffstat (limited to 'src/client/client.h')
-rw-r--r-- | src/client/client.h | 277 |
1 files changed, 148 insertions, 129 deletions
diff --git a/src/client/client.h b/src/client/client.h index f00c331ab..7455d78dc 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -49,7 +49,7 @@ class IWritableTextureSource; class IWritableShaderSource; class ISoundManager; class NodeDefManager; -// class IWritableCraftDefManager; +//class IWritableCraftDefManager; class ClientMediaDownloader; struct MapDrawControl; class ModChannelMgr; @@ -60,13 +60,11 @@ class Minimap; struct MinimapMapblock; class Camera; class NetworkPacket; -namespace con -{ +namespace con { class Connection; } -enum LocalClientState -{ +enum LocalClientState { LC_Created, LC_Init, LC_Ready @@ -90,7 +88,10 @@ public: n->second++; } - void clear() { m_packets.clear(); } + void clear() + { + m_packets.clear(); + } u32 sum() const; void print(std::ostream &o) const; @@ -110,21 +111,28 @@ public: NOTE: Nothing is thread-safe here. */ - Client(const char *playername, const std::string &password, - const std::string &address_name, MapDrawControl &control, - IWritableTextureSource *tsrc, IWritableShaderSource *shsrc, - IWritableItemDefManager *itemdef, NodeDefManager *nodedef, - ISoundManager *sound, MtEventManager *event, bool ipv6, - GameUI *game_ui); + Client( + const char *playername, + const std::string &password, + const std::string &address_name, + MapDrawControl &control, + IWritableTextureSource *tsrc, + IWritableShaderSource *shsrc, + IWritableItemDefManager *itemdef, + NodeDefManager *nodedef, + ISoundManager *sound, + MtEventManager *event, + bool ipv6, + GameUI *game_ui + ); ~Client(); DISABLE_CLASS_COPY(Client); // Load local mods into memory void scanModSubfolder(const std::string &mod_name, const std::string &mod_path, - std::string mod_subpath); - inline void scanModIntoMemory( - const std::string &mod_name, const std::string &mod_path) + std::string mod_subpath); + inline void scanModIntoMemory(const std::string &mod_name, const std::string &mod_path) { scanModSubfolder(mod_name, mod_path, ""); } @@ -134,6 +142,7 @@ public: */ void Stop(); + bool isShutdown(); /* @@ -154,58 +163,58 @@ public: * Command Handlers */ - void handleCommand(NetworkPacket *pkt); - - void handleCommand_Null(NetworkPacket *pkt){}; - void handleCommand_Deprecated(NetworkPacket *pkt); - void handleCommand_Hello(NetworkPacket *pkt); - void handleCommand_AuthAccept(NetworkPacket *pkt); - void handleCommand_AcceptSudoMode(NetworkPacket *pkt); - void handleCommand_DenySudoMode(NetworkPacket *pkt); - void handleCommand_AccessDenied(NetworkPacket *pkt); - void handleCommand_RemoveNode(NetworkPacket *pkt); - void handleCommand_AddNode(NetworkPacket *pkt); + void handleCommand(NetworkPacket* pkt); + + void handleCommand_Null(NetworkPacket* pkt) {}; + void handleCommand_Deprecated(NetworkPacket* pkt); + void handleCommand_Hello(NetworkPacket* pkt); + void handleCommand_AuthAccept(NetworkPacket* pkt); + void handleCommand_AcceptSudoMode(NetworkPacket* pkt); + void handleCommand_DenySudoMode(NetworkPacket* pkt); + void handleCommand_AccessDenied(NetworkPacket* pkt); + void handleCommand_RemoveNode(NetworkPacket* pkt); + void handleCommand_AddNode(NetworkPacket* pkt); void handleCommand_NodemetaChanged(NetworkPacket *pkt); - void handleCommand_BlockData(NetworkPacket *pkt); - void handleCommand_Inventory(NetworkPacket *pkt); - void handleCommand_TimeOfDay(NetworkPacket *pkt); + void handleCommand_BlockData(NetworkPacket* pkt); + void handleCommand_Inventory(NetworkPacket* pkt); + void handleCommand_TimeOfDay(NetworkPacket* pkt); void handleCommand_ChatMessage(NetworkPacket *pkt); - void handleCommand_ActiveObjectRemoveAdd(NetworkPacket *pkt); - void handleCommand_ActiveObjectMessages(NetworkPacket *pkt); - void handleCommand_Movement(NetworkPacket *pkt); + void handleCommand_ActiveObjectRemoveAdd(NetworkPacket* pkt); + void handleCommand_ActiveObjectMessages(NetworkPacket* pkt); + void handleCommand_Movement(NetworkPacket* pkt); void handleCommand_Fov(NetworkPacket *pkt); - void handleCommand_HP(NetworkPacket *pkt); - void handleCommand_Breath(NetworkPacket *pkt); - void handleCommand_MovePlayer(NetworkPacket *pkt); - void handleCommand_DeathScreen(NetworkPacket *pkt); - void handleCommand_AnnounceMedia(NetworkPacket *pkt); - void handleCommand_Media(NetworkPacket *pkt); - void handleCommand_NodeDef(NetworkPacket *pkt); - void handleCommand_ItemDef(NetworkPacket *pkt); - void handleCommand_PlaySound(NetworkPacket *pkt); - void handleCommand_StopSound(NetworkPacket *pkt); + void handleCommand_HP(NetworkPacket* pkt); + void handleCommand_Breath(NetworkPacket* pkt); + void handleCommand_MovePlayer(NetworkPacket* pkt); + void handleCommand_DeathScreen(NetworkPacket* pkt); + void handleCommand_AnnounceMedia(NetworkPacket* pkt); + void handleCommand_Media(NetworkPacket* pkt); + void handleCommand_NodeDef(NetworkPacket* pkt); + void handleCommand_ItemDef(NetworkPacket* pkt); + void handleCommand_PlaySound(NetworkPacket* pkt); + void handleCommand_StopSound(NetworkPacket* pkt); void handleCommand_FadeSound(NetworkPacket *pkt); - void handleCommand_Privileges(NetworkPacket *pkt); - void handleCommand_InventoryFormSpec(NetworkPacket *pkt); - void handleCommand_DetachedInventory(NetworkPacket *pkt); - void handleCommand_ShowFormSpec(NetworkPacket *pkt); - void handleCommand_SpawnParticle(NetworkPacket *pkt); - void handleCommand_AddParticleSpawner(NetworkPacket *pkt); - void handleCommand_DeleteParticleSpawner(NetworkPacket *pkt); - void handleCommand_HudAdd(NetworkPacket *pkt); - void handleCommand_HudRemove(NetworkPacket *pkt); - void handleCommand_HudChange(NetworkPacket *pkt); - void handleCommand_HudSetFlags(NetworkPacket *pkt); - void handleCommand_HudSetParam(NetworkPacket *pkt); - void handleCommand_HudSetSky(NetworkPacket *pkt); - void handleCommand_HudSetSun(NetworkPacket *pkt); - void handleCommand_HudSetMoon(NetworkPacket *pkt); - void handleCommand_HudSetStars(NetworkPacket *pkt); - void handleCommand_CloudParams(NetworkPacket *pkt); - void handleCommand_OverrideDayNightRatio(NetworkPacket *pkt); - void handleCommand_LocalPlayerAnimations(NetworkPacket *pkt); - void handleCommand_EyeOffset(NetworkPacket *pkt); - void handleCommand_UpdatePlayerList(NetworkPacket *pkt); + void handleCommand_Privileges(NetworkPacket* pkt); + void handleCommand_InventoryFormSpec(NetworkPacket* pkt); + void handleCommand_DetachedInventory(NetworkPacket* pkt); + void handleCommand_ShowFormSpec(NetworkPacket* pkt); + void handleCommand_SpawnParticle(NetworkPacket* pkt); + void handleCommand_AddParticleSpawner(NetworkPacket* pkt); + void handleCommand_DeleteParticleSpawner(NetworkPacket* pkt); + void handleCommand_HudAdd(NetworkPacket* pkt); + void handleCommand_HudRemove(NetworkPacket* pkt); + void handleCommand_HudChange(NetworkPacket* pkt); + void handleCommand_HudSetFlags(NetworkPacket* pkt); + void handleCommand_HudSetParam(NetworkPacket* pkt); + void handleCommand_HudSetSky(NetworkPacket* pkt); + void handleCommand_HudSetSun(NetworkPacket* pkt); + void handleCommand_HudSetMoon(NetworkPacket* pkt); + void handleCommand_HudSetStars(NetworkPacket* pkt); + void handleCommand_CloudParams(NetworkPacket* pkt); + void handleCommand_OverrideDayNightRatio(NetworkPacket* pkt); + void handleCommand_LocalPlayerAnimations(NetworkPacket* pkt); + void handleCommand_EyeOffset(NetworkPacket* pkt); + void handleCommand_UpdatePlayerList(NetworkPacket* pkt); void handleCommand_ModChannelMsg(NetworkPacket *pkt); void handleCommand_ModChannelSignal(NetworkPacket *pkt); void handleCommand_SrpBytesSandB(NetworkPacket *pkt); @@ -216,30 +225,31 @@ public: void ProcessData(NetworkPacket *pkt); - void Send(NetworkPacket *pkt); + void Send(NetworkPacket* pkt); void interact(InteractAction action, const PointedThing &pointed); - void sendNodemetaFields( - v3s16 p, const std::string &formname, const StringMap &fields); - void sendInventoryFields(const std::string &formname, const StringMap &fields); + void sendNodemetaFields(v3s16 p, const std::string &formname, + const StringMap &fields); + void sendInventoryFields(const std::string &formname, + const StringMap &fields); void sendInventoryAction(InventoryAction *a); void sendChatMessage(const std::wstring &message); void clearOutChatQueue(); - void sendChangePassword( - const std::string &oldpassword, const std::string &newpassword); + void sendChangePassword(const std::string &oldpassword, + const std::string &newpassword); void sendDamage(u16 damage); void sendRespawn(); void sendReady(); - ClientEnvironment &getEnv() { return m_env; } + ClientEnvironment& getEnv() { return m_env; } ITextureSource *tsrc() { return getTextureSource(); } ISoundManager *sound() { return getSoundManager(); } static const std::string &getBuiltinLuaPath(); static const std::string &getClientModsLuaPath(); const std::vector<ModSpec> &getMods() const override; - const ModSpec *getModSpec(const std::string &modname) const override; + const ModSpec* getModSpec(const std::string &modname) const override; // Causes urgent mesh updates (unlike Map::add/removeNodeWithEvent) void removeNode(v3s16 p); @@ -258,7 +268,7 @@ public: bool updateWieldedItem(); /* InventoryManager interface */ - Inventory *getInventory(const InventoryLocation &loc) override; + Inventory* getInventory(const InventoryLocation &loc) override; void inventoryAction(InventoryAction *a) override; // Send the item number 'item' as player item to the server @@ -278,40 +288,29 @@ public: u16 getHP(); bool checkPrivilege(const std::string &priv) const - { - return g_settings->getBool("priv_bypass") - ? true - : (m_privileges.count(priv) != 0); - } + { return g_settings->getBool("priv_bypass") ? true : (m_privileges.count(priv) != 0); } const std::unordered_set<std::string> &getPrivilegeList() const - { - return m_privileges; - } + { return m_privileges; } bool getChatMessage(std::wstring &message); - void typeChatMessage(const std::wstring &message); + void typeChatMessage(const std::wstring& message); - u64 getMapSeed() { return m_map_seed; } + u64 getMapSeed(){ return m_map_seed; } - void addUpdateMeshTask( - v3s16 blockpos, bool ack_to_server = false, bool urgent = false); + void addUpdateMeshTask(v3s16 blockpos, bool ack_to_server=false, bool urgent=false); // Including blocks at appropriate edges - void addUpdateMeshTaskWithEdge( - v3s16 blockpos, bool ack_to_server = false, bool urgent = false); - void addUpdateMeshTaskForNode( - v3s16 nodepos, bool ack_to_server = false, bool urgent = false); + void addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server=false, bool urgent=false); + void addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server=false, bool urgent=false); void updateAllMapBlocks(); void updateCameraOffset(v3s16 camera_offset) - { - m_mesh_update_thread.m_camera_offset = camera_offset; - } + { m_mesh_update_thread.m_camera_offset = camera_offset; } bool hasClientEvents() const { return !m_client_event_queue.empty(); } // Get event from queue. If queue is empty, it triggers an assertion failure. - ClientEvent *getClientEvent(); + ClientEvent * getClientEvent(); bool accessDenied() const { return m_access_denied; } @@ -327,12 +326,17 @@ public: // disconnect client when CSM failed. const std::string &accessDeniedReason() const { return m_access_denied_reason; } - const bool itemdefReceived() const { return m_itemdef_received; } - const bool nodedefReceived() const { return m_nodedef_received; } - const bool mediaReceived() const { return !m_media_downloader; } - const bool activeObjectsReceived() const { return m_activeobjects_received; } + const bool itemdefReceived() const + { return m_itemdef_received; } + const bool nodedefReceived() const + { return m_nodedef_received; } + const bool mediaReceived() const + { return !m_media_downloader; } + const bool activeObjectsReceived() const + { return m_activeobjects_received; } - u16 getProtoVersion() { return m_proto_ver; } + u16 getProtoVersion() + { return m_proto_ver; } bool connectedToServer(); void confirmRegistration(); @@ -346,29 +350,28 @@ public: float getRTT(); float getCurRate(); - Minimap *getMinimap() { return m_minimap; } - void setCamera(Camera *camera) { m_camera = camera; } + Minimap* getMinimap() { return m_minimap; } + void setCamera(Camera* camera) { m_camera = camera; } - Camera *getCamera() { return m_camera; } + Camera* getCamera () { return m_camera; } bool shouldShowMinimap() const; // IGameDef interface - IItemDefManager *getItemDefManager() override; - IWritableItemDefManager *getWritableItemDefManager() override; - const NodeDefManager *getNodeDefManager() override; - NodeDefManager *getWritableNodeDefManager() override; - ICraftDefManager *getCraftDefManager() override; - ITextureSource *getTextureSource(); - virtual IWritableShaderSource *getShaderSource(); + IItemDefManager* getItemDefManager() override; + IWritableItemDefManager* getWritableItemDefManager() override; + const NodeDefManager* getNodeDefManager() override; + NodeDefManager* getWritableNodeDefManager() override; + ICraftDefManager* getCraftDefManager() override; + ITextureSource* getTextureSource(); + virtual IWritableShaderSource* getShaderSource(); u16 allocateUnknownNodeId(const std::string &name) override; - virtual ISoundManager *getSoundManager(); - MtEventManager *getEventManager(); - virtual ParticleManager *getParticleManager(); - bool checkLocalPrivilege(const std::string &priv) { return checkPrivilege(priv); } - virtual scene::IAnimatedMesh *getMesh( - const std::string &filename, bool cache = false); - const std::string *getModFile(std::string filename); + virtual ISoundManager* getSoundManager(); + MtEventManager* getEventManager(); + virtual ParticleManager* getParticleManager(); + bool checkLocalPrivilege(const std::string &priv){ return checkPrivilege(priv); } + virtual scene::IAnimatedMesh* getMesh(const std::string &filename, bool cache = false); + const std::string* getModFile(std::string filename); std::string getModStoragePath() const override; bool registerModStorage(ModMetadata *meta) override; @@ -377,7 +380,7 @@ public: // The following set of functions is used by ClientMediaDownloader // Insert a media file appropriately into the appropriate manager bool loadMedia(const std::string &data, const std::string &filename, - bool from_media_push = false); + bool from_media_push = false); // Send a request for conventional media transfer void request_media(const std::vector<std::string> &file_requests); @@ -385,7 +388,10 @@ public: void makeScreenshot(); - inline void pushToChatQueue(ChatMessage *cec) { m_chat_queue.push(cec); } + inline void pushToChatQueue(ChatMessage *cec) + { + m_chat_queue.push(cec); + } ClientScripting *getScript() { return m_script; } const bool modsLoaded() const { return m_mods_loaded; } @@ -396,17 +402,26 @@ public: const Address getServerAddress(); - const std::string &getAddressName() const { return m_address_name; } + const std::string &getAddressName() const + { + return m_address_name; + } - inline u64 getCSMRestrictionFlags() const { return m_csm_restriction_flags; } + inline u64 getCSMRestrictionFlags() const + { + return m_csm_restriction_flags; + } inline bool checkCSMRestrictionFlag(CSMRestrictionFlags flag) const { - // return m_csm_restriction_flags & flag; + //return m_csm_restriction_flags & flag; return false; } - u32 getCSMNodeRangeLimit() const { return m_csm_restriction_noderange; } + u32 getCSMNodeRangeLimit() const + { + return m_csm_restriction_noderange; + } inline std::unordered_map<u32, u32> &getHUDTranslationMap() { @@ -415,19 +430,19 @@ public: bool joinModChannel(const std::string &channel) override; bool leaveModChannel(const std::string &channel) override; - bool sendModChannelMessage( - const std::string &channel, const std::string &message) override; + bool sendModChannelMessage(const std::string &channel, + const std::string &message) override; ModChannel *getModChannel(const std::string &channel) override; const std::string &getFormspecPrepend() const { return m_env.getLocalPlayer()->formspec_prepend; } - + void sendPlayerPos(v3f pos); void sendPlayerPos(); MeshUpdateThread m_mesh_update_thread; - + private: void loadMods(); bool checkBuiltinIntegrity(); @@ -436,11 +451,13 @@ private: void peerAdded(con::Peer *peer) override; void deletingPeer(con::Peer *peer, bool timeout) override; - void initLocalMapSaving(const Address &address, const std::string &hostname, + void initLocalMapSaving(const Address &address, + const std::string &hostname, bool is_local_server); void ReceiveAll(); + void deleteAuthData(); // helper method shared with clientpackethandler static AuthMechanism choseAuthMech(const u32 mechs); @@ -453,7 +470,8 @@ private: void sendRemovedSounds(std::vector<s32> &soundList); // Helper function - inline std::string getPlayerName() { return m_env.getLocalPlayer()->getName(); } + inline std::string getPlayerName() + { return m_env.getLocalPlayer()->getName(); } bool canSendChatMessage() const; @@ -470,6 +488,7 @@ private: ISoundManager *m_sound; MtEventManager *m_event; + ClientEnvironment m_env; ParticleManager m_particle_manager; std::unique_ptr<con::Connection> m_con; @@ -497,8 +516,8 @@ private: int m_crack_level = -1; v3s16 m_crack_pos; // 0 <= m_daynight_i < DAYNIGHT_CACHE_COUNT - // s32 m_daynight_i; - // u32 m_daynight_ratio; + //s32 m_daynight_i; + //u32 m_daynight_ratio; std::queue<std::wstring> m_out_chat_queue; u32 m_last_chat_message_sent; float m_chat_message_allowance = 5.0f; @@ -557,7 +576,7 @@ private: // Detached inventories // key = name - std::unordered_map<std::string, Inventory *> m_detached_inventories; + std::unordered_map<std::string, Inventory*> m_detached_inventories; // Storage for mesh data for creating multiple instances of the same mesh StringMap m_mesh_data; |