X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fserver.h;h=0b4c67deb10a0008cb3fb1a10ff8529760039232;hb=618314985d6a632ccfd2001d969d32a5ee6e4ca1;hp=e91821d04ab777af7e3a06dc607234a40eb5fa4e;hpb=9d67037570ef4dae5d97a820ea7ccd0a1a4328b6;p=minetest.git diff --git a/src/server.h b/src/server.h index e91821d04..0b4c67deb 100644 --- a/src/server.h +++ b/src/server.h @@ -31,12 +31,32 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "ban.h" #include "gamedef.h" #include "serialization.h" // For SER_FMT_VER_INVALID +#include "serverremoteplayer.h" +#include "mods.h" +#include "inventorymanager.h" +#include "subgame.h" struct LuaState; typedef struct lua_State lua_State; -class IWritableToolDefManager; +class IWritableItemDefManager; class IWritableNodeDefManager; class IWritableCraftDefManager; -class IWritableCraftItemDefManager; + +class ServerError : public std::exception +{ +public: + ServerError(const std::string &s) + { + m_s = "ServerError: "; + m_s += s; + } + virtual ~ServerError() throw() + {} + virtual const char * what() const throw() + { + return m_s.c_str(); + } + std::string m_s; +}; /* Some random functions @@ -209,8 +229,6 @@ struct PlayerInfo void PrintLine(std::ostream *s); }; -u32 PIChecksum(core::list &l); - /* Used for queueing and sorting block transfers in containers @@ -233,6 +251,28 @@ struct PrioritySortedBlockTransfer u16 peer_id; }; +struct TextureRequest +{ + std::string name; + + TextureRequest(const std::string &name_=""): + name(name_) + {} +}; + +struct TextureInformation +{ + std::string path; + std::string sha1_digest; + + TextureInformation(const std::string path_="", + const std::string sha1_digest_=""): + path(path_), + sha1_digest(sha1_digest_) + { + } +}; + class RemoteClient { public: @@ -366,10 +406,11 @@ class Server : public con::PeerHandler, public MapEventReceiver, /* NOTE: Every public method should be thread-safe */ - + Server( - std::string mapsavedir, - std::string configpath + const std::string &path_world, + const std::string &path_config, + const SubgameSpec &gamespec ); ~Server(); void start(unsigned short port); @@ -411,8 +452,9 @@ class Server : public con::PeerHandler, public MapEventReceiver, /* Shall be called with the environment and the connection locked. */ - Inventory* getInventory(InventoryContext *c, std::string id); - void inventoryModified(InventoryContext *c, std::string id); + Inventory* getInventory(const InventoryLocation &loc); + std::string getInventoryOwner(const InventoryLocation &loc); + void setInventoryModified(const InventoryLocation &loc); // Connection must be locked when called std::wstring getStatusString(); @@ -489,17 +531,24 @@ class Server : public con::PeerHandler, public MapEventReceiver, // IGameDef interface // Under envlock - virtual IToolDefManager* getToolDefManager(); + virtual IItemDefManager* getItemDefManager(); virtual INodeDefManager* getNodeDefManager(); virtual ICraftDefManager* getCraftDefManager(); - virtual ICraftItemDefManager* getCraftItemDefManager(); virtual ITextureSource* getTextureSource(); virtual u16 allocateUnknownNodeId(const std::string &name); - IWritableToolDefManager* getWritableToolDefManager(); + IWritableItemDefManager* getWritableItemDefManager(); IWritableNodeDefManager* getWritableNodeDefManager(); IWritableCraftDefManager* getWritableCraftDefManager(); - IWritableCraftItemDefManager* getWritableCraftItemDefManager(); + + const ModSpec* getModSpec(const std::string &modname); + + std::string getWorldPath(){ return m_path_world; } + + void setAsyncFatalError(const std::string &error) + { + m_async_fatal_error.set(error); + } private: @@ -518,12 +567,10 @@ class Server : public con::PeerHandler, public MapEventReceiver, const std::wstring &reason); static void SendDeathscreen(con::Connection &con, u16 peer_id, bool set_camera_point_target, v3f camera_point_target); - static void SendToolDef(con::Connection &con, u16 peer_id, - IToolDefManager *tooldef); + static void SendItemDef(con::Connection &con, u16 peer_id, + IItemDefManager *itemdef); static void SendNodeDef(con::Connection &con, u16 peer_id, INodeDefManager *nodedef); - static void SendCraftItemDef(con::Connection &con, u16 peer_id, - ICraftItemDefManager *nodedef); /* Non-static send methods. @@ -535,7 +582,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, // Envlock and conlock should be locked when calling these void SendInventory(u16 peer_id); // send wielded item info about player to all - void SendWieldedItem(const Player *player); + void SendWieldedItem(const ServerRemotePlayer *srp); // send wielded item info about all players to all players void SendPlayerItems(); void SendChatMessage(u16 peer_id, const std::wstring &message); @@ -559,13 +606,17 @@ class Server : public con::PeerHandler, public MapEventReceiver, // Sends blocks to clients (locks env and con on its own) void SendBlocks(float dtime); - void SendTextures(u16 peer_id); + void PrepareTextures(); + + void SendTextureAnnouncement(u16 peer_id); + + void SendTexturesRequested(u16 peer_id,core::list tosend); /* Something random */ - void HandlePlayerHP(Player *player, s16 damage); + void DiePlayer(Player *player); void RespawnPlayer(Player *player); void UpdateCrafting(u16 peer_id); @@ -578,7 +629,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, { Player *player = m_env->getPlayer(peer_id); if(player == NULL) - return "[id="+itos(peer_id); + return "[id="+itos(peer_id)+"]"; return player->getName(); } @@ -602,6 +653,19 @@ class Server : public con::PeerHandler, public MapEventReceiver, Variables */ + // World directory + std::string m_path_world; + // Path to user's configuration file ("" = no configuration file) + std::string m_path_config; + // Subgame specification + SubgameSpec m_gamespec; + + // Equivalent of /usr/share/minetest/server + std::string m_path_share; + + // Thread can set; step() will throw as ServerError + MutexedVariable m_async_fatal_error; + // Some timers float m_liquid_transform_timer; float m_print_info_timer; @@ -633,8 +697,8 @@ class Server : public con::PeerHandler, public MapEventReceiver, // Envlock and conlock should be locked when using Lua lua_State *m_lua; - // Tool definition manager - IWritableToolDefManager *m_toolmgr; + // Item definition manager + IWritableItemDefManager *m_itemdef; // Node definition manager IWritableNodeDefManager *m_nodedef; @@ -642,8 +706,8 @@ class Server : public con::PeerHandler, public MapEventReceiver, // Craft definition manager IWritableCraftDefManager *m_craftdef; - // CraftItem definition manager - IWritableCraftItemDefManager *m_craftitemdef; + // Mods + core::list m_mods; /* Threads @@ -695,18 +759,12 @@ class Server : public con::PeerHandler, public MapEventReceiver, /* Random stuff */ - - // Map directory - std::string m_mapsavedir; - - // Configuration path ("" = no configuration file) - std::string m_configpath; // Mod parent directory paths core::list m_modspaths; bool m_shutdown_requested; - + /* Map edit event queue. Automatically receives all map edits. The constructor of this class registers us to receive them through @@ -736,6 +794,8 @@ class Server : public con::PeerHandler, public MapEventReceiver, friend class EmergeThread; friend class RemoteClient; + + std::map m_Textures; }; /*