Disconnect on udp
This commit is contained in:
@@ -381,6 +381,7 @@ void Client::ignoreFields(Packet& packet, const ComponentInfo& componentInfo)
|
|||||||
|
|
||||||
void Client::parseSnapshot(Packet& packet)
|
void Client::parseSnapshot(Packet& packet)
|
||||||
{
|
{
|
||||||
|
LOG_INFO("Snapshot received");
|
||||||
// Read input commands
|
// Read input commands
|
||||||
std::size_t numInputCommands = packet.ReadPrimitive<std::size_t>();
|
std::size_t numInputCommands = packet.ReadPrimitive<std::size_t>();
|
||||||
for (std::size_t i = 0; i < numInputCommands; ++i) {
|
for (std::size_t i = 0; i < numInputCommands; ++i) {
|
||||||
@@ -471,6 +472,7 @@ void Client::disconnect()
|
|||||||
m_PacketID = 0;
|
m_PacketID = 0;
|
||||||
Packet packet(MessageType::Disconnect, m_SendPacketID);
|
Packet packet(MessageType::Disconnect, m_SendPacketID);
|
||||||
m_Reliable.Send(packet);
|
m_Reliable.Send(packet);
|
||||||
|
m_Unreliable.Disconnect();
|
||||||
m_Reliable.Disconnect();
|
m_Reliable.Disconnect();
|
||||||
createMainMenu();
|
createMainMenu();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,13 @@ bool UDPClient::Connect(std::string playerName, std::string address, int port)
|
|||||||
|
|
||||||
void UDPClient::Disconnect()
|
void UDPClient::Disconnect()
|
||||||
{
|
{
|
||||||
|
m_Socket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
|
||||||
|
m_Socket->close();
|
||||||
|
m_Socket = nullptr;
|
||||||
|
|
||||||
|
int lastReceivedSnapshotGroup = 0;
|
||||||
|
m_PacketSegmentMap.clear();
|
||||||
|
PacketID m_SendPacketID = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPClient::Receive(Packet& packet)
|
void UDPClient::Receive(Packet& packet)
|
||||||
@@ -100,9 +106,7 @@ void UDPClient::readPartOfPacket()
|
|||||||
memcpy(&packetGroupIndex, m_ReadBuffer + 2 * sizeof(int), sizeof(int));
|
memcpy(&packetGroupIndex, m_ReadBuffer + 2 * sizeof(int), sizeof(int));
|
||||||
int packetGroupSize = 0;
|
int packetGroupSize = 0;
|
||||||
memcpy(&packetGroupSize, m_ReadBuffer + 3 * sizeof(int), sizeof(int));
|
memcpy(&packetGroupSize, m_ReadBuffer + 3 * sizeof(int), sizeof(int));
|
||||||
//LOG_INFO("Packet group: %i. Group index: %i. Group size: %i", packetGroup, packetGroupIndex, packetGroupSize);
|
LOG_INFO("Packet group: %i. Group index: %i. Group size: %i. Packet size: %i.", packetGroup, packetGroupIndex, packetGroupSize, sizeOfPacket);
|
||||||
//LOG_INFO("Packet size: %i.", sizeOfPacket);
|
|
||||||
|
|
||||||
if (sizeOfPacket > m_Socket->available()) {
|
if (sizeOfPacket > m_Socket->available()) {
|
||||||
LOG_WARNING("UDPClient::readBuffer(): We haven't got the whole packet yet.");
|
LOG_WARNING("UDPClient::readBuffer(): We haven't got the whole packet yet.");
|
||||||
// return;
|
// return;
|
||||||
@@ -213,7 +217,7 @@ bool UDPClient::GetNextPacket(Packet & packet)
|
|||||||
lastReceivedSnapshotGroup = packet.Group();
|
lastReceivedSnapshotGroup = packet.Group();
|
||||||
}
|
}
|
||||||
// No need to get next it as we are returning.
|
// No need to get next it as we are returning.
|
||||||
//LOG_INFO("Packet parsed");
|
LOG_INFO("Packet parsed");
|
||||||
m_PacketSegmentMap.erase(it);
|
m_PacketSegmentMap.erase(it);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ void UDPServer::SendToConnectedPlayers(Packet& packet, std::map<PlayerID, Player
|
|||||||
boost::asio::buffer(splitPacket.Data(), splitPacket.Size()),
|
boost::asio::buffer(splitPacket.Data(), splitPacket.Size()),
|
||||||
kv.second.Endpoint,
|
kv.second.Endpoint,
|
||||||
0);
|
0);
|
||||||
|
LOG_INFO("bytesSent: %i", bytesSent);
|
||||||
} catch (const boost::system::system_error& e) {
|
} catch (const boost::system::system_error& e) {
|
||||||
LOG_INFO(e.what());
|
LOG_INFO(e.what());
|
||||||
// TODO: Clean up invalid endpoints out of m_ConnectedPlayers later
|
// TODO: Clean up invalid endpoints out of m_ConnectedPlayers later
|
||||||
|
|||||||
Reference in New Issue
Block a user