Add readiness types and callbacks to sfSocketSelector

This commit is contained in:
Lukas Dürrenberger committed 2026-10-04 22:12:01 +02:00
1 parent d95f00f212
commit af34a2890e
4 files changed
+278 -22

No files matched your search

+1
View File
@@ -70,6 +70,7 @@ add_executable(test-csfml-network
Network/Ftp.test.cpp
Network/Http.test.cpp
Network/IpAddress.test.cpp
Network/SocketSelector.test.cpp
Network/SocketStatus.test.cpp
Network/TcpSocket.test.cpp
)
+44
View File
@@ -0,0 +1,44 @@
#include <CSFML/Network/SocketSelector.h>
#include <CSFML/Network/TcpListener.h>
#include <CSFML/Network/TcpSocket.h>
#include <SFML/Network/SocketSelector.hpp>
#include <catch2/catch_test_macros.hpp>
TEST_CASE("[Network] sfSocketSelector")
{
SECTION("sfSocketSelectorReadiness")
{
STATIC_CHECK(sfSocketSelectorReceive == static_cast<int>(sf::SocketSelector::Receive));
STATIC_CHECK(sfSocketSelectorSend == static_cast<int>(sf::SocketSelector::Send));
}
SECTION("Ready callbacks")
{
sfTcpListener* listener = sfTcpListener_create();
REQUIRE(sfTcpListener_listen(listener, 0, sfIpAddress_LocalHost) == sfSocketDone);
sfTcpSocket* client = sfTcpSocket_create();
REQUIRE(sfTcpSocket_connect(client, sfIpAddress_LocalHost, sfTcpListener_getLocalPort(listener), sfSeconds(1)) ==
sfSocketDone);
sfSocketSelector* selector = sfSocketSelector_create();
uint32_t readiness = 0;
const auto callback = [](uint32_t ready, void* userData) { *static_cast<uint32_t*>(userData) |= ready; };
CHECK(sfSocketSelector_addTcpListenerWithReadiness(selector, listener, sfSocketSelectorReceive, callback, &readiness));
REQUIRE(sfSocketSelector_wait(selector, sfSeconds(1)));
CHECK(sfSocketSelector_isTcpListenerReady(selector, listener));
CHECK(sfSocketSelector_isTcpListenerReadyFor(selector, listener, sfSocketSelectorReceive));
sfSocketSelector_dispatchReadyCallbacks(selector);
CHECK(readiness == sfSocketSelectorReceive);
CHECK(sfSocketSelector_removeTcpListener(selector, listener));
sfSocketSelector_destroy(selector);
sfTcpSocket_destroy(client);
sfTcpListener_destroy(listener);
}
}