mirror of
https://github.com/visualboyadvance-m/visualboyadvance-m
synced 2025-10-05 23:52:49 +02:00
build: update Link SFML usage to SFML 3.x APIs
Make some changes for the SFML Network library for the 3.x APIs. Builds now, needs testing and review. Signed-off-by: Rafael Kitover <rkitover@gmail.com>
This commit is contained in:
@@ -71,7 +71,7 @@ find_package(PkgConfig)
|
||||
if(TRANSLATIONS_ONLY)
|
||||
set(ENABLE_LINK_DEFAULT OFF)
|
||||
else()
|
||||
find_package(SFML 2.4 COMPONENTS network system)
|
||||
find_package(SFML 3.0 COMPONENTS network system)
|
||||
set(ENABLE_LINK_DEFAULT OFF)
|
||||
if(SFML_FOUND)
|
||||
set(ENABLE_LINK_DEFAULT ON)
|
||||
@@ -79,11 +79,6 @@ else()
|
||||
endif()
|
||||
option(ENABLE_LINK "Enable GBA linking functionality (BROKEN)" ${ENABLE_LINK_DEFAULT})
|
||||
|
||||
if(ENABLE_LINK)
|
||||
# Always disable link for now as SFML 2 is broken and we don't have a replacement yet.
|
||||
set(ENABLE_LINK OFF CACHE BOOL "Enable GBA linking functionality (BROKEN)" FORCE)
|
||||
endif()
|
||||
|
||||
# FFMpeg
|
||||
set(FFMPEG_DEFAULT OFF)
|
||||
set(FFMPEG_COMPONENTS AVCODEC AVFORMAT SWSCALE AVUTIL SWRESAMPLE)
|
||||
|
@@ -41,6 +41,9 @@
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
#ifndef UPDATE_REG
|
||||
#undef UPDATE_REG
|
||||
#endif
|
||||
#define UPDATE_REG(address, value) WRITE16LE(((uint16_t*)&g_ioMem[address]), value)
|
||||
|
||||
static int vbaid = 0;
|
||||
@@ -270,7 +273,7 @@ class RFUServer {
|
||||
|
||||
public:
|
||||
sf::TcpSocket tcpsocket[5];
|
||||
sf::IpAddress udpaddr[5];
|
||||
sf::IpAddress udpaddr[5] = { sf::IpAddress{0}, sf::IpAddress{0}, sf::IpAddress{0}, sf::IpAddress{0}, sf::IpAddress{0} };
|
||||
RFUServer(void);
|
||||
sf::Packet& Serialize(sf::Packet& packet, int slave);
|
||||
void DeSerialize(sf::Packet& packet, int slave);
|
||||
@@ -283,7 +286,7 @@ class RFUClient {
|
||||
int numbytes;
|
||||
|
||||
public:
|
||||
sf::IpAddress serveraddr;
|
||||
sf::IpAddress serveraddr{0};
|
||||
unsigned short serverport;
|
||||
bool transferring;
|
||||
RFUClient(void);
|
||||
@@ -392,7 +395,7 @@ enum {
|
||||
typedef struct {
|
||||
sf::TcpSocket tcpsocket;
|
||||
sf::TcpListener tcplistener;
|
||||
int numslaves;
|
||||
uint16_t numslaves;
|
||||
int connectedSlaves;
|
||||
int type;
|
||||
bool server;
|
||||
@@ -412,7 +415,7 @@ class CableServer {
|
||||
|
||||
public:
|
||||
sf::TcpSocket tcpsocket[4];
|
||||
sf::IpAddress udpaddr[4];
|
||||
sf::IpAddress udpaddr[4] = { sf::IpAddress{0}, sf::IpAddress{0}, sf::IpAddress{0}, sf::IpAddress{0} };
|
||||
CableServer(void);
|
||||
void Send(void);
|
||||
void Recv(void);
|
||||
@@ -430,7 +433,7 @@ class CableClient {
|
||||
int numbytes;
|
||||
|
||||
public:
|
||||
sf::IpAddress serveraddr;
|
||||
sf::IpAddress serveraddr{0};
|
||||
unsigned short serverport;
|
||||
bool transferring;
|
||||
CableClient(void);
|
||||
@@ -531,7 +534,10 @@ void GetLinkServerHost(char* const host, size_t size)
|
||||
strncpy(host, joybusHostAddr.toString().c_str(), size);
|
||||
else if (lanlink.server) {
|
||||
if (IP_LINK_BIND_ADDRESS == "*")
|
||||
strncpy(host, sf::IpAddress::getLocalAddress().toString().c_str(), size);
|
||||
if (sf::IpAddress::getLocalAddress())
|
||||
strncpy(host, sf::IpAddress::getLocalAddress().value().toString().c_str(), size);
|
||||
else
|
||||
throw std::runtime_error("link: Cannot get local address.");
|
||||
else
|
||||
strncpy(host, IP_LINK_BIND_ADDRESS.c_str(), size);
|
||||
}
|
||||
@@ -541,12 +547,16 @@ void GetLinkServerHost(char* const host, size_t size)
|
||||
|
||||
bool SetLinkServerHost(const char* host)
|
||||
{
|
||||
sf::IpAddress addr = sf::IpAddress(host);
|
||||
sf::IpAddress addr{0};
|
||||
|
||||
auto resolved = sf::IpAddress::resolve(host);
|
||||
if (!resolved)
|
||||
return false;
|
||||
addr = resolved.value();
|
||||
lc.serveraddr = addr;
|
||||
joybusHostAddr = addr;
|
||||
|
||||
return addr != sf::IpAddress::None;
|
||||
return true;
|
||||
}
|
||||
|
||||
int GetLinkPlayerId()
|
||||
@@ -1057,9 +1067,17 @@ static ConnectionState InitSocket()
|
||||
|
||||
// too bad Listen() doesn't take an address as well
|
||||
// then again, old code used INADDR_ANY anyway
|
||||
sf::IpAddress bind_ip = IP_LINK_BIND_ADDRESS == "*" ? sf::IpAddress::Any : IP_LINK_BIND_ADDRESS;
|
||||
sf::IpAddress bind_ip{0};
|
||||
|
||||
if (lanlink.tcplistener.listen(IP_LINK_PORT, bind_ip) == sf::Socket::Error)
|
||||
if (IP_LINK_BIND_ADDRESS != "*") {
|
||||
auto resolved = sf::IpAddress::resolve(IP_LINK_BIND_ADDRESS);
|
||||
if (resolved)
|
||||
bind_ip = resolved.value();
|
||||
else
|
||||
return LINK_ERROR;
|
||||
}
|
||||
|
||||
if (lanlink.tcplistener.listen(IP_LINK_PORT, bind_ip) == sf::Socket::Status::Error)
|
||||
// Note: old code closed socket & retried once on bind failure
|
||||
return LINK_ERROR; // FIXME: error code?
|
||||
else
|
||||
@@ -1067,17 +1085,13 @@ static ConnectionState InitSocket()
|
||||
} else {
|
||||
lc.serverport = IP_LINK_PORT;
|
||||
|
||||
if (lc.serveraddr == sf::IpAddress::None) {
|
||||
return LINK_ERROR;
|
||||
} else {
|
||||
lanlink.tcpsocket.setBlocking(false);
|
||||
sf::Socket::Status status = lanlink.tcpsocket.connect(lc.serveraddr, lc.serverport);
|
||||
lanlink.tcpsocket.setBlocking(false);
|
||||
sf::Socket::Status status = lanlink.tcpsocket.connect(lc.serveraddr, lc.serverport);
|
||||
|
||||
if (status == sf::Socket::Error || status == sf::Socket::Disconnected)
|
||||
return LINK_ERROR;
|
||||
else
|
||||
return LINK_NEEDS_UPDATE;
|
||||
}
|
||||
if (status == sf::Socket::Status::Error || status == sf::Socket::Status::Disconnected)
|
||||
return LINK_ERROR;
|
||||
else
|
||||
return LINK_NEEDS_UPDATE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1090,11 +1104,11 @@ static ConnectionState ConnectUpdateSocket(char* const message, size_t size)
|
||||
fdset.add(lanlink.tcplistener);
|
||||
|
||||
if (fdset.wait(sf::milliseconds(150))) {
|
||||
int nextSlave = lanlink.connectedSlaves + 1;
|
||||
uint16_t nextSlave = lanlink.connectedSlaves + 1;
|
||||
|
||||
sf::Socket::Status st = lanlink.tcplistener.accept(ls.tcpsocket[nextSlave]);
|
||||
|
||||
if (st == sf::Socket::Error) {
|
||||
if (st == sf::Socket::Status::Error) {
|
||||
for (int j = 1; j < nextSlave; j++)
|
||||
ls.tcpsocket[j].disconnect();
|
||||
|
||||
@@ -1102,8 +1116,7 @@ static ConnectionState ConnectUpdateSocket(char* const message, size_t size)
|
||||
newState = LINK_ERROR;
|
||||
} else {
|
||||
sf::Packet packet;
|
||||
packet << static_cast<sf::Uint16>(nextSlave)
|
||||
<< static_cast<sf::Uint16>(lanlink.numslaves);
|
||||
packet << nextSlave << lanlink.numslaves;
|
||||
|
||||
ls.tcpsocket[nextSlave].send(packet);
|
||||
|
||||
@@ -1129,13 +1142,13 @@ static ConnectionState ConnectUpdateSocket(char* const message, size_t size)
|
||||
sf::Packet packet;
|
||||
sf::Socket::Status status = lanlink.tcpsocket.receive(packet);
|
||||
|
||||
if (status == sf::Socket::Error || status == sf::Socket::Disconnected) {
|
||||
if (status == sf::Socket::Status::Error || status == sf::Socket::Status::Disconnected) {
|
||||
snprintf(message, size, N_("Network error."));
|
||||
newState = LINK_ERROR;
|
||||
} else if (status == sf::Socket::Done) {
|
||||
} else if (status == sf::Socket::Status::Done) {
|
||||
|
||||
if (linkid == 0) {
|
||||
sf::Uint16 receivedId, receivedSlaves;
|
||||
uint16_t receivedId, receivedSlaves;
|
||||
packet >> receivedId >> receivedSlaves;
|
||||
|
||||
if (packet) {
|
||||
@@ -1540,7 +1553,7 @@ void RFUServer::Recv(void)
|
||||
sf::Packet packet;
|
||||
tcpsocket[i + 1].setBlocking(false);
|
||||
sf::Socket::Status status = tcpsocket[i + 1].receive(packet);
|
||||
if (status == sf::Socket::Disconnected) {
|
||||
if (status == sf::Socket::Status::Disconnected) {
|
||||
char message[30];
|
||||
sprintf(message, _("Player %d disconnected."), i + 1);
|
||||
systemScreenMessage(message);
|
||||
@@ -1650,7 +1663,7 @@ void RFUClient::Recv(void)
|
||||
}
|
||||
sf::Packet packet;
|
||||
sf::Socket::Status status = lanlink.tcpsocket.receive(packet);
|
||||
if (status == sf::Socket::Disconnected) {
|
||||
if (status == sf::Socket::Status::Disconnected) {
|
||||
systemScreenMessage(_("Server disconnected."));
|
||||
CloseLink();
|
||||
return;
|
||||
@@ -1671,7 +1684,7 @@ static ConnectionState ConnectUpdateRFUSocket(char* const message, size_t size)
|
||||
|
||||
sf::Socket::Status st = lanlink.tcplistener.accept(rfu_server.tcpsocket[nextSlave]);
|
||||
|
||||
if (st == sf::Socket::Error) {
|
||||
if (st == sf::Socket::Status::Error) {
|
||||
for (int j = 1; j < nextSlave; j++)
|
||||
rfu_server.tcpsocket[j].disconnect();
|
||||
|
||||
@@ -1679,8 +1692,7 @@ static ConnectionState ConnectUpdateRFUSocket(char* const message, size_t size)
|
||||
newState = LINK_ERROR;
|
||||
} else {
|
||||
sf::Packet packet;
|
||||
packet << static_cast<sf::Uint16>(nextSlave)
|
||||
<< static_cast<sf::Uint16>(lanlink.numslaves);
|
||||
packet << nextSlave << lanlink.numslaves;
|
||||
|
||||
rfu_server.tcpsocket[nextSlave].send(packet);
|
||||
|
||||
@@ -1707,13 +1719,13 @@ static ConnectionState ConnectUpdateRFUSocket(char* const message, size_t size)
|
||||
lanlink.tcpsocket.setBlocking(false);
|
||||
sf::Socket::Status status = lanlink.tcpsocket.receive(packet);
|
||||
|
||||
if (status == sf::Socket::Error || status == sf::Socket::Disconnected) {
|
||||
if (status == sf::Socket::Status::Error || status == sf::Socket::Status::Disconnected) {
|
||||
snprintf(message, size, N_("Network error."));
|
||||
newState = LINK_ERROR;
|
||||
} else if (status == sf::Socket::Done) {
|
||||
} else if (status == sf::Socket::Status::Done) {
|
||||
|
||||
if (linkid == 0) {
|
||||
sf::Uint16 receivedId, receivedSlaves;
|
||||
uint16_t receivedId, receivedSlaves;
|
||||
packet >> receivedId >> receivedSlaves;
|
||||
|
||||
if (packet) {
|
||||
|
@@ -8,10 +8,7 @@
|
||||
|
||||
GBASockClient::GBASockClient(sf::IpAddress _server_addr)
|
||||
{
|
||||
if (_server_addr == sf::IpAddress::None)
|
||||
server_addr = sf::IpAddress::getPublicAddress();
|
||||
else
|
||||
server_addr = _server_addr;
|
||||
server_addr = _server_addr;
|
||||
|
||||
client.connect(server_addr, 0xd6ba);
|
||||
client.setBlocking(false);
|
||||
@@ -53,7 +50,7 @@ char GBASockClient::ReceiveCmd(char* data_in, bool block)
|
||||
Selector.add(client);
|
||||
Selector.wait(sf::seconds(6));
|
||||
}
|
||||
if (client.receive(data_in, 5, num_received) == sf::Socket::Disconnected)
|
||||
if (client.receive(data_in, 5, num_received) == sf::Socket::Status::Disconnected)
|
||||
Disconnect();
|
||||
|
||||
return data_in[0];
|
||||
@@ -67,7 +64,7 @@ void GBASockClient::ReceiveClock(bool block)
|
||||
|
||||
char sync_ticks[4] = { 0, 0, 0, 0 };
|
||||
std::size_t num_received = 0;
|
||||
if (clock_client.receive(sync_ticks, 4, num_received) == sf::Socket::Disconnected)
|
||||
if (clock_client.receive(sync_ticks, 4, num_received) == sf::Socket::Status::Disconnected)
|
||||
Disconnect();
|
||||
|
||||
if (num_received == 4) {
|
||||
|
@@ -24,7 +24,7 @@ public:
|
||||
bool IsDisconnected();
|
||||
|
||||
private:
|
||||
sf::IpAddress server_addr;
|
||||
sf::IpAddress server_addr{0};
|
||||
sf::TcpSocket client;
|
||||
sf::TcpSocket clock_client;
|
||||
|
||||
|
Reference in New Issue
Block a user