2 Commits

Author SHA1 Message Date
39580c15c5 add Timer class 2025-08-19 18:46:54 +02:00
ee39c1e429 add playerlist packet 2025-08-19 18:42:02 +02:00
5 changed files with 51 additions and 23 deletions

22
include/td/misc/Time.h Normal file
View File

@@ -0,0 +1,22 @@
#pragma once
#include <chrono>
namespace td {
class Timer {
private:
std::chrono::time_point<std::chrono::system_clock> m_LastTime;
public:
Timer() : m_LastTime(std::chrono::system_clock::now()) {}
float GetDelta() {
auto timeElapsed = std::chrono::system_clock::now() - m_LastTime;
float timeSeconds = std::chrono::duration<float, std::chrono::seconds::period>(timeElapsed).count();
m_LastTime = std::chrono::system_clock::now();
return timeSeconds;
}
};
} // namespace td

View File

@@ -27,16 +27,16 @@ struct MapData {
namespace pdata {
/** Client attempts to login (very basic) */
struct PlayerLogin {
std::string m_PlayerName;
};
/** Server indicates success */
struct LoggingSuccess {
PlayerID m_PlayerId;
};
/** Client attempts to login (very basic) */
struct PlayerLogin {
std::string m_PlayerName;
};
/** Player joins the lobby */
struct PlayerJoin {
PlayerInfo m_Player;
@@ -47,6 +47,11 @@ struct PlayerLeave {
PlayerID m_PlayerId;
};
/** List of players who joined before */
struct PlayerList {
std::vector<PlayerInfo> m_Players;
};
struct PredictCommand {
CommandPtr m_Command;
StepTime m_FrameNumber;

View File

@@ -29,6 +29,7 @@ enum class PacketID : std::uint8_t {
PlaceTower,
PlayerJoin,
PlayerLeave,
PlayerList,
PlayerLogin,
PredictCommand,
SpawnTroop,
@@ -58,6 +59,7 @@ using LoggingSuccessPacket = PacketMessage<pdata::LoggingSuccess, PacketID::Logg
using PlaceTowerPacket = PacketMessage<pdata::PlaceTower, PacketID::PlaceTower>;
using PlayerJoinPacket = PacketMessage<pdata::PlayerJoin, PacketID::PlayerJoin>;
using PlayerLeavePacket = PacketMessage<pdata::PlayerLeave, PacketID::PlayerLeave>;
using PlayerListPacket = PacketMessage<pdata::PlayerList, PacketID::PlayerList>;
using PlayerLoginPacket = PacketMessage<pdata::PlayerLogin, PacketID::PlayerLogin>;
using PredictCommandPacket = PacketMessage<pdata::PredictCommand, PacketID::PredictCommand>;
using SpawnTroopPacket = PacketMessage<pdata::SpawnTroop, PacketID::SpawnTroop>;
@@ -66,11 +68,11 @@ using WorldDataPacket = PacketMessage<pdata::WorldData, PacketID::WorldData>;
} // namespace packets
using AllPackets =
std::tuple<packets::BeginGamePacket, packets::ChatMessagePacket, packets::DisconnectPacket, packets::KeepAlivePacket,
packets::LockStepRequestPacket, packets::LockStepResponsePacket, packets::LockStepsPacket, packets::LoggingSuccessPacket,
packets::PlaceTowerPacket, packets::PlayerJoinPacket, packets::PlayerLeavePacket, packets::PlayerLoginPacket,
packets::PredictCommandPacket, packets::SpawnTroopPacket, packets::WorldHeaderPacket, packets::WorldDataPacket>;
using AllPackets = std::tuple<packets::BeginGamePacket, packets::ChatMessagePacket, packets::DisconnectPacket,
packets::KeepAlivePacket, packets::LockStepRequestPacket, packets::LockStepResponsePacket, packets::LockStepsPacket,
packets::LoggingSuccessPacket, packets::PlaceTowerPacket, packets::PlayerJoinPacket, packets::PlayerLeavePacket,
packets::PlayerListPacket, packets::PlayerLoginPacket, packets::PredictCommandPacket, packets::SpawnTroopPacket,
packets::WorldHeaderPacket, packets::WorldDataPacket>;
class PacketHandler : public sp::GenericHandler<AllPackets> {
public:

View File

@@ -1,13 +1,6 @@
#include <chrono>
#include <td/display/state/MainMenuState.h>
float GetDelta() {
static std::chrono::time_point<std::chrono::system_clock> m_LastTime = std::chrono::system_clock::now();
auto timeElapsed = std::chrono::system_clock::now() - m_LastTime;
float timeSeconds = std::chrono::duration<float, std::chrono::seconds::period>(timeElapsed).count();
m_LastTime = std::chrono::system_clock::now();
return timeSeconds;
}
#include <td/misc/Time.h>
int main(int argc, char** argv) {
// init GL context
@@ -15,10 +8,10 @@ int main(int argc, char** argv) {
display.ChangeState<td::MainMenuState>();
td::Timer timer;
while (!display.IsCloseRequested()) {
display.PollEvents();
float delta = GetDelta();
display.Update(delta);
display.Update(timer.GetDelta());
}
return 0;

View File

@@ -8,11 +8,17 @@ namespace server {
ConnectionHandler::ConnectionHandler(IServerSocket& a_Server, PlayerID a_Player) : m_Server(a_Server), m_Player(a_Player) {}
void ConnectionHandler::Handle(const protocol::packets::PlayerLoginPacket& a_Packet) {
std::cout << "[Server] " << a_Packet->m_PlayerName << " tried to join !\n";
protocol::PlayerInfo pInfo{m_Player, a_Packet->m_PlayerName};
m_Server.OnPlayerJoin(m_Player, pInfo);
// TODO
std::vector<protocol::PlayerInfo> players;
m_Server.Send(m_Player, protocol::packets::LoggingSuccessPacket(m_Player));
m_Server.Send(m_Player, protocol::packets::PlayerListPacket(players));
m_Server.Broadcast(protocol::packets::PlayerJoinPacket(pInfo));
// TODO: send already existing players
m_Server.OnPlayerJoin(m_Player, pInfo);
std::cout << "[Server] " << a_Packet->m_PlayerName << " tried to join !\n";
}
void ConnectionHandler::Handle(const protocol::packets::DisconnectPacket& a_Packet) {