]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/server.h
Cpp11 patchset 11: continue working on constructor style migration (#6004)
[dragonfireclient.git] / src / server.h
index e1e8f84dc658d035c131d6b80f03b0a7a9f32b00..b60482a75b3bcce518aa858f0d9fc729b405aa85 100644 (file)
@@ -104,27 +104,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;
-
-       ServerSoundParams():
-               gain(1.0),
-               to_player(""),
-               type(SSP_LOCAL),
-               pos(0,0,0),
-               object(0),
-               max_hear_distance(32*BS),
-               loop(false)
-       {}
+       u16 object = 0;
+       std::string to_player = "";
 
        v3f getPos(ServerEnvironment *env, bool *pos_exists) const;
 };
@@ -132,7 +124,8 @@ struct ServerSoundParams
 struct ServerPlayingSound
 {
        ServerSoundParams params;
-       UNORDERED_SET<u16> clients; // peer ids
+       SimpleSoundSpec spec;
+       std::unordered_set<u16> clients; // peer ids
 };
 
 class Server : public con::PeerHandler, public MapEventReceiver,
@@ -148,9 +141,12 @@ class Server : public con::PeerHandler, public MapEventReceiver,
                const SubgameSpec &gamespec,
                bool simple_singleplayer_mode,
                bool ipv6,
-               ChatInterface *iface = NULL
+               bool dedicated,
+               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.
@@ -173,7 +169,6 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void handleCommand_Init_Legacy(NetworkPacket* pkt);
        void handleCommand_Init2(NetworkPacket* pkt);
        void handleCommand_RequestMedia(NetworkPacket* pkt);
-       void handleCommand_ReceivedMedia(NetworkPacket* pkt);
        void handleCommand_ClientReady(NetworkPacket* pkt);
        void handleCommand_GotBlocks(NetworkPacket* pkt);
        void handleCommand_PlayerPos(NetworkPacket* pkt);
@@ -225,17 +220,13 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        inline bool getShutdownRequested() const { return m_shutdown_requested; }
 
        // request server to shutdown
-       void requestShutdown(const std::string &msg, bool reconnect)
-       {
-               m_shutdown_requested = true;
-               m_shutdown_msg = msg;
-               m_shutdown_ask_reconnect = reconnect;
-       }
+       void requestShutdown(const std::string &msg, bool reconnect, float delay = 0.0f);
 
        // Returns -1 if failed, sound handle on success
        // Envlock
        s32 playSound(const SimpleSoundSpec &spec, const ServerSoundParams &params);
        void stopSound(s32 handle);
+       void fadeSound(s32 handle, float step, float gain);
 
        // Envlock
        std::set<std::string> getPlayerEffectivePrivs(const std::string &name);
@@ -311,6 +302,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        bool showFormspec(const char *name, const std::string &formspec, const std::string &formname);
        Map & getMap() { return m_env->getMap(); }
        ServerEnvironment & getEnv() { return *m_env; }
+       v3f findSpawnPos();
 
        u32 hudAdd(RemotePlayer *player, HudElement *element);
        bool hudRemove(RemotePlayer *player, u32 id);
@@ -335,7 +327,14 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        bool setPlayerEyeOffset(RemotePlayer *player, v3f first, v3f third);
 
        bool setSky(RemotePlayer *player, const video::SColor &bgcolor,
-                       const std::string &type, const std::vector<std::string> &params);
+                       const std::string &type, const std::vector<std::string> &params,
+                       bool &clouds);
+       bool setClouds(RemotePlayer *player, float density,
+                       const video::SColor &color_bright,
+                       const video::SColor &color_ambient,
+                       float height,
+                       float thickness,
+                       const v2f &speed);
 
        bool overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness);
 
@@ -368,7 +367,7 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        Address m_bind_addr;
 
        // Environment mutex (envlock)
-       Mutex m_env_mutex;
+       std::mutex m_env_mutex;
 
 private:
 
@@ -404,7 +403,14 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        void SendHUDSetFlags(u16 peer_id, u32 flags, u32 mask);
        void SendHUDSetParam(u16 peer_id, u16 param, const std::string &value);
        void SendSetSky(u16 peer_id, const video::SColor &bgcolor,
-                       const std::string &type, const std::vector<std::string> &params);
+                       const std::string &type, const std::vector<std::string> &params,
+                       bool &clouds);
+       void SendCloudParams(u16 peer_id, float density,
+                       const video::SColor &color_bright,
+                       const video::SColor &color_ambient,
+                       float height,
+                       float thickness,
+                       const v2f &speed);
        void SendOverrideDayNightRatio(u16 peer_id, bool do_override, float ratio);
 
        /*
@@ -472,13 +478,11 @@ 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);
 
-       v3f findSpawnPos();
-
        // When called, connection mutex should be locked
        RemoteClient* getClient(u16 peer_id,ClientState state_min=CS_Active);
        RemoteClient* getClientNoEx(u16 peer_id,ClientState state_min=CS_Active);
@@ -510,37 +514,39 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        // functionality
        bool m_simple_singleplayer_mode;
        u16 m_max_chatmessage_length;
+       // For "dedicated" server list flag
+       bool m_dedicated;
 
        // Thread can set; step() will throw as ServerError
        MutexedVariable<std::string> 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;
 
        // 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;
@@ -563,21 +569,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;
-       Mutex m_step_dtime_mutex;
+       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<double> m_uptime;
        /*
@@ -596,9 +602,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;
+       bool m_shutdown_ask_reconnect = false;
+       float m_shutdown_timer = 0.0f;
 
        ChatInterface *m_admin_chat;
        std::string m_admin_nick;
@@ -622,7 +629,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
@@ -635,16 +642,16 @@ 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
-       UNORDERED_MAP<std::string, MediaInfo> m_media;
+       std::unordered_map<std::string, MediaInfo> m_media;
 
        /*
                Sounds
        */
-       UNORDERED_MAP<s32, ServerPlayingSound> m_playing_sounds;
-       s32 m_next_sound_id;
+       std::unordered_map<s32, ServerPlayingSound> m_playing_sounds;
+       s32 m_next_sound_id = 0;
 
        /*
                Detached inventories (behind m_env_mutex)
@@ -654,10 +661,8 @@ class Server : public con::PeerHandler, public MapEventReceiver,
        // value = "" (visible to all players) or player name
        std::map<std::string, std::string> m_detached_inventories_player;
 
-       UNORDERED_MAP<std::string, ModMetadata *> m_mod_storages;
-       float m_mod_storage_save_timer;
-
-       DISABLE_CLASS_COPY(Server);
+       std::unordered_map<std::string, ModMetadata *> m_mod_storages;
+       float m_mod_storage_save_timer = 10.0f;
 };
 
 /*