Add RemoveSocketFromGroup.

This commit is contained in:
Jean-Baptiste Perrier
2021-02-18 19:40:45 +01:00
parent 94381f356c
commit d1f30a973d
4 changed files with 62 additions and 3 deletions

View File

@@ -82,6 +82,16 @@ bool NetworkBase::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, Ne
return true;
}
void NetworkBase::RemoveSocketFromGroup(NetworkSocketGroup& group, uint32 index)
{
}
bool NetworkBase::RemoveSocketFromGroup(NetworkSocketGroup& group, NetworkSocket& socket)
{
return true;
}
void NetworkBase::ClearGroup(NetworkSocketGroup& group)
{
group.Count = 0;

View File

@@ -236,6 +236,21 @@ public:
/// <param name="socket">The returned socket.</param>
/// <returns>Returns true on error, otherwise false.</returns>
static bool GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket);
/// <summary>
/// Removes the socket at the specified index.
/// </summary>
/// <param name="group">The group.</param>
/// <param name="index">The index.</param>
static void RemoveSocketFromGroup(NetworkSocketGroup& group, uint32 index);
/// <summary>
/// Removes the socket if present.
/// </summary>
/// <param name="group">The group.</param>
/// <param name="socket">The socket.</param>
/// <returns>Returns true if the socket is not found, otherwise false.</returns>
static bool RemoveSocketFromGroup(NetworkSocketGroup& group, NetworkSocket& socket);
/// <summary>
/// Clears the socket group.

View File

@@ -353,12 +353,21 @@ int32 Win32Network::AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& s
{
if (group.Count >= SOCKGROUP_MAXCOUNT)
return -1;
pollfd pollinfo;
pollinfo.fd = *(SOCKET*)socket.Data;
pollinfo.events = POLLRDNORM | POLLWRNORM;
*(pollfd*)&group.Data[group.Count * SOCKGROUP_ITEMSIZE] = pollinfo;
group.Count++;
return group.Count - 1;
for(int i = 0; i < SOCKGROUP_MAXCOUNT; i++)
{
if (((pollfd*)&group.Data[i * SOCKGROUP_ITEMSIZE])->fd == -1)
{
*(pollfd*)&group.Data[i * SOCKGROUP_ITEMSIZE] = pollinfo;
group.Count++;
return i;
}
}
return -1;
}
bool Win32Network::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket)
@@ -379,6 +388,29 @@ bool Win32Network::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, N
return false;
}
void Win32Network::RemoveSocketFromGroup(NetworkSocketGroup& group, uint32 index)
{
if (((pollfd*)&group.Data[index * SOCKGROUP_ITEMSIZE])->fd != -1)
{
((pollfd*)&group.Data[index * SOCKGROUP_ITEMSIZE])->fd = -1;
group.Count--;
}
}
bool Win32Network::RemoveSocketFromGroup(NetworkSocketGroup& group, NetworkSocket& socket)
{
for(int i = 0; i < SOCKGROUP_MAXCOUNT; i++)
{
if (((pollfd*)&group.Data[i * SOCKGROUP_ITEMSIZE])->fd == *(SOCKET*)&socket.Data)
{
((pollfd*)&group.Data[i * SOCKGROUP_ITEMSIZE])->fd = -1;
group.Count--;
return false;
}
}
return true;
}
void Win32Network::ClearGroup(NetworkSocketGroup& group)
{
group.Count = 0;

View File

@@ -26,6 +26,8 @@ public:
static bool GetSocketState(NetworkSocketGroup& group, uint32 index, NetworkSocketState& state);
static int32 AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& socket);
static bool GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket);
static void RemoveSocketFromGroup(NetworkSocketGroup& group, uint32 index);
static bool RemoveSocketFromGroup(NetworkSocketGroup& group, NetworkSocket& socket);
static void ClearGroup(NetworkSocketGroup& group);
static int32 WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint = nullptr);
static int32 ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferSize, NetworkEndPoint* endPoint = nullptr);