server state test

This commit is contained in:
2025-08-06 13:55:22 +02:00
parent 599dfa0cee
commit 990c6f078d
12 changed files with 183 additions and 22 deletions

View File

@@ -15,6 +15,10 @@
#include <sp/io/MessageStream.h>
#include <sp/io/StdIo.h>
#include <server/Server.h>
#include <server/socket/TcpSocket.h>
#include <server/state/LobbyState.h>
class WorldApply : public td::protocol::PacketHandler {
private:
td::game::World& m_World;
@@ -92,7 +96,6 @@ td::sim::GameHistory GetCustomHistory() {
return gh;
}
int main(int argc, char** argv) {
td::game::World w = GetWorld();
@@ -128,6 +131,15 @@ int main(int argc, char** argv) {
}
});
// server
auto socket = std::make_shared<td::server::TcpSocket>();
td::server::Server server(socket);
server.UpdateState(std::make_shared<td::server::LobbyState>());
server.Update(1.0f);
server.Update(1.0f);
socket->OnDisconnect(0);
while (!display.IsCloseRequested()) {
display.PollEvents();
float lerp = simulation.Update();

View File

@@ -4,21 +4,26 @@
namespace td {
namespace server {
IServerState::IServerState(IServerSocket& a_Socket) : m_Socket(a_Socket) {
// TODO: don't do it like this
m_Socket.OnConnect.Connect([this](PlayerID a_Player){
OnPlayerJoin(a_Player);
});
m_Socket.OnDisconnect.Connect([this](PlayerID a_Player){
OnPlayerLeave(a_Player);
});
m_Socket.OnReceive.Connect([this](PlayerID a_Player, const protocol::PacketBase& a_Packet){
HandlePacket(a_Player, a_Packet);
});
void IServerState::SetServer(Server* a_Server) {
assert(a_Server);
m_Server = a_Server;
m_Server->m_Socket->OnConnect.Connect(std::bind(&IServerState::OnPlayerJoin, this, std::placeholders::_1));
m_Server->m_Socket->OnDisconnect.Connect(std::bind(&IServerState::OnPlayerLeave, this, std::placeholders::_1));
m_Server->m_Socket->OnReceive.Connect(std::bind(&IServerState::HandlePacket, this, std::placeholders::_1, std::placeholders::_2));
}
IServerState::IServerState() : m_Server(nullptr) {}
IServerState::~IServerState() {
if (!m_Server)
return;
m_Server->m_Socket->OnConnect.Disconnect(std::bind(&IServerState::OnPlayerJoin, this, std::placeholders::_1));
m_Server->m_Socket->OnDisconnect.Disconnect(std::bind(&IServerState::OnPlayerLeave, this, std::placeholders::_1));
m_Server->m_Socket->OnReceive.Disconnect(std::bind(&IServerState::HandlePacket, this, std::placeholders::_1, std::placeholders::_2));
}
void IServerState::SendPacket(PlayerID a_Id, const protocol::PacketBase& a_Packet) {
m_Socket.Send(a_Id, a_Packet);
m_Server->m_Socket->Send(a_Id, a_Packet);
}
void IServerState::SetNewState(const std::shared_ptr<IServerState>& a_NewState) {

View File

@@ -0,0 +1,8 @@
#include <server/socket/TcpSocket.h>
namespace td {
namespace server {
} // namespace server
} // namespace td

View File

@@ -0,0 +1,25 @@
#include <server/state/GameState.h>
#include <iostream>
namespace td {
namespace server {
void GameState::HandlePacket(PlayerID a_Id, const protocol::PacketBase& a_Packet) {
}
void GameState::Update(float a_Delta) {
}
void GameState::OnPlayerJoin(PlayerID a_Id) {
}
void GameState::OnPlayerLeave(PlayerID a_Id) {
std::cout << "Game leave !" << std::endl;
}
} // namespace server
} // namespace td

View File

@@ -0,0 +1,26 @@
#include <server/state/LobbyState.h>
#include <server/state/GameState.h>
#include <iostream>
namespace td {
namespace server {
void LobbyState::HandlePacket(PlayerID a_Id, const protocol::PacketBase& a_Packet) {
}
void LobbyState::Update(float a_Delta) {
SetNewState(std::make_shared<GameState>());
}
void LobbyState::OnPlayerJoin(PlayerID a_Id) {
}
void LobbyState::OnPlayerLeave(PlayerID a_Id) {
std::cout << "Lobby leave !" << std::endl;
}
} // namespace server
} // namespace td