diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog
index dd3d999..7f2cd02 100644
Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.command.1.tlog differ
diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog
index 899fb89..1881819 100644
Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.read.1.tlog differ
diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog
index 1f5e444..3ac0ee4 100644
Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/CL.write.1.tlog differ
diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog
index e3f2fd6..b1b8729 100644
Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib-link.write.1.tlog differ
diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog
index 29bfe93..77825b3 100644
Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/Lib.read.1.tlog differ
diff --git a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog
index 1087b6d..de31f73 100644
Binary files a/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog and b/VoidNetVS/VoidNetVS/Release/VoidNetVS.tlog/lib.command.1.tlog differ
diff --git a/VoidNetVS/VoidNetVS/TcpClient.cpp b/VoidNetVS/VoidNetVS/TcpClient.cpp
new file mode 100644
index 0000000..2b86fe3
--- /dev/null
+++ b/VoidNetVS/VoidNetVS/TcpClient.cpp
@@ -0,0 +1,3 @@
+#ifdef _MSC_VER
+#include "TcpClientWindows.cpp"
+#endif
\ No newline at end of file
diff --git a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj
index cba33dd..cae03af 100644
--- a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj
+++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj
@@ -51,6 +51,7 @@
+
diff --git a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters
index 712a5e1..359ffbc 100644
--- a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters
+++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters
@@ -83,6 +83,9 @@
src
+
+ src
+
diff --git a/src/NetworkMessage.cpp b/src/NetworkMessage.cpp
index bdab4b7..d3ba6f0 100644
--- a/src/NetworkMessage.cpp
+++ b/src/NetworkMessage.cpp
@@ -1,7 +1,6 @@
#include "NetworkMessage.hpp"
#include "Utility.hpp"
#include "Serializer.hpp"
-#include "Tags.hpp"
#include
diff --git a/src/Serializer.cpp b/src/Serializer.cpp
index 1253722..01d1fca 100644
--- a/src/Serializer.cpp
+++ b/src/Serializer.cpp
@@ -14,7 +14,7 @@ template const std::vector &Serializer::to_bytes(const T& obje
template const T& Serializer::from_bytes(const std::vector &bytes, T& object)
{
static_assert(std::is_trivially_copyable::value, "not a TriviallyCopyable type");
- std::copy(bytes.begin(), bytes.end(), reinterpret_cast(std::addressof(object));
+ std::copy(bytes.begin(), bytes.end(), reinterpret_cast(std::addressof(object)));
return object;
}
\ No newline at end of file
diff --git a/src/TcpClientWindows.cpp b/src/TcpClientWindows.cpp
index 323ad4b..02a9351 100644
--- a/src/TcpClientWindows.cpp
+++ b/src/TcpClientWindows.cpp
@@ -2,7 +2,6 @@
#include "Utility.hpp"
#include "Config.hpp"
#include "NetworkBuffer.hpp"
-#include "Tags.hpp"
#include "Handshake.hpp"
#include
diff --git a/src/TcpServerWindows.cpp b/src/TcpServerWindows.cpp
index 5133728..39ddf53 100644
--- a/src/TcpServerWindows.cpp
+++ b/src/TcpServerWindows.cpp
@@ -72,7 +72,10 @@ TcpServer::~TcpServer()
void TcpServer::Shutdown()
{
for (std::vector::iterator it = clients.begin(); it != clients.end(); ++it)
- (*it).Shutdown();
+ {
+ TcpClient client = *it;
+ client.Shutdown();
+ }
}
bool TcpServer::StartServer(bool accept_connections)
@@ -201,7 +204,8 @@ uint16 TcpServer::AllocateID() // this function is only used in the AddToClients
bool flag = true;
for (std::vector::iterator it = clients.begin(); it != clients.end(); ++it)
{
- if ((*it).GetID() == i)
+ TcpClient client = *it;
+ if (client.GetID() == i)
{
flag = false;
break;
@@ -235,7 +239,7 @@ void TcpServer::RejectConnection(TcpClient &client)
{
Handshake handshake(client.GetID(), ConnectionCode::Reject);
client.SendBytes(Handshake::EncodeHandshake(handshake));
- client.Shutdown();
+ CloseSocket(client);
}
void TcpServer::AcceptConnection(TcpClient & client)
@@ -246,13 +250,26 @@ void TcpServer::AcceptConnection(TcpClient & client)
void TcpServer::CloseSocket(TcpClient & client)
{
- NetworkMessage message;
- message.sender = -1;
- message.distribution_mode = ID;
- message.destination_id = client.GetID();
- message.tag = DISCONNECT;
- SendMessage(message);
- clients.erase(std::remove(clients.begin(), clients.end(), client), clients.end());
+ bool removed;
+ for (std::vector::iterator it = clients.begin(); it != clients.end(); ++it)
+ {
+ TcpClient it_client = *it;
+ if (client.GetID() == it_client.GetID())
+ {
+ clients.erase(it);
+ removed = true;
+ }
+ }
+
+ if (removed)
+ {
+ NetworkMessage message;
+ message.sender = -1;
+ message.distribution_mode = ID;
+ message.destination_id = client.GetID();
+ message.tag = DISCONNECT;
+ SendMessage(message);
+ }
}
void TcpServer::CloseSocket(uint16 id)
@@ -266,8 +283,9 @@ const TcpClient & TcpServer::GetClientByID(uint16 id)
{
for (std::vector::iterator it = clients.begin(); it != clients.end(); ++it)
{
- if ((*it).GetID() == id)
- return *it;
+ TcpClient client = *it;
+ if (client.GetID() == id)
+ return client;
}
return TcpClient();
}
diff --git a/src/VoidNetClient.cpp b/src/VoidNetClient.cpp
index 62863c1..de6eeab 100644
--- a/src/VoidNetClient.cpp
+++ b/src/VoidNetClient.cpp
@@ -1,6 +1,5 @@
#include "VoidNetClient.hpp"
#include "Utility.hpp"
-#include "Tags.hpp"
#include