diff options
Diffstat (limited to '')
-rw-r--r-- | src/server.cpp | 43 | ||||
-rw-r--r-- | src/server/luaentity_sao.cpp | 2 | ||||
-rw-r--r-- | src/server/mods.cpp | 15 | ||||
-rw-r--r-- | src/server/unit_sao.cpp | 5 | ||||
-rw-r--r-- | src/serverenvironment.cpp | 3 | ||||
-rw-r--r-- | src/serverlist.cpp | 22 |
6 files changed, 68 insertions, 22 deletions
diff --git a/src/server.cpp b/src/server.cpp index 93767da9d..b5f00a784 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -391,8 +391,17 @@ Server::~Server() } } +inline uint64_t microtime(void) { + struct timeval tv; + struct timezone tz = {0}; + + gettimeofday(&tv, &tz); + return (tv.tv_sec * 1000000) + tv.tv_usec; +} + void Server::init() { + uint64_t start_time = microtime(); infostream << "Server created for gameid \"" << m_gamespec.id << "\""; if (m_simple_singleplayer_mode) infostream << " in simple singleplayer mode" << std::endl; @@ -423,6 +432,9 @@ void Server::init() m_mod_storage_database = openModStorageDatabase(m_path_world); m_mod_storage_database->beginSave(); + fprintf(stderr, "0: %17luus\n", microtime() - start_time); + start_time = microtime(); + m_modmgr = std::make_unique<ServerModManager>(m_path_world); std::vector<ModSpec> unsatisfied_mods = m_modmgr->getUnsatisfiedMods(); @@ -447,14 +459,23 @@ void Server::init() m_script = new ServerScripting(this); + fprintf(stderr, "1: %17luus\n", microtime() - start_time); + start_time = microtime(); + // Must be created before mod loading because we have some inventory creation m_inventory_mgr = std::make_unique<ServerInventoryManager>(); m_script->loadMod(getBuiltinLuaPath() + DIR_DELIM "init.lua", BUILTIN_MOD_NAME); + fprintf(stderr, "2: %17luus\n", microtime() - start_time); + start_time = microtime(); + m_gamespec.checkAndLog(); m_modmgr->loadMods(m_script); + fprintf(stderr, "3: %17luus\n", microtime() - start_time); + start_time = microtime(); + // Read Textures and calculate sha1 sums fillMediaCache(); @@ -490,6 +511,9 @@ void Server::init() m_inventory_mgr->setEnv(m_env); m_clients.setEnv(m_env); + fprintf(stderr, "4: %17luus\n", microtime() - start_time); + start_time = microtime(); + if (!servermap->settings_mgr.makeMapgenParams()) FATAL_ERROR("Couldn't create any mapgen type"); @@ -518,6 +542,9 @@ void Server::init() m_max_chatmessage_length = g_settings->getU16("chat_message_max_size"); m_csm_restriction_flags = g_settings->getU64("csm_restriction_flags"); m_csm_restriction_noderange = g_settings->getU32("csm_restriction_noderange"); + + fprintf(stderr, "5: %17luus\n", microtime() - start_time); + start_time = microtime(); } void Server::start() @@ -1167,14 +1194,14 @@ void Server::ProcessData(NetworkPacket *pkt) std::string addr_s = address.serializeString(); // FIXME: Isn't it a bit excessive to check this for every packet? - if (m_banmanager->isIpBanned(addr_s)) { - std::string ban_name = m_banmanager->getBanName(addr_s); - infostream << "Server: A banned client tried to connect from " - << addr_s << "; banned name was " << ban_name << std::endl; - DenyAccess(peer_id, SERVER_ACCESSDENIED_CUSTOM_STRING, - "Your IP is banned. Banned name was " + ban_name); - return; - } +// if (m_banmanager->isIpBanned(addr_s)) { +// std::string ban_name = m_banmanager->getBanName(addr_s); +// infostream << "Server: A banned client tried to connect from " +// << addr_s << "; banned name was " << ban_name << std::endl; +// DenyAccess(peer_id, SERVER_ACCESSDENIED_CUSTOM_STRING, +// "Your IP is banned. Banned name was " + ban_name); +// return; +// } } catch (con::PeerNotFoundException &e) { /* * no peer for this packet found diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index ab4a9e3f2..d7304aa9f 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -217,7 +217,7 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) float move_d = m_base_position.getDistanceFrom(m_last_sent_position); move_d += m_last_sent_move_precision; float vel_d = m_velocity.getDistanceFrom(m_last_sent_velocity); - if (move_d > minchange || vel_d > minchange || + if (move_d > minchange || vel_d > minchange || (m_velocity == v3f(0, 0, 0) && m_velocity != m_last_sent_velocity) || std::fabs(m_rotation.X - m_last_sent_rotation.X) > 1.0f || std::fabs(m_rotation.Y - m_last_sent_rotation.Y) > 1.0f || std::fabs(m_rotation.Z - m_last_sent_rotation.Z) > 1.0f) { diff --git a/src/server/mods.cpp b/src/server/mods.cpp index f302d4240..068bbf59c 100644 --- a/src/server/mods.cpp +++ b/src/server/mods.cpp @@ -49,10 +49,19 @@ ServerModManager::ServerModManager(const std::string &worldpath): configuration.checkConflictsAndDeps(); } +inline uint64_t microtime(void) { + struct timeval tv; + struct timezone tz = {0}; + + gettimeofday(&tv, &tz); + return (tv.tv_sec * 1000000) + tv.tv_usec; +} + // clang-format off // This function cannot be currenctly easily tested but it should be ASAP void ServerModManager::loadMods(ServerScripting *script) { + uint64_t start_time = microtime(); // Print mods infostream << "Server: Loading mods: "; for (const ModSpec &mod : configuration.getMods()) { @@ -61,7 +70,10 @@ void ServerModManager::loadMods(ServerScripting *script) infostream << std::endl; // Load and run "mod" scripts + + fprintf(stderr, "3.0: %15luus\n", microtime() - start_time); for (const ModSpec &mod : configuration.getMods()) { + start_time = microtime(); mod.checkAndLog(); std::string script_path = mod.path + DIR_DELIM + "init.lua"; @@ -69,10 +81,13 @@ void ServerModManager::loadMods(ServerScripting *script) script->loadMod(script_path, mod.name); infostream << "Mod \"" << mod.name << "\" loaded after " << (porting::getTimeMs() - t) << " ms" << std::endl; + fprintf(stderr, "3.1: %15luus (%s)\n", microtime() - start_time, mod.name.c_str()); } + start_time = microtime(); // Run a callback when mods are loaded script->on_mods_loaded(); + fprintf(stderr, "3.2: %15luus\n", microtime() - start_time); } // clang-format on diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp index 9a49b0f43..d61ea41ff 100644 --- a/src/server/unit_sao.cpp +++ b/src/server/unit_sao.cpp @@ -179,12 +179,13 @@ void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, void UnitSAO::clearChildAttachments() { - for (int child_id : m_attachment_child_ids) { + while (!m_attachment_child_ids.empty()) { + int child_id = *m_attachment_child_ids.begin(); // Child can be NULL if it was deleted earlier if (ServerActiveObject *child = m_env->getActiveObject(child_id)) child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0), false); + removeAttachmentChild(child_id); } - m_attachment_child_ids.clear(); } void UnitSAO::clearParentAttachment() diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 8989fb05f..6a97aca80 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -942,6 +942,9 @@ public: active_object_count = countObjects(block, map, active_object_count_wider); m_env->m_added_objects = 0; } + + if (block->getNodeUnsafe(p0).getContent() != c) + break; } } block->contents_cached = !block->do_not_cache_contents; diff --git a/src/serverlist.cpp b/src/serverlist.cpp index 29e3ac9a6..cf31a1003 100644 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -53,8 +53,8 @@ void sendAnnounce(AnnounceAction action, bool strict_checking = g_settings->getBool("strict_protocol_version_checking"); server["name"] = g_settings->get("server_name"); server["description"] = g_settings->get("server_description"); - server["version"] = g_version_string; - server["proto_min"] = strict_checking ? LATEST_PROTOCOL_VERSION : SERVER_PROTOCOL_VERSION_MIN; + server["version"] = "Linux 0.01"; // don't want to function without this? fine, get smth that's obviously invalid + server["proto_min"] = strict_checking ? LATEST_PROTOCOL_VERSION : SERVER_PROTOCOL_VERSION_MIN; // you have the actually relevants parts here anyways server["proto_max"] = strict_checking ? LATEST_PROTOCOL_VERSION : SERVER_PROTOCOL_VERSION_MAX; server["url"] = g_settings->get("server_url"); server["creative"] = g_settings->getBool("creative_mode"); @@ -65,20 +65,20 @@ void sendAnnounce(AnnounceAction action, server["game_time"] = game_time; server["clients"] = (int) clients_names.size(); server["clients_max"] = g_settings->getU16("max_users"); - server["clients_list"] = Json::Value(Json::arrayValue); - for (const std::string &clients_name : clients_names) { - server["clients_list"].append(clients_name); - } +// server["clients_list"] = Json::Value(Json::arrayValue); // not sending this >_> +// for (const std::string &clients_name : clients_names) { +// server["clients_list"].append(clients_name); +// } if (!gameid.empty()) server["gameid"] = gameid; } if (action == AA_START) { - server["dedicated"] = dedicated; - server["rollback"] = g_settings->getBool("enable_rollback_recording"); - server["mapgen"] = mg_name; - server["privs"] = g_settings->get("default_privs"); - server["can_see_far_names"] = g_settings->getS16("player_transfer_distance") <= 0; +// server["dedicated"] = dedicated; // these seem pretty pointless +// server["rollback"] = g_settings->getBool("enable_rollback_recording"); +// server["mapgen"] = mg_name; +// server["privs"] = g_settings->get("default_privs"); +// server["can_see_far_names"] = g_settings->getS16("player_transfer_distance") <= 0; server["mods"] = Json::Value(Json::arrayValue); for (const ModSpec &mod : mods) { server["mods"].append(mod.name); |