begin client-server
This commit is contained in:
@@ -21,5 +21,11 @@ void IServerSocket::Send(PlayerID a_PlayerId, const protocol::PacketBase& a_Pack
|
||||
SendPeer(m_Ids.GetPeerId(a_PlayerId), a_Packet);
|
||||
}
|
||||
|
||||
void IServerSocket::Broadcast(const protocol::PacketBase& a_Packet) {
|
||||
for (auto [peerId, playerId] : m_Ids) {
|
||||
SendPeer(peerId, a_Packet);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
} // namespace td
|
||||
|
||||
@@ -10,6 +10,7 @@ void IServerState::SetServer(Server* a_Server) {
|
||||
Connect(m_Server->m_Socket->OnConnect, std::bind(&IServerState::OnPlayerJoin, this, std::placeholders::_1));
|
||||
Connect(m_Server->m_Socket->OnDisconnect, std::bind(&IServerState::OnPlayerLeave, this, std::placeholders::_1));
|
||||
Connect(m_Server->m_Socket->OnReceive, std::bind(&IServerState::HandlePacket, this, std::placeholders::_1, std::placeholders::_2));
|
||||
Init();
|
||||
}
|
||||
|
||||
IServerState::IServerState() : m_Server(nullptr) {}
|
||||
@@ -20,6 +21,10 @@ void IServerState::SendPacket(PlayerID a_Id, const protocol::PacketBase& a_Packe
|
||||
m_Server->m_Socket->Send(a_Id, a_Packet);
|
||||
}
|
||||
|
||||
void IServerState::BroadcastPacket(const protocol::PacketBase& a_Packet) {
|
||||
m_Server->m_Socket->Broadcast(a_Packet);
|
||||
}
|
||||
|
||||
void IServerState::SetNewState(const std::shared_ptr<IServerState>& a_NewState) {
|
||||
m_Server->UpdateState(a_NewState);
|
||||
}
|
||||
|
||||
@@ -1 +1,14 @@
|
||||
#include <server/Server.h>
|
||||
#include <server/Server.h>
|
||||
|
||||
namespace td {
|
||||
namespace server {
|
||||
|
||||
void Server::Update() {
|
||||
auto timeElapsed = std::chrono::system_clock::now() - m_LastTime;
|
||||
float timeSeconds = std::chrono::duration<float, std::chrono::seconds::period>(timeElapsed).count();
|
||||
Update(timeSeconds);
|
||||
m_LastTime = std::chrono::system_clock::now();
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
} // namespace td
|
||||
|
||||
@@ -7,5 +7,13 @@ void FakeSocket::SendPeer(PeerID a_Peer, const protocol::PacketBase& a_Packet) {
|
||||
OnSend(a_Peer, a_Packet);
|
||||
}
|
||||
|
||||
void FakeSocket::ConnectFakePeer(PeerID a_Peer) {
|
||||
OnConnectPeer(a_Peer);
|
||||
}
|
||||
|
||||
void FakeSocket::DisconnectFakePeer(PeerID a_Peer) {
|
||||
OnDisconnectPeer(a_Peer);
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
} // namespace td
|
||||
|
||||
@@ -1,25 +1,36 @@
|
||||
#include <server/state/GameState.h>
|
||||
#include <server/state/GameStateHandler.h>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace td {
|
||||
namespace server {
|
||||
|
||||
void GameState::HandlePacket(PlayerID a_Id, const protocol::PacketBase& a_Packet) {
|
||||
GameState::GameState(const std::shared_ptr<game::World>& a_World) : m_World(a_World), m_Simulation(*m_World, STEP_TIME), m_Time(0) {}
|
||||
|
||||
void GameState::Init() {
|
||||
std::cout << "Switched to Game state !\n";
|
||||
BroadcastPacket(m_Simulation.MakePacket());
|
||||
}
|
||||
|
||||
void GameState::HandlePacket(PlayerID a_Id, const protocol::PacketBase& a_Packet) {
|
||||
GameStateHandler handler(*this, a_Id);
|
||||
a_Packet.Dispatch(handler);
|
||||
}
|
||||
|
||||
void GameState::Update(float a_Delta) {
|
||||
|
||||
static const float stepTimeSecond = static_cast<float>(STEP_TIME) / 1000.0f;
|
||||
m_Time += a_Delta;
|
||||
if (m_Time > stepTimeSecond) {
|
||||
m_Time = std::fmod(m_Time, stepTimeSecond);
|
||||
auto lockStepPacket = m_Simulation.Update();
|
||||
BroadcastPacket(lockStepPacket);
|
||||
}
|
||||
}
|
||||
|
||||
void GameState::OnPlayerJoin(PlayerID a_Id) {
|
||||
void GameState::OnPlayerJoin(PlayerID a_Id) {}
|
||||
|
||||
}
|
||||
|
||||
void GameState::OnPlayerLeave(PlayerID a_Id) {
|
||||
std::cout << "Game leave !" << std::endl;
|
||||
}
|
||||
void GameState::OnPlayerLeave(PlayerID a_Id) {}
|
||||
|
||||
} // namespace server
|
||||
} // namespace td
|
||||
|
||||
24
src/server/state/GameStateHandler.cpp
Normal file
24
src/server/state/GameStateHandler.cpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#include <server/state/GameState.h>
|
||||
#include <server/state/GameStateHandler.h>
|
||||
|
||||
namespace td {
|
||||
namespace server {
|
||||
|
||||
GameStateHandler::GameStateHandler(GameState& a_GameState, PlayerID a_PlayerId) : m_GameState(a_GameState), m_PlayerId(a_PlayerId) {}
|
||||
|
||||
// TODO: redo this
|
||||
void GameStateHandler::Handle(const protocol::packets::SpawnTroopPacket& a_Packet) {
|
||||
static const EntityCoords DEFAULT_POS(td::FpFloat(77), td::FpFloat(13));
|
||||
|
||||
td::protocol::commands::SpawnTroopCommand spawn(*a_Packet->m_Type, *a_Packet->m_Level, DEFAULT_POS, m_PlayerId);
|
||||
m_GameState.m_Simulation.Handle(spawn);
|
||||
}
|
||||
|
||||
// TODO: and this
|
||||
void GameStateHandler::Handle(const protocol::packets::PlaceTowerPacket& a_Packet) {
|
||||
td::protocol::commands::PlaceTowerCommand place(a_Packet->m_Type, m_PlayerId, a_Packet->m_Position);
|
||||
m_GameState.m_Simulation.Handle(place);
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
} // namespace td
|
||||
@@ -11,7 +11,7 @@ void LobbyState::HandlePacket(PlayerID a_Id, const protocol::PacketBase& a_Packe
|
||||
}
|
||||
|
||||
void LobbyState::Update(float a_Delta) {
|
||||
SetNewState(std::make_shared<GameState>());
|
||||
SetNewState(std::make_shared<GameState>(m_World));
|
||||
}
|
||||
|
||||
void LobbyState::OnPlayerJoin(PlayerID a_Id) {
|
||||
@@ -19,7 +19,7 @@ void LobbyState::OnPlayerJoin(PlayerID a_Id) {
|
||||
}
|
||||
|
||||
void LobbyState::OnPlayerLeave(PlayerID a_Id) {
|
||||
std::cout << "Lobby leave !" << std::endl;
|
||||
|
||||
}
|
||||
|
||||
} // namespace server
|
||||
|
||||
Reference in New Issue
Block a user