Add tool for server creation in the same process

For iOS or Android App Bundle (or other platform) where create process
or fork is not possible or can not be easily done
This commit is contained in:
Benau 2020-02-28 09:35:25 +08:00
parent d63c68af78
commit b7f2a9614d
4 changed files with 71 additions and 2 deletions

View File

@ -1,5 +1,5 @@
# Modify this file to change the last-modified date when you add/remove a file.
# This will then trigger a new cmake run automatically.
# This will then trigger a new cmake run automatically.
file(GLOB_RECURSE STK_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.hpp")
file(GLOB_RECURSE STK_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.cpp")
file(GLOB_RECURSE STK_SHADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "data/shaders/*")

View File

@ -256,7 +256,7 @@
#include "utils/log.hpp"
#include "utils/mini_glm.hpp"
#include "utils/profiler.hpp"
#include "utils/separate_process.hpp"
#include "utils/stk_process.hpp"
#include "utils/string_utils.hpp"
#include "utils/translation.hpp"
@ -1730,6 +1730,7 @@ void clearGlobalVariables()
{
// In android sometimes global variables is not reset when restart the app
// we clear it here as much as possible
STKProcess::reset();
race_manager = NULL;
music_manager = NULL;
irr_driver = NULL;

23
src/utils/stk_process.cpp Normal file
View File

@ -0,0 +1,23 @@
// SuperTuxKart - a fun racing game with go-kart
// Copyright (C) 2020 SuperTuxKart-Team
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 3
// 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "utils/stk_process.hpp"
namespace STKProcess
{
thread_local ProcessType g_process_type = PT_MAIN;
} // namespace STKProcess

45
src/utils/stk_process.hpp Normal file
View File

@ -0,0 +1,45 @@
// SuperTuxKart - a fun racing game with go-kart
// Copyright (C) 2020 SuperTuxKart-Team
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 3
// 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef HEADER_STK_PROCESS_HPP
#define HEADER_STK_PROCESS_HPP
#include "utils/tls.hpp"
enum ProcessType : unsigned int
{
PT_MAIN = 0, // Main process
PT_CHILD = 1, // Child process inside main (can be server or ai instance)
PT_COUNT = 2
};
namespace STKProcess
{
// ========================================================================
extern thread_local ProcessType g_process_type;
// ------------------------------------------------------------------------
/** Return which type (main or child) this thread belongs to. */
inline ProcessType getType() { return g_process_type; }
// ------------------------------------------------------------------------
/** Called when any thread in main or child is created. */
inline void init(ProcessType pt) { g_process_type = pt; }
// ------------------------------------------------------------------------
/** Reset when stk is started (for android mostly). */
inline void reset() { g_process_type = PT_MAIN; }
} // namespace STKProcess
#endif