From ec54b1298d0b7d383ae837337ded5eb190705f44 Mon Sep 17 00:00:00 2001 From: Jocke Date: Wed, 10 Feb 2016 21:02:46 +0100 Subject: [PATCH] Reconnect is now possible. --- include/Engine/Network/TCPServer.h | 1 + src/Engine/Network/Client.cpp | 5 +++-- src/Engine/Network/Server.cpp | 2 ++ src/Engine/Network/TCPClient.cpp | 9 ++++++++- src/Engine/Network/TCPServer.cpp | 5 +++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/include/Engine/Network/TCPServer.h b/include/Engine/Network/TCPServer.h index b1aa7ce0..9cc7646a 100644 --- a/include/Engine/Network/TCPServer.h +++ b/include/Engine/Network/TCPServer.h @@ -15,6 +15,7 @@ public: void Receive(Packet & packet, PlayerDefinition & playerDefinition); void Send(Packet & packet, PlayerDefinition & playerDefinition); void Send(Packet & packet); + void Disconnect(); private: // TCP logic boost::asio::io_service m_IOService; diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 4eaefde2..f7fc956c 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -58,13 +58,14 @@ void Client::Update() } if (m_IsConnected) { - hasServerTimedOut(); // Don't send 1 input in 1 packet, bunch em up. if (m_SendInputIntervalMs < (1000 * (std::clock() - m_TimeSinceSentInputs) / (double)CLOCKS_PER_SEC)) { sendInputCommands(); m_TimeSinceSentInputs = std::clock(); } sendLocalPlayerTransform(); + + m_IsConnected = !hasServerTimedOut(); } //Network::Update(); } @@ -380,7 +381,7 @@ bool Client::hasServerTimedOut() if (timeSincePing > m_TimeoutMs) { // Clear everything and go to menu. LOG_INFO("Server has timed out, returning to menu, Beep Boop."); - m_IsConnected = false; + m_Reliable.Disconnect(); return true; } return false; diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index bc2099bd..0c9af69c 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -302,6 +302,8 @@ void Server::disconnect(PlayerID playerID) e.PlayerID = playerID; m_EventBroker->Publish(e); + m_ConnectedPlayers[playerID].TCPSocket->shutdown(boost::asio::ip::tcp::socket::shutdown_both); + m_ConnectedPlayers[playerID].TCPSocket->close(); m_ConnectedPlayers.erase(playerID); } diff --git a/src/Engine/Network/TCPClient.cpp b/src/Engine/Network/TCPClient.cpp index 703e4cbe..5c8ccee7 100644 --- a/src/Engine/Network/TCPClient.cpp +++ b/src/Engine/Network/TCPClient.cpp @@ -51,7 +51,10 @@ void TCPClient::Connect(std::string playerName, std::string address, int port) void TCPClient::Disconnect() { - + m_Socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both); + m_Socket->close(); + m_Socket = nullptr; + m_IsConnected = false; } void TCPClient::Receive(Packet& packet) @@ -87,6 +90,10 @@ int TCPClient::readBuffer(char* data) void TCPClient::Send(Packet & packet) { + if (!m_Socket) { + LOG_WARNING("TCPClient::Send: Socket is null"); + return; + } packet.UpdateSize(); boost::system::error_code error; m_Socket->send(boost::asio::buffer( diff --git a/src/Engine/Network/TCPServer.cpp b/src/Engine/Network/TCPServer.cpp index 0b44013d..2bfcde74 100644 --- a/src/Engine/Network/TCPServer.cpp +++ b/src/Engine/Network/TCPServer.cpp @@ -72,6 +72,11 @@ void TCPServer::Send(Packet & packet) 0); } +void TCPServer::Disconnect() +{ + +} + void TCPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition) { int bytesRead = readBuffer(m_ReadBuffer, playerDefinition);