X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fserver.h;h=f14a861fd0f9d3682f3f30780cb61881fc91d81e;hb=5a6618cc57097e1e7205ad6b1d967a3ad79d016e;hp=3086e87621345332def05297327ce6fc4282e342;hpb=ff73c7a5da6ab8ac0bb678ebf25b83e805397029;p=minetest.git diff --git a/src/server.h b/src/server.h index 3086e8762..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; @@ -113,8 +90,8 @@ struct ServerSoundParams float fade = 0.0f; float pitch = 1.0f; bool loop = false; - float max_hear_distance = 32*BS; - v3f pos = v3f(0, 0, 0); + float max_hear_distance = 32 * BS; + v3f pos; u16 object = 0; std::string to_player = ""; @@ -142,7 +119,7 @@ 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); @@ -309,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); @@ -348,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); @@ -388,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); @@ -433,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); @@ -465,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 */ @@ -521,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; @@ -569,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; /* @@ -602,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; @@ -629,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 @@ -642,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; @@ -651,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) @@ -662,7 +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; + + // CSM flavour limits byteflag + u64 m_csm_flavour_limits = CSMFlavourLimit::CSM_FL_NONE; + u32 m_csm_noderange_limit = 8; }; /* @@ -671,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 -