Reconnect is now possible.

This commit is contained in:
Jocke
2016-02-10 21:02:46 +01:00
parent 95fa1f4bbd
commit ec54b1298d
5 changed files with 19 additions and 3 deletions
+1
View File
@@ -15,6 +15,7 @@ public:
void Receive(Packet & packet, PlayerDefinition & playerDefinition); void Receive(Packet & packet, PlayerDefinition & playerDefinition);
void Send(Packet & packet, PlayerDefinition & playerDefinition); void Send(Packet & packet, PlayerDefinition & playerDefinition);
void Send(Packet & packet); void Send(Packet & packet);
void Disconnect();
private: private:
// TCP logic // TCP logic
boost::asio::io_service m_IOService; boost::asio::io_service m_IOService;
+3 -2
View File
@@ -58,13 +58,14 @@ void Client::Update()
} }
if (m_IsConnected) { if (m_IsConnected) {
hasServerTimedOut();
// Don't send 1 input in 1 packet, bunch em up. // Don't send 1 input in 1 packet, bunch em up.
if (m_SendInputIntervalMs < (1000 * (std::clock() - m_TimeSinceSentInputs) / (double)CLOCKS_PER_SEC)) { if (m_SendInputIntervalMs < (1000 * (std::clock() - m_TimeSinceSentInputs) / (double)CLOCKS_PER_SEC)) {
sendInputCommands(); sendInputCommands();
m_TimeSinceSentInputs = std::clock(); m_TimeSinceSentInputs = std::clock();
} }
sendLocalPlayerTransform(); sendLocalPlayerTransform();
m_IsConnected = !hasServerTimedOut();
} }
//Network::Update(); //Network::Update();
} }
@@ -380,7 +381,7 @@ bool Client::hasServerTimedOut()
if (timeSincePing > m_TimeoutMs) { if (timeSincePing > m_TimeoutMs) {
// Clear everything and go to menu. // Clear everything and go to menu.
LOG_INFO("Server has timed out, returning to menu, Beep Boop."); LOG_INFO("Server has timed out, returning to menu, Beep Boop.");
m_IsConnected = false; m_Reliable.Disconnect();
return true; return true;
} }
return false; return false;
+2
View File
@@ -302,6 +302,8 @@ void Server::disconnect(PlayerID playerID)
e.PlayerID = playerID; e.PlayerID = playerID;
m_EventBroker->Publish(e); 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); m_ConnectedPlayers.erase(playerID);
} }
+8 -1
View File
@@ -51,7 +51,10 @@ void TCPClient::Connect(std::string playerName, std::string address, int port)
void TCPClient::Disconnect() 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) void TCPClient::Receive(Packet& packet)
@@ -87,6 +90,10 @@ int TCPClient::readBuffer(char* data)
void TCPClient::Send(Packet & packet) void TCPClient::Send(Packet & packet)
{ {
if (!m_Socket) {
LOG_WARNING("TCPClient::Send: Socket is null");
return;
}
packet.UpdateSize(); packet.UpdateSize();
boost::system::error_code error; boost::system::error_code error;
m_Socket->send(boost::asio::buffer( m_Socket->send(boost::asio::buffer(
+5
View File
@@ -72,6 +72,11 @@ void TCPServer::Send(Packet & packet)
0); 0);
} }
void TCPServer::Disconnect()
{
}
void TCPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition) void TCPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition)
{ {
int bytesRead = readBuffer(m_ReadBuffer, playerDefinition); int bytesRead = readBuffer(m_ReadBuffer, playerDefinition);