Implemented primitive server "heartbeat" logic, which sends server info from server to client without being connected.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#include "Network/Server.h"
|
||||
|
||||
Server::Server(World* world, EventBroker* eventBroker, int port)
|
||||
Server::Server(World* world, EventBroker* eventBroker, int port)
|
||||
: Network(world, eventBroker)
|
||||
{
|
||||
ConfigFile* config = ResourceManager::Load<ConfigFile>("Config.ini");
|
||||
@@ -13,12 +13,13 @@ Server::Server(World* world, EventBroker* eventBroker, int port)
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EComponentDeleted, &Server::OnComponentDeleted);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDamage, &Server::OnPlayerDamage);
|
||||
|
||||
// Bind
|
||||
// BindWW
|
||||
if (port == 0) {
|
||||
port = config->Get<float>("Networking.Port", 27666);
|
||||
}
|
||||
m_Port = port;
|
||||
LOG_INFO("Server initialized and bound to port %i", port);
|
||||
m_Heartbeat.Connect("Server", "127.0.0.1", 13);
|
||||
}
|
||||
|
||||
Server::~Server()
|
||||
@@ -58,6 +59,7 @@ void Server::Update()
|
||||
parseMessageType(packet);
|
||||
}
|
||||
}
|
||||
|
||||
// Check if players have disconnected
|
||||
for (int i = 0; i < m_PlayersToDisconnect.size(); i++) {
|
||||
disconnect(m_PlayersToDisconnect.at(i));
|
||||
@@ -75,6 +77,11 @@ void Server::Update()
|
||||
sendPing();
|
||||
previousePingMessage = currentTime;
|
||||
}
|
||||
// Server heartbeat (display server list on clients)
|
||||
if (heartbeatInterval < (1000 * (currentTime - previousHeartbeat) / (double)CLOCKS_PER_SEC)) {
|
||||
sendHeartBeat();
|
||||
previousHeartbeat = currentTime;
|
||||
}
|
||||
// Time out logic
|
||||
if (checkTimeOutInterval < (1000 * (currentTime - timOutTimer) / (double)CLOCKS_PER_SEC)) {
|
||||
checkForTimeOuts();
|
||||
@@ -230,6 +237,15 @@ void Server::sendPing()
|
||||
reliableBroadcast(packet);
|
||||
}
|
||||
|
||||
|
||||
void Server::sendHeartBeat()
|
||||
{
|
||||
Packet packet(MessageType::Heartbeat);
|
||||
packet.WriteString("This is a servername"); // server name
|
||||
packet.WritePrimitive<int>(m_ConnectedPlayers.size());
|
||||
m_Heartbeat.Send(packet);
|
||||
}
|
||||
|
||||
void Server::checkForTimeOuts()
|
||||
{
|
||||
double startPing = 1000 * m_StartPingTime
|
||||
|
||||
Reference in New Issue
Block a user