Implemented primitive server "heartbeat" logic, which sends server info from server to client without being connected.

This commit is contained in:
stiffly
2016-02-17 15:51:26 +01:00
parent 4432891437
commit fdc8f753cb
8 changed files with 61 additions and 4 deletions
+18 -2
View File
@@ -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