diff options
author | Loïc Blot <nerzhul@users.noreply.github.com> | 2020-05-07 22:38:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-07 22:38:41 +0200 |
commit | 454dbf83a9bf292910c1495a2aa49fd8b960c28f (patch) | |
tree | d3f53bb5914bae385198d3290863ee1c94832dfd /src/server/serverinventorymgr.h | |
parent | 650168cadac2a45277a9527ae79efb288ba7a4a4 (diff) | |
download | minetest-454dbf83a9bf292910c1495a2aa49fd8b960c28f.tar.gz minetest-454dbf83a9bf292910c1495a2aa49fd8b960c28f.tar.bz2 minetest-454dbf83a9bf292910c1495a2aa49fd8b960c28f.zip |
Server class code cleanups (#9769)
* Server::overrideDayNightRatio doesn't require to return bool
There is no sense to sending null player, the caller should send a valid object
* Server::init: make private & cleanup
This function is always called before start() and loads some variables which can be loaded in constructor directly.
Make it private and call it directly in start
* Split Server inventory responsibility to a dedicated object
This splits permit to found various historical issues:
* duplicate lookups on player connection
* sending inventory to non related player when a player connects
* non friendly lookups on detached inventories ownership
This reduce the detached inventory complexity and also increased the
lookup performance in a quite interesting way for servers with thousands
of inventories.
Diffstat (limited to 'src/server/serverinventorymgr.h')
-rw-r--r-- | src/server/serverinventorymgr.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/server/serverinventorymgr.h b/src/server/serverinventorymgr.h new file mode 100644 index 000000000..d0aac4dae --- /dev/null +++ b/src/server/serverinventorymgr.h @@ -0,0 +1,60 @@ +/* +Minetest +Copyright (C) 2010-2020 Minetest core development team + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#pragma once + +#include "inventorymanager.h" +#include <functional> + +class ServerEnvironment; + +class ServerInventoryManager : public InventoryManager +{ +public: + ServerInventoryManager(); + virtual ~ServerInventoryManager(); + + void setEnv(ServerEnvironment *env) + { + assert(!m_env); + m_env = env; + } + + Inventory *getInventory(const InventoryLocation &loc); + void setInventoryModified(const InventoryLocation &loc); + + // Creates or resets inventory + Inventory *createDetachedInventory(const std::string &name, IItemDefManager *idef, + const std::string &player = ""); + bool removeDetachedInventory(const std::string &name); + + void sendDetachedInventories(const std::string &peer_name, bool incremental, + std::function<void(const std::string &, Inventory *)> apply_cb); + +private: + struct DetachedInventory + { + Inventory *inventory; + std::string owner; + }; + + ServerEnvironment *m_env = nullptr; + + std::unordered_map<std::string, DetachedInventory> m_detached_inventories; +};
\ No newline at end of file |