diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 70cc10d5..01e18da8 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -83,7 +83,7 @@ public: void parseTCPConnect(Packet& packet); void parsePlayerConnected(Packet& packet); void parsePing(); - void parseHeartbeat(Packet& packet); + void parseHeartbeat(Packet& packet, PlayerDefinition); void parseKick(); void parsePlayersSpawned(Packet& packet); void parseEntityDeletion(Packet& packet); diff --git a/include/Engine/Network/TCPServer.h b/include/Engine/Network/TCPServer.h index 9cc7646a..424599c9 100644 --- a/include/Engine/Network/TCPServer.h +++ b/include/Engine/Network/TCPServer.h @@ -16,6 +16,8 @@ public: void Send(Packet & packet, PlayerDefinition & playerDefinition); void Send(Packet & packet); void Disconnect(); + int Port() { return acceptor->local_endpoint().port(); } + std::string Address(); private: // TCP logic boost::asio::io_service m_IOService; diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index ddd884b0..a9a67bae 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -72,7 +72,7 @@ void Client::Update() localArea.Endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address().from_string("127.0.0.1"), 13); m_Heartbeat.Receive(packet, localArea); if(packet.GetMessageType() == MessageType::Heartbeat) { - parseHeartbeat(packet); + parseHeartbeat(packet, localArea); } } if (m_IsConnected) { @@ -128,9 +128,6 @@ void Client::parseMessageType(Packet& packet) case MessageType::ComponentDeleted: parseComponentDeletion(packet); break; - case MessageType::Heartbeat: - parseHeartbeat(packet); - break; case MessageType::OnPlayerDamage: parsePlayerDamage(packet); break; @@ -186,7 +183,7 @@ void Client::parsePing() } -void Client::parseHeartbeat(Packet& packet) +void Client::parseHeartbeat(Packet& packet, PlayerDefinition pd) { // Pop size, message type, and ID packet.ReadPrimitive(); @@ -194,7 +191,12 @@ void Client::parseHeartbeat(Packet& packet) packet.ReadPrimitive(); std::string serverName = packet.ReadString(); int playersConnected = packet.ReadPrimitive(); - LOG_INFO("Serverlist\nName\tPlayers\n%s\t%i\n", serverName.c_str(), playersConnected); + std::string address = packet.ReadString(); + int port = packet.ReadPrimitive(); + //TODO: save these to some kind of list which can be represented to the player + //TODO: This should not happen when a client is connected to a server + + LOG_INFO("Serverlist\nName\tPlayers\tIP\t\tPort\n%s\t%i\t%s\t%i\n", serverName.c_str(), playersConnected, address, port); } void Client::parseKick() diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index a32852b0..8dd398bd 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -241,8 +241,10 @@ void Server::sendPing() void Server::sendHeartBeat() { Packet packet(MessageType::Heartbeat); - packet.WriteString("This is a servername"); // server name + packet.WriteString("Bob"); // server name packet.WritePrimitive(m_ConnectedPlayers.size()); + packet.WriteString(m_Reliable.Address()); + packet.WritePrimitive(m_Reliable.Port()); m_Heartbeat.Send(packet); } diff --git a/src/Engine/Network/TCPServer.cpp b/src/Engine/Network/TCPServer.cpp index 66f14053..a55eee98 100644 --- a/src/Engine/Network/TCPServer.cpp +++ b/src/Engine/Network/TCPServer.cpp @@ -74,7 +74,16 @@ void TCPServer::Send(Packet & packet) void TCPServer::Disconnect() { +} + +std::string TCPServer::Address() +{ + boost::asio::ip::tcp::resolver resolver(m_IOService); + boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), boost::asio::ip::host_name(), ""); + boost::asio::ip::tcp::resolver::iterator it = resolver.resolve(query); + boost::asio::ip::tcp::endpoint endpoint = *it; + return endpoint.address().to_string().c_str(); } void TCPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition)