Add session_t typedef + remove unused functions (#6470)
[oweals/minetest.git] / src / server.h
index eeb134a5c6b1f6767c9d4130b6fb5578ef267477..5b538ea931569192d7c1fe1976d92e8b64e14e44 100644 (file)
@@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #pragma once
 
-#include "network/connection.h"
 #include "irr_v3d.h"
 #include "map.h"
 #include "hud.h"
@@ -29,6 +28,8 @@ 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"
@@ -49,6 +50,7 @@ class IWritableCraftDefManager;
 class BanManager;
 class EventManager;
 class Inventory;
+class ModChannelMgr;
 class RemotePlayer;
 class PlayerSAO;
 class IRollbackManager;
@@ -101,7 +103,7 @@ struct ServerPlayingSound
 {
        ServerSoundParams params;
        SimpleSoundSpec spec;
-       std::unordered_set<u16> clients; // peer ids
+       std::unordered_set<session_t> clients; // peer ids
 };
 
 class Server : public con::PeerHandler, public MapEventReceiver,
@@ -131,7 +133,7 @@ public:
        // This is run by ServerThread and does the actual processing
        void AsyncRunStep(bool initial_step=false);
        void Receive();
-       PlayerSAO* StageTwoClientInit(u16 peer_id);
+       PlayerSAO* StageTwoClientInit(session_t peer_id);
 
        /*
         * Command Handlers
@@ -142,8 +144,10 @@ public:
        void handleCommand_Null(NetworkPacket* pkt) {};
        void handleCommand_Deprecated(NetworkPacket* pkt);
        void handleCommand_Init(NetworkPacket* pkt);
-       void handleCommand_Init_Legacy(NetworkPacket* pkt);
        void handleCommand_Init2(NetworkPacket* pkt);
+       void handleCommand_ModChannelJoin(NetworkPacket *pkt);
+       void handleCommand_ModChannelLeave(NetworkPacket *pkt);
+       void handleCommand_ModChannelMsg(NetworkPacket *pkt);
        void handleCommand_RequestMedia(NetworkPacket* pkt);
        void handleCommand_ClientReady(NetworkPacket* pkt);
        void handleCommand_GotBlocks(NetworkPacket* pkt);
@@ -165,7 +169,8 @@ public:
 
        void ProcessData(NetworkPacket *pkt);
 
-       void Send(NetworkPacket* pkt);
+       void Send(NetworkPacket *pkt);
+       void Send(session_t peer_id, NetworkPacket *pkt);
 
        // Helper for handleCommand_PlayerPos and handleCommand_Interact
        void process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,
@@ -291,8 +296,7 @@ public:
        void hudSetHotbarSelectedImage(RemotePlayer *player, std::string name);
        const std::string &hudGetHotbarSelectedImage(RemotePlayer *player) const;
 
-       inline Address getPeerAddress(u16 peer_id)
-                       { return m_con.GetPeerAddress(peer_id); }
+       Address getPeerAddress(session_t peer_id);
 
        bool setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4],
                        f32 frame_speed);
@@ -314,14 +318,16 @@ public:
        void peerAdded(con::Peer *peer);
        void deletingPeer(con::Peer *peer, bool timeout);
 
-       void DenySudoAccess(u16 peer_id);
-       void DenyAccessVerCompliant(u16 peer_id, u16 proto_ver, AccessDeniedCode reason,
+       void DenySudoAccess(session_t peer_id);
+       void DenyAccessVerCompliant(session_t peer_id, u16 proto_ver, AccessDeniedCode reason,
                const std::string &str_reason = "", bool reconnect = false);
-       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 getClientInfo(u16 peer_id,ClientState* state, u32* uptime,
+       void DenyAccess(session_t peer_id, AccessDeniedCode reason,
+               const std::string &custom_reason = "");
+       void acceptAuth(session_t peer_id, bool forSudoMode);
+       void DenyAccess_Legacy(session_t peer_id, const std::wstring &reason);
+       void DisconnectPeer(session_t peer_id);
+       bool getClientConInfo(session_t peer_id, con::rtt_stat_type type, float *retval);
+       bool getClientInfo(session_t peer_id, ClientState *state, u32 *uptime,
                        u8* ser_vers, u16* prot_vers, u8* major, u8* minor, u8* patch,
                        std::string* vers_string);
 
@@ -330,11 +336,16 @@ public:
        void SendPlayerHPOrDie(PlayerSAO *player);
        void SendPlayerBreath(PlayerSAO *sao);
        void SendInventory(PlayerSAO* playerSAO);
-       void SendMovePlayer(u16 peer_id);
+       void SendMovePlayer(session_t peer_id);
 
        virtual bool registerModStorage(ModMetadata *storage);
        virtual void unregisterModStorage(const std::string &name);
 
+       bool joinModChannel(const std::string &channel);
+       bool leaveModChannel(const std::string &channel);
+       bool sendModChannelMessage(const std::string &channel, const std::string &message);
+       ModChannel *getModChannel(const std::string &channel);
+
        // Bind address
        Address m_bind_addr;
 
@@ -346,44 +357,49 @@ private:
        friend class EmergeThread;
        friend class RemoteClient;
 
-       void SendMovement(u16 peer_id);
-       void SendHP(u16 peer_id, u8 hp);
-       void SendBreath(u16 peer_id, u16 breath);
-       void SendAccessDenied(u16 peer_id, AccessDeniedCode reason,
+       void SendMovement(session_t peer_id);
+       void SendHP(session_t peer_id, u16 hp);
+       void SendBreath(session_t peer_id, u16 breath);
+       void SendAccessDenied(session_t peer_id, AccessDeniedCode reason,
                const std::string &custom_reason, bool reconnect = false);
-       void SendAccessDenied_Legacy(u16 peer_id, const std::wstring &reason);
-       void SendDeathscreen(u16 peer_id,bool set_camera_point_target, v3f camera_point_target);
-       void SendItemDef(u16 peer_id,IItemDefManager *itemdef, u16 protocol_version);
-       void SendNodeDef(u16 peer_id,INodeDefManager *nodedef, u16 protocol_version);
+       void SendAccessDenied_Legacy(session_t peer_id, const std::wstring &reason);
+       void SendDeathscreen(session_t peer_id, bool set_camera_point_target,
+               v3f camera_point_target);
+       void SendItemDef(session_t peer_id, IItemDefManager *itemdef, u16 protocol_version);
+       void SendNodeDef(session_t peer_id, INodeDefManager *nodedef, u16 protocol_version);
 
        /* mark blocks not sent for all clients */
        void SetBlocksNotSent(std::map<v3s16, MapBlock *>& block);
 
 
-       void SendChatMessage(u16 peer_id, const ChatMessage &message);
-       void SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed);
-       void SendPlayerHP(u16 peer_id);
-
-       void SendLocalPlayerAnimations(u16 peer_id, v2s32 animation_frames[4], f32 animation_speed);
-       void SendEyeOffset(u16 peer_id, v3f first, v3f third);
-       void SendPlayerPrivileges(u16 peer_id);
-       void SendPlayerInventoryFormspec(u16 peer_id);
-       void SendShowFormspecMessage(u16 peer_id, const std::string &formspec, const std::string &formname);
-       void SendHUDAdd(u16 peer_id, u32 id, HudElement *form);
-       void SendHUDRemove(u16 peer_id, u32 id);
-       void SendHUDChange(u16 peer_id, u32 id, HudElementStat stat, void *value);
-       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,
+       void SendChatMessage(session_t peer_id, const ChatMessage &message);
+       void SendTimeOfDay(session_t peer_id, u16 time, f32 time_speed);
+       void SendPlayerHP(session_t peer_id);
+
+       void SendLocalPlayerAnimations(session_t peer_id, v2s32 animation_frames[4],
+               f32 animation_speed);
+       void SendEyeOffset(session_t peer_id, v3f first, v3f third);
+       void SendPlayerPrivileges(session_t peer_id);
+       void SendPlayerInventoryFormspec(session_t peer_id);
+       void SendShowFormspecMessage(session_t peer_id, const std::string &formspec,
+               const std::string &formname);
+       void SendHUDAdd(session_t peer_id, u32 id, HudElement *form);
+       void SendHUDRemove(session_t peer_id, u32 id);
+       void SendHUDChange(session_t peer_id, u32 id, HudElementStat stat, void *value);
+       void SendHUDSetFlags(session_t peer_id, u32 flags, u32 mask);
+       void SendHUDSetParam(session_t peer_id, u16 param, const std::string &value);
+       void SendSetSky(session_t peer_id, const video::SColor &bgcolor,
                        const std::string &type, const std::vector<std::string> &params,
                        bool &clouds);
-       void SendCloudParams(u16 peer_id, float density,
+       void SendCloudParams(session_t 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);
+       void SendOverrideDayNightRatio(session_t peer_id, bool do_override, float ratio);
+       void broadcastModChannelMessage(const std::string &channel,
+                       const std::string &message, session_t from_peer);
 
        /*
                Send a node removal/addition event to all clients except ignore_id.
@@ -399,21 +415,21 @@ private:
        void setBlockNotSent(v3s16 p);
 
        // Environment and Connection must be locked when called
-       void SendBlockNoLock(u16 peer_id, MapBlock *block, u8 ver, u16 net_proto_version);
+       void SendBlockNoLock(session_t peer_id, MapBlock *block, u8 ver, u16 net_proto_version);
 
        // Sends blocks to clients (locks env and con on its own)
        void SendBlocks(float dtime);
 
        void fillMediaCache();
-       void sendMediaAnnouncement(u16 peer_id);
-       void sendRequestedMedia(u16 peer_id,
+       void sendMediaAnnouncement(session_t peer_id, const std::string &lang_code);
+       void sendRequestedMedia(session_t peer_id,
                        const std::vector<std::string> &tosend);
 
-       void sendDetachedInventory(const std::string &name, u16 peer_id);
-       void sendDetachedInventories(u16 peer_id);
+       void sendDetachedInventory(const std::string &name, session_t peer_id);
+       void sendDetachedInventories(session_t peer_id);
 
        // Adds a ParticleSpawner on peer with peer_id (PEER_ID_INEXISTENT == all)
-       void SendAddParticleSpawner(u16 peer_id, u16 protocol_version,
+       void SendAddParticleSpawner(session_t peer_id, u16 protocol_version,
                u16 amount, float spawntime,
                v3f minpos, v3f maxpos,
                v3f minvel, v3f maxvel,
@@ -425,27 +441,28 @@ private:
                bool vertical, const std::string &texture, u32 id,
                const struct TileAnimationParams &animation, u8 glow);
 
-       void SendDeleteParticleSpawner(u16 peer_id, u32 id);
+       void SendDeleteParticleSpawner(session_t peer_id, u32 id);
 
        // Spawns particle on peer with peer_id (PEER_ID_INEXISTENT == all)
-       void SendSpawnParticle(u16 peer_id, u16 protocol_version,
+       void SendSpawnParticle(session_t peer_id, u16 protocol_version,
                v3f pos, v3f velocity, v3f acceleration,
                float expirationtime, float size,
                bool collisiondetection, bool collision_removal,
                bool vertical, const std::string &texture,
                const struct TileAnimationParams &animation, u8 glow);
 
-       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);
+       u32 SendActiveObjectRemoveAdd(session_t peer_id, const std::string &datas);
+       void SendActiveObjectMessages(session_t peer_id, const std::string &datas,
+               bool reliable = true);
+       void SendCSMFlavourLimits(session_t peer_id);
 
        /*
                Something random
        */
 
-       void DiePlayer(u16 peer_id);
-       void RespawnPlayer(u16 peer_id);
-       void DeleteClient(u16 peer_id, ClientDeletionReason reason);
+       void DiePlayer(session_t peer_id);
+       void RespawnPlayer(session_t peer_id);
+       void DeleteClient(session_t peer_id, ClientDeletionReason reason);
        void UpdateCrafting(RemotePlayer *player);
 
        void handleChatInterfaceEvent(ChatEvent *evt);
@@ -458,12 +475,12 @@ private:
        void handleAdminChat(const ChatEventChat *evt);
 
        // 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);
+       RemoteClient* getClient(session_t peer_id, ClientState state_min = CS_Active);
+       RemoteClient* getClientNoEx(session_t peer_id, ClientState state_min = CS_Active);
 
        // When called, environment mutex should be locked
-       std::string getPlayerName(u16 peer_id);
-       PlayerSAO* getPlayerSAO(u16 peer_id);
+       std::string getPlayerName(session_t peer_id);
+       PlayerSAO *getPlayerSAO(session_t peer_id);
 
        /*
                Get a player from memory or creates one.
@@ -472,7 +489,7 @@ private:
 
                Call with env and con locked.
        */
-       PlayerSAO *emergePlayer(const char *name, u16 peer_id, u16 proto_version);
+       PlayerSAO *emergePlayer(const char *name, session_t peer_id, u16 proto_version);
 
        void handlePeerChanges();
 
@@ -506,7 +523,7 @@ private:
        ServerEnvironment *m_env = nullptr;
 
        // server connection
-       con::Connection m_con;
+       std::shared_ptr<con::Connection> m_con;
 
        // Ban checking
        BanManager *m_banmanager = nullptr;
@@ -616,7 +633,7 @@ private:
                this peed id as the disabled recipient
                This is behind m_env_mutex
        */
-       u16 m_ignore_map_edit_events_peer_id = 0;
+       session_t m_ignore_map_edit_events_peer_id = 0;
 
        // media files known to server
        std::unordered_map<std::string, MediaInfo> m_media;
@@ -641,6 +658,9 @@ private:
        // CSM flavour limits byteflag
        u64 m_csm_flavour_limits = CSMFlavourLimit::CSM_FL_NONE;
        u32 m_csm_noderange_limit = 8;
+
+       // ModChannel manager
+       std::unique_ptr<ModChannelMgr> m_modchannel_mgr;
 };
 
 /*