aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/server.cpp43
-rw-r--r--src/server/luaentity_sao.cpp2
-rw-r--r--src/server/mods.cpp15
-rw-r--r--src/server/unit_sao.cpp5
-rw-r--r--src/serverenvironment.cpp3
-rw-r--r--src/serverlist.cpp22
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);