Add RemoveSocketFromGroup.
This commit is contained in:
@@ -82,6 +82,16 @@ bool NetworkBase::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, Ne
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkBase::RemoveSocketFromGroup(NetworkSocketGroup& group, uint32 index)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool NetworkBase::RemoveSocketFromGroup(NetworkSocketGroup& group, NetworkSocket& socket)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void NetworkBase::ClearGroup(NetworkSocketGroup& group)
|
void NetworkBase::ClearGroup(NetworkSocketGroup& group)
|
||||||
{
|
{
|
||||||
group.Count = 0;
|
group.Count = 0;
|
||||||
|
|||||||
@@ -236,6 +236,21 @@ public:
|
|||||||
/// <param name="socket">The returned socket.</param>
|
/// <param name="socket">The returned socket.</param>
|
||||||
/// <returns>Returns true on error, otherwise false.</returns>
|
/// <returns>Returns true on error, otherwise false.</returns>
|
||||||
static bool GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket);
|
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>
|
/// <summary>
|
||||||
/// Clears the socket group.
|
/// Clears the socket group.
|
||||||
|
|||||||
@@ -353,12 +353,21 @@ int32 Win32Network::AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& s
|
|||||||
{
|
{
|
||||||
if (group.Count >= SOCKGROUP_MAXCOUNT)
|
if (group.Count >= SOCKGROUP_MAXCOUNT)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
pollfd pollinfo;
|
pollfd pollinfo;
|
||||||
pollinfo.fd = *(SOCKET*)socket.Data;
|
pollinfo.fd = *(SOCKET*)socket.Data;
|
||||||
pollinfo.events = POLLRDNORM | POLLWRNORM;
|
pollinfo.events = POLLRDNORM | POLLWRNORM;
|
||||||
*(pollfd*)&group.Data[group.Count * SOCKGROUP_ITEMSIZE] = pollinfo;
|
|
||||||
group.Count++;
|
for(int i = 0; i < SOCKGROUP_MAXCOUNT; i++)
|
||||||
return group.Count - 1;
|
{
|
||||||
|
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)
|
bool Win32Network::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, NetworkSocket* socket)
|
||||||
@@ -379,6 +388,29 @@ bool Win32Network::GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, N
|
|||||||
return false;
|
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)
|
void Win32Network::ClearGroup(NetworkSocketGroup& group)
|
||||||
{
|
{
|
||||||
group.Count = 0;
|
group.Count = 0;
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ public:
|
|||||||
static bool GetSocketState(NetworkSocketGroup& group, uint32 index, NetworkSocketState& state);
|
static bool GetSocketState(NetworkSocketGroup& group, uint32 index, NetworkSocketState& state);
|
||||||
static int32 AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& socket);
|
static int32 AddSocketToGroup(NetworkSocketGroup& group, NetworkSocket& socket);
|
||||||
static bool GetSocketFromGroup(NetworkSocketGroup& group, uint32 index, 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 void ClearGroup(NetworkSocketGroup& group);
|
||||||
static int32 WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint = nullptr);
|
static int32 WriteSocket(NetworkSocket socket, byte* data, uint32 length, NetworkEndPoint* endPoint = nullptr);
|
||||||
static int32 ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferSize, NetworkEndPoint* endPoint = nullptr);
|
static int32 ReadSocket(NetworkSocket socket, byte* buffer, uint32 bufferSize, NetworkEndPoint* endPoint = nullptr);
|
||||||
|
|||||||
Reference in New Issue
Block a user