feat: close server when game finished

This commit is contained in:
2021-12-19 11:57:47 +01:00
parent 409268b604
commit 36a1ab0572
5 changed files with 44 additions and 22 deletions

View File

@@ -40,13 +40,19 @@ void Client::tick(std::uint64_t delta) {
m_Connected = m_Connexion.updateSocket();
if (!m_Connected) {
std::cout << "Disconnected ! (Reason : " << m_Connexion.getDisconnectReason() << ")\n";
reset();
} else {
m_Game.tick(delta);
m_Game->tick(delta);
}
}
void Client::render() {
m_Game.renderWorld();
m_Game->renderWorld();
}
void Client::reset() {
m_Game.reset(0);
m_Game = std::make_unique<ClientGame>(this);
}
void Client::sendMobs(const std::vector<protocol::MobSend>& mobSends) {

View File

@@ -9,8 +9,9 @@ Server::Server(const std::string& worldFilePath) : m_ServerRunning(false) {
m_Game.getWorld()->loadMapFromFile(worldFilePath);
}
void Server::lauchGame() {
m_Game.startGame();
Server::~Server() {
if (m_Thread.joinable())
m_Thread.join();
}
void Server::startThread() {
@@ -29,13 +30,16 @@ void Server::startThread() {
}
}
clean();
});
}
void Server::close() {
stopThread();
}
void Server::stopThread() {
m_ServerRunning = false;
if (m_Thread.joinable())
m_Thread.join();
}
bool Server::start(std::uint16_t port) {
@@ -54,19 +58,24 @@ bool Server::start(std::uint16_t port) {
return true;
}
void Server::stop() {
if (!m_ServerRunning)
return;
stopThread();
protocol::DisconnectPacket packet("Server closed");
broadcastPacket(&packet);
void Server::clean() {
m_Listener.close();
m_Listener.destroy();
m_Connections.clear();
getPlayers().clear();
std::cout << "Server successfully stopped !\n";
}
void Server::stop() {
if (!m_ServerRunning)
return;
protocol::DisconnectPacket packet("Server closed");
broadcastPacket(&packet);
stopThread();
}
void Server::tick(std::uint64_t delta) {

View File

@@ -95,6 +95,9 @@ void ServerGame::OnGameClose() {
// Disconnect clients
protocol::DisconnectPacket packet("Game finished");
m_Server->broadcastPacket(&packet);
// Closing server
m_Server->close();
}
} // namespace game