Rework modules
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
#error Missing implementation: Network
|
||||
#endif
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
#include <Nazara/Network/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
@@ -29,98 +31,28 @@ namespace Nz
|
||||
* \brief Network class that represents the module initializer of Network
|
||||
*/
|
||||
|
||||
/*!
|
||||
* \brief Initializes the Network module
|
||||
* \return true if initialization is successful
|
||||
*
|
||||
* \remark Produces a NazaraNotice
|
||||
* \remark Produces a NazaraError if one submodule failed
|
||||
*/
|
||||
|
||||
bool Network::Initialize()
|
||||
Network::Network() :
|
||||
Module("Network", this)
|
||||
{
|
||||
if (IsInitialized())
|
||||
{
|
||||
s_moduleReferenceCounter++;
|
||||
return true; // Already initialized
|
||||
}
|
||||
|
||||
// Initialize module dependencies
|
||||
if (!Core::Initialize())
|
||||
{
|
||||
NazaraError("Failed to initialize core module");
|
||||
return false;
|
||||
}
|
||||
|
||||
s_moduleReferenceCounter++;
|
||||
|
||||
CallOnExit onExit(Network::Uninitialize);
|
||||
|
||||
// Initialize module here
|
||||
if (!SocketImpl::Initialize())
|
||||
{
|
||||
NazaraError("Failed to initialize socket implementation");
|
||||
return false;
|
||||
}
|
||||
throw std::runtime_error("failed to initialize socket implementation");
|
||||
|
||||
if (!NetPacket::Initialize())
|
||||
{
|
||||
NazaraError("Failed to initialize packets");
|
||||
return false;
|
||||
}
|
||||
throw std::runtime_error("failed to initialize packets");
|
||||
|
||||
if (!RUdpConnection::Initialize())
|
||||
{
|
||||
NazaraError("Failed to initialize RUdp");
|
||||
return false;
|
||||
}
|
||||
|
||||
onExit.Reset();
|
||||
|
||||
NazaraNotice("Initialized: Network module");
|
||||
return true;
|
||||
throw std::runtime_error("failed to initialize RUDP protocol");
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Checks whether the module is initialized
|
||||
* \return true if module is initialized
|
||||
*/
|
||||
|
||||
bool Network::IsInitialized()
|
||||
Network::~Network()
|
||||
{
|
||||
return s_moduleReferenceCounter != 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Uninitializes the Network module
|
||||
*
|
||||
* \remark Produces a NazaraNotice
|
||||
*/
|
||||
|
||||
void Network::Uninitialize()
|
||||
{
|
||||
if (s_moduleReferenceCounter != 1)
|
||||
{
|
||||
// Either the module is not initialized, either it was initialized multiple times
|
||||
if (s_moduleReferenceCounter > 1)
|
||||
s_moduleReferenceCounter--;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
s_moduleReferenceCounter = 0;
|
||||
|
||||
// Uninitialize module here
|
||||
RUdpConnection::Uninitialize();
|
||||
NetPacket::Uninitialize();
|
||||
SocketImpl::Uninitialize();
|
||||
|
||||
NazaraNotice("Uninitialized: Network module");
|
||||
|
||||
// Free module dependencies
|
||||
Core::Uninitialize();
|
||||
}
|
||||
|
||||
unsigned int Network::s_moduleReferenceCounter = 0;
|
||||
Network* Network::s_instance = nullptr;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user