diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 2d4dc991..d9dcfad2 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -140,7 +140,7 @@ private: std::vector m_Serverlist; bool m_SearchingForServers = false; std::clock_t m_StartSearchTime; - double m_SearchingTime = 2000; // Config I guess + double m_SearchingTime = 200; // Config I guess }; #endif diff --git a/include/Engine/Network/UDPClient.h b/include/Engine/Network/UDPClient.h index 654d4ea1..6264566d 100644 --- a/include/Engine/Network/UDPClient.h +++ b/include/Engine/Network/UDPClient.h @@ -27,7 +27,7 @@ private: boost::asio::io_service m_IOService; boost::asio::ip::udp::endpoint m_ReceiverEndpoint; boost::shared_ptr m_Socket; - int lastReceivedSnapshotGroup = 0; + int m_LastReceivedSnapshotGroup = 0; int readBuffer(); void readPartOfPacket(); PacketID m_SendPacketID = 0; diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 6737b3ee..d2f075e1 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -381,7 +381,6 @@ void Client::ignoreFields(Packet& packet, const ComponentInfo& componentInfo) void Client::parseSnapshot(Packet& packet) { - LOG_INFO("Snapshot received"); // Read input commands std::size_t numInputCommands = packet.ReadPrimitive(); for (std::size_t i = 0; i < numInputCommands; ++i) { diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index 2b11b9c3..9cce3b68 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -164,7 +164,7 @@ void Server::reliableBroadcast(Packet& packet) void Server::unreliableBroadcast(Packet& packet) { - m_Unreliable.SendToConnectedPlayers(packet, m_ConnectedPlayers); + m_Unreliable.SendToConnectedPlayers(packet, m_ConnectedPlayers); } // Send snapshot fields @@ -317,7 +317,7 @@ void Server::checkForTimeOuts() } } } - for (size_t i = 0; i < playersToRemove.size(); i++) { + for (int i = playersToRemove.size() - 1; i >= 0; i--) { disconnect(playersToRemove.at(i)); } } @@ -360,6 +360,7 @@ void Server::parseTCPConnect(Packet & packet) // Ska vara till lagd i TCPServer receive PlayerID playerID = getPlayerIDFromEndpoint(); if (playerID == -1) { + LOG_INFO("Server::parseTCPConnect: Not connected"); return; } // Create a new player @@ -382,7 +383,7 @@ void Server::parseTCPConnect(Packet & packet) Packet connnectPacket(MessageType::Connect, m_ConnectedPlayers.at(playerID).PacketID); // Write playerID to packet connnectPacket.WritePrimitive(playerID); - m_Reliable.Send(connnectPacket); + m_Reliable.Send(connnectPacket, m_ConnectedPlayers.at(playerID)); Packet firstSnapshot(MessageType::Snapshot); addInputCommandsToPacket(firstSnapshot); diff --git a/src/Engine/Network/TCPClient.cpp b/src/Engine/Network/TCPClient.cpp index df9c159a..28da80ce 100644 --- a/src/Engine/Network/TCPClient.cpp +++ b/src/Engine/Network/TCPClient.cpp @@ -3,25 +3,14 @@ using namespace boost::asio::ip; TCPClient::TCPClient() -{ -} +{ } TCPClient::~TCPClient() -{ -} +{ } bool TCPClient::Connect(std::string playerName, std::string address, int port) { - if (m_Socket) { - if (m_IsConnected) { - Packet packet(MessageType::Connect, m_SendPacketID); - packet.WriteString(playerName); - Send(packet); - LOG_INFO("Connect message sent again!"); - } - return true; - } - else if (!m_IsConnected) { + if (!m_Socket) { boost::system::error_code error = boost::asio::error::host_not_found; m_Endpoint = tcp::endpoint(boost::asio::ip::address::from_string(address), port); m_Socket = std::unique_ptr(new tcp::socket(m_IOService)); @@ -36,9 +25,7 @@ bool TCPClient::Connect(std::string playerName, std::string address, int port) Send(packet); LOG_INFO("Connect message sent!"); return true; - } - // If error - else { + } else { // If error m_Socket->close(); m_Socket = nullptr; return false; @@ -47,14 +34,10 @@ bool TCPClient::Connect(std::string playerName, std::string address, int port) } void TCPClient::Disconnect() -{ - if (!m_IsConnected) { - return; - } +{ m_Socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both); m_Socket->close(); m_Socket = nullptr; - m_IsConnected = false; } void TCPClient::Receive(Packet& packet) @@ -66,7 +49,7 @@ void TCPClient::Receive(Packet& packet) } size_t TCPClient::readBuffer() -{ +{ if (!m_Socket) { return 0; } @@ -92,7 +75,7 @@ size_t TCPClient::readBuffer() while (sizeOfPacket > bytesReceived) { // Read the rest of the message bytesReceived += m_Socket->read_some(boost - ::asio::buffer((void*)(m_ReadBuffer), sizeOfPacket - bytesReceived), + ::asio::buffer((void*)(m_ReadBuffer + bytesReceived), sizeOfPacket - bytesReceived), error); if (error) { //LOG_ERROR("receive: %s", error.message().c_str()); diff --git a/src/Engine/Network/UDPClient.cpp b/src/Engine/Network/UDPClient.cpp index 149e860b..a10004a1 100644 --- a/src/Engine/Network/UDPClient.cpp +++ b/src/Engine/Network/UDPClient.cpp @@ -28,7 +28,7 @@ void UDPClient::Disconnect() m_Socket->close(); m_Socket = nullptr; - int lastReceivedSnapshotGroup = 0; + m_LastReceivedSnapshotGroup = 0; m_PacketSegmentMap.clear(); PacketID m_SendPacketID = 0; } @@ -106,7 +106,7 @@ void UDPClient::readPartOfPacket() memcpy(&packetGroupIndex, m_ReadBuffer + 2 * sizeof(int), sizeof(int)); int packetGroupSize = 0; memcpy(&packetGroupSize, m_ReadBuffer + 3 * sizeof(int), sizeof(int)); - LOG_INFO("Packet group: %i. Group index: %i. Group size: %i. Packet size: %i.", packetGroup, packetGroupIndex, packetGroupSize, sizeOfPacket); + //LOG_INFO("Packet group: %i. Group index: %i. Group size: %i. Packet size: %i.", packetGroup, packetGroupIndex, packetGroupSize, sizeOfPacket); if (sizeOfPacket > m_Socket->available()) { LOG_WARNING("UDPClient::readBuffer(): We haven't got the whole packet yet."); // return; @@ -120,7 +120,7 @@ void UDPClient::readPartOfPacket() sizeOfPacket), m_ReceiverEndpoint, 0, error); if (error) { - LOG_ERROR("receive: %s", error.message().c_str()); + LOG_ERROR("UDPClient::readPartOfPacket: %s", error.message().c_str()); } // Might want to do this earlier when i figure out a good way to // remove data from network buffer. @@ -198,7 +198,7 @@ bool UDPClient::GetNextPacket(Packet & packet) LOG_INFO("The map is increasing in size, size is %i", mapSize); continue; } - if (headerInfoPacket.GetMessageType() == MessageType::Snapshot && lastReceivedSnapshotGroup > headerInfoPacket.Group()) { + if (headerInfoPacket.GetMessageType() == MessageType::Snapshot && m_LastReceivedSnapshotGroup > headerInfoPacket.Group()) { it = m_PacketSegmentMap.erase(it); continue; //LOG_INFO("Deleted old entry"); @@ -214,10 +214,9 @@ bool UDPClient::GetNextPacket(Packet & packet) packet.WriteData(currentVector.at(i).second.get() + packet.HeaderSize(), sizeOfData - packet.HeaderSize()); } if (headerInfoPacket.GetMessageType() == MessageType::Snapshot) { - lastReceivedSnapshotGroup = packet.Group(); + m_LastReceivedSnapshotGroup = packet.Group(); } // No need to get next it as we are returning. - LOG_INFO("Packet parsed"); m_PacketSegmentMap.erase(it); return true; } else { diff --git a/src/Engine/Network/UDPServer.cpp b/src/Engine/Network/UDPServer.cpp index c3f87fd7..34a8175c 100644 --- a/src/Engine/Network/UDPServer.cpp +++ b/src/Engine/Network/UDPServer.cpp @@ -61,6 +61,8 @@ void UDPServer::Send(Packet& packet, PlayerDefinition& playerDefinition) void UDPServer::SendToConnectedPlayers(Packet& packet, std::map& playersTosendTo) { + // Remove a player if hen crashes. + // Return a vector with disconnected players. // Work in progress packet.UpdateSize(); @@ -95,18 +97,18 @@ void UDPServer::SendToConnectedPlayers(Packet& packet, std::map