X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fserver.h;h=f14a861fd0f9d3682f3f30780cb61881fc91d81e;hb=5a6618cc57097e1e7205ad6b1d967a3ad79d016e;hp=5236851fe2578d680ca174c19f6a3ebf1e870c1b;hpb=d4c0f91275fe70fef73b316c36abfb989dfd55b1;p=minetest.git diff --git a/src/server.h b/src/server.h index 5236851fe..f14a861fd 100644 --- a/src/server.h +++ b/src/server.h @@ -17,10 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef SERVER_HEADER -#define SERVER_HEADER +#pragma once -#include "network/connection.h" #include "irr_v3d.h" #include "map.h" #include "hud.h" @@ -30,25 +28,29 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "inventorymanager.h" #include "subgame.h" #include "tileanimation.h" // struct TileAnimationParams +#include "network/peerhandler.h" +#include "network/address.h" #include "util/numeric.h" #include "util/thread.h" #include "util/basic_macros.h" #include "serverenvironment.h" -#include "chat_interface.h" #include "clientiface.h" -#include "remoteplayer.h" -#include "network/networkpacket.h" +#include "chatmessage.h" #include #include #include #include +class ChatEvent; +struct ChatEventChat; +struct ChatInterface; class IWritableItemDefManager; class IWritableNodeDefManager; class IWritableCraftDefManager; class BanManager; class EventManager; class Inventory; +class RemotePlayer; class PlayerSAO; class IRollbackManager; struct RollbackAction; @@ -64,31 +66,6 @@ enum ClientDeletionReason { CDR_DENY }; -class MapEditEventAreaIgnorer -{ -public: - MapEditEventAreaIgnorer(VoxelArea *ignorevariable, const VoxelArea &a): - m_ignorevariable(ignorevariable) - { - if(m_ignorevariable->getVolume() == 0) - *m_ignorevariable = a; - else - m_ignorevariable = NULL; - } - - ~MapEditEventAreaIgnorer() - { - if(m_ignorevariable) - { - assert(m_ignorevariable->getVolume() != 0); - *m_ignorevariable = VoxelArea(); - } - } - -private: - VoxelArea *m_ignorevariable; -}; - struct MediaInfo { std::string path; @@ -104,29 +81,19 @@ struct MediaInfo struct ServerSoundParams { - float gain; - std::string to_player; - enum Type{ - SSP_LOCAL=0, - SSP_POSITIONAL=1, - SSP_OBJECT=2 - } type; + enum Type { + SSP_LOCAL, + SSP_POSITIONAL, + SSP_OBJECT + } type = SSP_LOCAL; + float gain = 1.0f; + float fade = 0.0f; + float pitch = 1.0f; + bool loop = false; + float max_hear_distance = 32 * BS; v3f pos; - u16 object; - float max_hear_distance; - bool loop; - float fade; - - ServerSoundParams(): - gain(1.0), - to_player(""), - type(SSP_LOCAL), - pos(0,0,0), - object(0), - max_hear_distance(32*BS), - loop(false), - fade(0) - {} + u16 object = 0; + std::string to_player = ""; v3f getPos(ServerEnvironment *env, bool *pos_exists) const; }; @@ -152,9 +119,11 @@ class Server : public con::PeerHandler, public MapEventReceiver, bool simple_singleplayer_mode, bool ipv6, bool dedicated, - ChatInterface *iface = NULL + ChatInterface *iface = nullptr ); ~Server(); + DISABLE_CLASS_COPY(Server); + void start(Address bind_addr); void stop(); // This is mainly a way to pass the time to the server. @@ -317,18 +286,13 @@ class Server : public con::PeerHandler, public MapEventReceiver, bool hudChange(RemotePlayer *player, u32 id, HudElementStat stat, void *value); bool hudSetFlags(RemotePlayer *player, u32 flags, u32 mask); bool hudSetHotbarItemcount(RemotePlayer *player, s32 hotbar_itemcount); - s32 hudGetHotbarItemcount(RemotePlayer *player) const - { return player->getHotbarItemcount(); } + s32 hudGetHotbarItemcount(RemotePlayer *player) const; void hudSetHotbarImage(RemotePlayer *player, std::string name); std::string hudGetHotbarImage(RemotePlayer *player); void hudSetHotbarSelectedImage(RemotePlayer *player, std::string name); - const std::string &hudGetHotbarSelectedImage(RemotePlayer *player) const - { - return player->getHotbarSelectedImage(); - } + const std::string &hudGetHotbarSelectedImage(RemotePlayer *player) const; - inline Address getPeerAddress(u16 peer_id) - { return m_con.GetPeerAddress(peer_id); } + Address getPeerAddress(u16 peer_id); bool setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4], f32 frame_speed); @@ -356,7 +320,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, void DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason=""); void acceptAuth(u16 peer_id, bool forSudoMode); void DenyAccess_Legacy(u16 peer_id, const std::wstring &reason); - bool getClientConInfo(u16 peer_id, con::rtt_stat_type type,float* retval); + bool getClientConInfo(u16 peer_id, con::rtt_stat_type type, float* retval); bool getClientInfo(u16 peer_id,ClientState* state, u32* uptime, u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch, std::string* vers_string); @@ -396,7 +360,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, void SetBlocksNotSent(std::map& block); - void SendChatMessage(u16 peer_id, const std::wstring &message); + void SendChatMessage(u16 peer_id, const ChatMessage &message); void SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed); void SendPlayerHP(u16 peer_id); @@ -441,7 +405,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, void SendBlocks(float dtime); void fillMediaCache(); - void sendMediaAnnouncement(u16 peer_id); + void sendMediaAnnouncement(u16 peer_id, const std::string &lang_code); void sendRequestedMedia(u16 peer_id, const std::vector &tosend); @@ -473,6 +437,8 @@ class Server : public con::PeerHandler, public MapEventReceiver, u32 SendActiveObjectRemoveAdd(u16 peer_id, const std::string &datas); void SendActiveObjectMessages(u16 peer_id, const std::string &datas, bool reliable = true); + void SendCSMFlavourLimits(u16 peer_id); + /* Something random */ @@ -486,7 +452,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, // This returns the answer to the sender of wmessage, or "" if there is none std::wstring handleChat(const std::string &name, const std::wstring &wname, - const std::wstring &wmessage, + std::wstring wmessage_input, bool check_shout_priv = false, RemotePlayer *player = NULL); void handleAdminChat(const ChatEventChat *evt); @@ -529,32 +495,32 @@ class Server : public con::PeerHandler, public MapEventReceiver, MutexedVariable m_async_fatal_error; // Some timers - float m_liquid_transform_timer; - float m_liquid_transform_every; - float m_masterserver_timer; - float m_emergethread_trigger_timer; - float m_savemap_timer; + float m_liquid_transform_timer = 0.0f; + float m_liquid_transform_every = 1.0f; + float m_masterserver_timer = 0.0f; + float m_emergethread_trigger_timer = 0.0f; + float m_savemap_timer = 0.0f; IntervalLimiter m_map_timer_and_unload_interval; // Environment - ServerEnvironment *m_env; + ServerEnvironment *m_env = nullptr; // server connection - con::Connection m_con; + std::shared_ptr m_con; // Ban checking - BanManager *m_banmanager; + BanManager *m_banmanager = nullptr; // Rollback manager (behind m_env_mutex) - IRollbackManager *m_rollback; - bool m_enable_rollback_recording; // Updated once in a while + IRollbackManager *m_rollback = nullptr; + bool m_enable_rollback_recording = false; // Updated once in a while // Emerge manager - EmergeManager *m_emerge; + EmergeManager *m_emerge = nullptr; // Scripting // Envlock and conlock should be locked when using Lua - ServerScripting *m_script; + ServerScripting *m_script = nullptr; // Item definition manager IWritableItemDefManager *m_itemdef; @@ -577,21 +543,21 @@ class Server : public con::PeerHandler, public MapEventReceiver, // A buffer for time steps // step() increments and AsyncRunStep() run by m_thread reads it. - float m_step_dtime; + float m_step_dtime = 0.0f; std::mutex m_step_dtime_mutex; // current server step lag counter float m_lag; // The server mainly operates in this thread - ServerThread *m_thread; + ServerThread *m_thread = nullptr; /* Time related stuff */ // Timer for sending time of day over network - float m_time_of_day_send_timer; + float m_time_of_day_send_timer = 0.0f; // Uptime of server in seconds MutexedVariable m_uptime; /* @@ -610,10 +576,10 @@ class Server : public con::PeerHandler, public MapEventReceiver, Random stuff */ - bool m_shutdown_requested; + bool m_shutdown_requested = false; std::string m_shutdown_msg; - bool m_shutdown_ask_reconnect; - float m_shutdown_timer; + bool m_shutdown_ask_reconnect = false; + float m_shutdown_timer = 0.0f; ChatInterface *m_admin_chat; std::string m_admin_nick; @@ -637,7 +603,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, all sending of information by itself. This is behind m_env_mutex */ - bool m_ignore_map_edit_events; + bool m_ignore_map_edit_events = false; /* If a non-empty area, map edit events contained within are left unsent. Done at map generation time to speed up editing of the @@ -650,7 +616,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, this peed id as the disabled recipient This is behind m_env_mutex */ - u16 m_ignore_map_edit_events_peer_id; + u16 m_ignore_map_edit_events_peer_id = 0; // media files known to server std::unordered_map m_media; @@ -659,7 +625,7 @@ class Server : public con::PeerHandler, public MapEventReceiver, Sounds */ std::unordered_map m_playing_sounds; - s32 m_next_sound_id; + s32 m_next_sound_id = 0; /* Detached inventories (behind m_env_mutex) @@ -670,9 +636,11 @@ class Server : public con::PeerHandler, public MapEventReceiver, std::map m_detached_inventories_player; std::unordered_map m_mod_storages; - float m_mod_storage_save_timer; + float m_mod_storage_save_timer = 10.0f; - DISABLE_CLASS_COPY(Server); + // CSM flavour limits byteflag + u64 m_csm_flavour_limits = CSMFlavourLimit::CSM_FL_NONE; + u32 m_csm_noderange_limit = 8; }; /* @@ -681,6 +649,3 @@ class Server : public con::PeerHandler, public MapEventReceiver, Shuts down when kill is set to true. */ void dedicated_server_loop(Server &server, bool &kill); - -#endif -