X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fserver.h;h=abe466b16f957e042810ff0f7d62aa03d4475f69;hb=13159c1a48690d4ede3dbabc7699ea3d49072860;hp=32ce8eb53f92488003c19bd6f19cfef01de60e5c;hpb=2e90ed07acd295387c0da6c0689d14665b6c125d;p=dragonfireclient.git diff --git a/src/server.h b/src/server.h index 32ce8eb53..abe466b16 100644 --- a/src/server.h +++ b/src/server.h @@ -27,19 +27,20 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "map.h" #include "inventory.h" -#include "auth.h" #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" +#include "sound.h" struct LuaState; typedef struct lua_State lua_State; class IWritableItemDefManager; class IWritableNodeDefManager; class IWritableCraftDefManager; +class EventManager; +class PlayerSAO; class ServerError : public std::exception { @@ -251,21 +252,21 @@ struct PrioritySortedBlockTransfer u16 peer_id; }; -struct TextureRequest +struct MediaRequest { std::string name; - TextureRequest(const std::string &name_=""): + MediaRequest(const std::string &name_=""): name(name_) {} }; -struct TextureInformation +struct MediaInfo { std::string path; std::string sha1_digest; - TextureInformation(const std::string path_="", + MediaInfo(const std::string path_="", const std::string sha1_digest_=""): path(path_), sha1_digest(sha1_digest_) @@ -273,6 +274,39 @@ struct TextureInformation } }; +struct ServerSoundParams +{ + float gain; + std::string to_player; + enum Type{ + SSP_LOCAL=0, + SSP_POSITIONAL=1, + SSP_OBJECT=2 + } type; + v3f pos; + u16 object; + float max_hear_distance; + bool loop; + + ServerSoundParams(): + gain(1.0), + to_player(""), + type(SSP_LOCAL), + pos(0,0,0), + object(0), + max_hear_distance(32*BS), + loop(false) + {} + + v3f getPos(ServerEnvironment *env, bool *pos_exists) const; +}; + +struct ServerPlayingSound +{ + ServerSoundParams params; + std::set clients; // peer ids +}; + class RemoteClient { public: @@ -460,18 +494,16 @@ class Server : public con::PeerHandler, public MapEventReceiver, m_shutdown_requested = true; } - // Envlock and conlock should be locked when calling this - void SendMovePlayer(Player *player); + // Returns -1 if failed, sound handle on success + // Envlock + conlock + s32 playSound(const SimpleSoundSpec &spec, const ServerSoundParams ¶ms); + void stopSound(s32 handle); - // Thread-safe - u64 getPlayerAuthPrivs(const std::string &name); - void setPlayerAuthPrivs(const std::string &name, u64 privs); - u64 getPlayerEffectivePrivs(const std::string &name); + // Envlock + conlock + std::set getPlayerEffectivePrivs(const std::string &name); + bool checkPriv(const std::string &name, const std::string &priv); + void reportPrivsModified(const std::string &name=""); // ""=all - // Changes a player's password, password must be given as plaintext - // If the player doesn't exist, a new entry is added to the auth manager - void setPlayerPassword(const std::string &name, const std::wstring &password); - // Saves g_settings to configpath given at initialization void saveConfig(); @@ -513,6 +545,8 @@ class Server : public con::PeerHandler, public MapEventReceiver, virtual ICraftDefManager* getCraftDefManager(); virtual ITextureSource* getTextureSource(); virtual u16 allocateUnknownNodeId(const std::string &name); + virtual ISoundManager* getSoundManager(); + virtual MtEventManager* getEventManager(); IWritableItemDefManager* getWritableItemDefManager(); IWritableNodeDefManager* getWritableNodeDefManager(); @@ -522,6 +556,8 @@ class Server : public con::PeerHandler, public MapEventReceiver, std::string getWorldPath(){ return m_path_world; } + bool isSingleplayer(){ return m_simple_singleplayer_mode; } + void setAsyncFatalError(const std::string &error) { m_async_fatal_error.set(error); @@ -558,13 +594,11 @@ 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 ServerRemotePlayer *srp); - // send wielded item info about all players to all players - void SendPlayerItems(); void SendChatMessage(u16 peer_id, const std::wstring &message); void BroadcastChatMessage(const std::wstring &message); - void SendPlayerHP(Player *player); + void SendPlayerHP(u16 peer_id); + void SendMovePlayer(u16 peer_id); + void SendPlayerPrivileges(u16 peer_id); /* Send a node removal/addition event to all clients except ignore_id. Additionally, if far_players!=NULL, players further away than @@ -583,18 +617,17 @@ class Server : public con::PeerHandler, public MapEventReceiver, // Sends blocks to clients (locks env and con on its own) void SendBlocks(float dtime); - void PrepareTextures(); - - void SendTextureAnnouncement(u16 peer_id); - - void SendTexturesRequested(u16 peer_id,core::list tosend); + void fillMediaCache(); + void sendMediaAnnouncement(u16 peer_id); + void sendRequestedMedia(u16 peer_id, + const core::list &tosend); /* Something random */ - void DiePlayer(Player *player); - void RespawnPlayer(Player *player); + void DiePlayer(u16 peer_id); + void RespawnPlayer(u16 peer_id); void UpdateCrafting(u16 peer_id); @@ -610,6 +643,15 @@ class Server : public con::PeerHandler, public MapEventReceiver, return player->getName(); } + // When called, environment mutex should be locked + PlayerSAO* getPlayerSAO(u16 peer_id) + { + Player *player = m_env->getPlayer(peer_id); + if(player == NULL) + return NULL; + return player->getPlayerSAO(); + } + /* Get a player from memory or creates one. If player is already connected, return NULL @@ -617,15 +659,13 @@ class Server : public con::PeerHandler, public MapEventReceiver, Call with env and con locked. */ - ServerRemotePlayer *emergePlayer(const char *name, u16 peer_id); + PlayerSAO *emergePlayer(const char *name, u16 peer_id); // Locks environment and connection by its own struct PeerChange; void handlePeerChange(PeerChange &c); void handlePeerChanges(); - u64 getPlayerPrivs(Player *player); - /* Variables */ @@ -640,9 +680,6 @@ class Server : public con::PeerHandler, public MapEventReceiver, // functionality bool m_simple_singleplayer_mode; - // Equivalent of /usr/share/minetest/server - std::string m_path_share; - // Thread can set; step() will throw as ServerError MutexedVariable m_async_fatal_error; @@ -667,9 +704,6 @@ class Server : public con::PeerHandler, public MapEventReceiver, // Connected clients (behind the con mutex) core::map m_clients; - // User authentication - AuthManager m_authmanager; - // Bann checking BanManager m_banmanager; @@ -686,6 +720,9 @@ class Server : public con::PeerHandler, public MapEventReceiver, // Craft definition manager IWritableCraftDefManager *m_craftdef; + // Event manager + EventManager *m_event; + // Mods core::list m_mods; @@ -761,6 +798,13 @@ class Server : public con::PeerHandler, public MapEventReceiver, This is behind m_env_mutex */ bool m_ignore_map_edit_events; + /* + If a non-empty area, map edit events contained within are left + unsent. Done at map generation time to speed up editing of the + generated area, as it will be sent anyway. + This is behind m_env_mutex + */ + VoxelArea m_ignore_map_edit_events_area; /* If set to !=0, the incoming MapEditEvents are modified to have this peed id as the disabled recipient @@ -771,7 +815,13 @@ class Server : public con::PeerHandler, public MapEventReceiver, friend class EmergeThread; friend class RemoteClient; - std::map m_Textures; + std::map m_media; + + /* + Sounds + */ + std::map m_playing_sounds; + s32 m_next_sound_id; }; /*