Skip to content

Commit

Permalink
fix: logic bugs.
Browse files Browse the repository at this point in the history
  • Loading branch information
Force67 committed Apr 17, 2022
1 parent b1f95a9 commit 5b1c596
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 37 deletions.
2 changes: 2 additions & 0 deletions Code/common/GameServerInstance.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
class IGameServerInstance
{
public:
virtual ~IGameServerInstance() = default;

// lifetime control
virtual bool Initialize() = 0;
virtual void Shutdown() = 0;
Expand Down
20 changes: 7 additions & 13 deletions Code/components/console/ConsoleRegistry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,7 @@ ConsoleRegistry::ConsoleRegistry(const char* acLoggerName)
RegisterNatives();
}

ConsoleRegistry::~ConsoleRegistry()
{
for (CommandBase* c : m_dynamicCommands)
delete c;
for (SettingBase* s : m_dynamicSettings)
delete s;
}
ConsoleRegistry::~ConsoleRegistry() = default;

void ConsoleRegistry::BindStaticItems()
{
Expand Down Expand Up @@ -164,23 +158,23 @@ void ConsoleRegistry::RegisterNatives()
});
}

void ConsoleRegistry::AddCommand(CommandBase* apCommand)
void ConsoleRegistry::AddCommand(TiltedPhoques::UniquePtr<CommandBase> apCommand)
{
std::lock_guard<std::mutex> _(m_listLock);
(void)_;

// Add to global and tracking pool
m_commands.push_back(apCommand);
m_dynamicCommands.push_back(apCommand);
m_commands.push_back(apCommand.get());
m_dynamicCommands.push_back(std::move(apCommand));
}

void ConsoleRegistry::AddSetting(SettingBase* apSetting)
void ConsoleRegistry::AddSetting(TiltedPhoques::UniquePtr<SettingBase> apSetting)
{
std::lock_guard<std::mutex> guard(m_listLock);
(void)guard;

m_settings.push_back(apSetting);
m_dynamicSettings.push_back(apSetting);
m_settings.push_back(apSetting.get());
m_dynamicSettings.push_back(std::move(apSetting));
}

CommandBase* ConsoleRegistry::FindCommand(const char* acName)
Expand Down
17 changes: 10 additions & 7 deletions Code/components/console/ConsoleRegistry.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,20 @@ class ConsoleRegistry
template <typename... Ts>
inline void RegisterCommand(const char* acName, const char* acDesc, std::function<void(ArgStack&)> func)
{
AddCommand(new Command<Ts...>(acName, acDesc, func));
AddCommand(
TiltedPhoques::CastUnique<CommandBase>(TiltedPhoques::MakeUnique<Command<Ts...>>(acName, acDesc, func)));
}

inline void RegisterSetting(const char* acName, const char* acDesc, const char* acString)
{
AddSetting(new StringSetting(acName, acDesc, acString));
AddSetting(
TiltedPhoques::CastUnique<SettingBase>(TiltedPhoques::MakeUnique<StringSetting>(acName, acDesc, acString)));
}

template <typename T> inline void RegisterSetting(const char* acName, const char* acDesc, const T acDefault)
{
AddSetting(new Setting<T>(acName, acDesc, acDefault));
AddSetting(
TiltedPhoques::CastUnique<SettingBase>(TiltedPhoques::MakeUnique<Setting<T>>(acName, acDesc, acDefault)));
}

enum class ExecutionResult
Expand Down Expand Up @@ -96,18 +99,18 @@ class ConsoleRegistry
}

private:
void AddCommand(CommandBase* apCommand);
void AddSetting(SettingBase* apSetting);
void AddCommand(TiltedPhoques::UniquePtr<CommandBase> apCommand);
void AddSetting(TiltedPhoques::UniquePtr<SettingBase> apSetting);
void StoreCommandInHistory(const std::string& acLine);

ResultAnd<bool> CreateArgStack(const CommandBase* apCommand, const std::string* acStringArgs, ArgStack& aStackOut);

private:
std::mutex m_listLock;
TiltedPhoques::Vector<CommandBase*> m_commands;
TiltedPhoques::Vector<CommandBase*> m_dynamicCommands;
TiltedPhoques::Vector<SettingBase*> m_settings;
TiltedPhoques::Vector<SettingBase*> m_dynamicSettings;
TiltedPhoques::Vector<UniquePtr<CommandBase>> m_dynamicCommands;
TiltedPhoques::Vector<UniquePtr<SettingBase>> m_dynamicSettings;
TiltedPhoques::Vector<std::string> m_commandHistory;
CommandQueue m_queue;
bool m_requestFlush = true;
Expand Down
20 changes: 12 additions & 8 deletions Code/server/main.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@

#include "GameServer.h"
#include <console/ConsoleRegistry.h>
#include <TiltedCore/Stl.hpp>
#include <common/GameServerInstance.h>
#include <console/ConsoleRegistry.h>

#ifdef _WIN32
#define GS_EXPORT __declspec(dllexport)
#else
#define GS_EXPORT __attribute__((visibility("default")))
#endif

namespace
{
Expand All @@ -17,6 +22,9 @@ class GameServerInstance final : public IGameServerInstance
{
}

// to make sure our dtor is called.
~GameServerInstance() override = default;

// Inherited via IGameServerInstance
virtual bool Initialize() override;
virtual void Shutdown() override;
Expand Down Expand Up @@ -66,20 +74,16 @@ GS_EXPORT bool CheckBuildTag(const char* apBuildTag)
}

// memory is owned by the game server, use destroy to ensure destruction
GS_EXPORT IGameServerInstance* CreateGameServer(Console::ConsoleRegistry& aConReg, void* apUserPointer, void(*apCallback)(void*))
GS_EXPORT UniquePtr<IGameServerInstance> CreateGameServer(Console::ConsoleRegistry& aConReg, void* apUserPointer,
void (*apCallback)(void*))
{
// register static variables before they become available to the server
aConReg.BindStaticItems();

// this is a special callback to notify the runner once all settings become available
apCallback(apUserPointer);

return new GameServerInstance(aConReg);
}

GS_EXPORT void DestroyGameServer(IGameServerInstance* apServer)
{
delete apServer;
return TiltedPhoques::CastUnique<IGameServerInstance>(TiltedPhoques::MakeUnique<GameServerInstance>(aConReg));
}

// cxx symbol
Expand Down
12 changes: 5 additions & 7 deletions Code/server_runner/DediRunner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,9 @@ DediRunner* s_pRunner{nullptr};
} // namespace

// imports
GS_IMPORT IGameServerInstance* CreateGameServer(Console::ConsoleRegistry& conReg, void* apUserPointer,
void (*apCallback)(void*));
GS_IMPORT void DestroyGameServer(IGameServerInstance* apServer);

GS_IMPORT TiltedPhoques::UniquePtr<IGameServerInstance> CreateGameServer(Console::ConsoleRegistry& conReg,
void* apUserPointer,
void (*apCallback)(void*));
// needs to be global
Console::Setting bConsole{"bConsole", "Enable the console", true};

Expand All @@ -37,8 +36,8 @@ DediRunner::DediRunner(int argc, char** argv) : m_console(KCompilerStopThisBulls
{
s_pRunner = this;

m_pServerInstance = CreateGameServer(
m_console, this, [](void* apUserPointer) { reinterpret_cast<DediRunner*>(apUserPointer)->LoadSettings(); });
m_pServerInstance = std::move(CreateGameServer(
m_console, this, [](void* apUserPointer) { reinterpret_cast<DediRunner*>(apUserPointer)->LoadSettings(); }));

// it is here for now..
m_pServerInstance->Initialize();
Expand All @@ -47,7 +46,6 @@ DediRunner::DediRunner(int argc, char** argv) : m_console(KCompilerStopThisBulls
DediRunner::~DediRunner()
{
Console::SaveSettingsToIni(m_console, m_SettingsPath);
DestroyGameServer(m_pServerInstance);
}

void DediRunner::LoadSettings()
Expand Down
7 changes: 5 additions & 2 deletions Code/server_runner/DediRunner.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@
#include <console/StringTokenizer.h>
#include <common/GameServerInstance.h>

#ifdef _WIN32
#define GS_IMPORT extern __declspec(dllimport)
#else
#define GS_IMPORT extern
#endif

namespace fs = std::filesystem;

Expand Down Expand Up @@ -43,9 +47,8 @@ class DediRunner
// Order here matters for constructor calling order.
fs::path m_SettingsPath;
Console::ConsoleRegistry m_console;

IGameServerInstance* m_pServerInstance;
TiltedPhoques::UniquePtr<std::jthread> m_pConIOThread;
TiltedPhoques::UniquePtr<IGameServerInstance> m_pServerInstance;
};

DediRunner* GetDediRunner() noexcept;

0 comments on commit 5b1c596

Please sign in to comment.