Using getState()

This commit is contained in:
Rodrigo Alfonso
2025-01-30 05:51:59 -03:00
parent 2c1e370bbe
commit 137df23a74

View File

@@ -145,11 +145,11 @@ LINK_VERSION_TAG LINK_WIRELESS_VERSION = "vLinkWireless/v8.0.0";
#define LINK_WIRELESS_DEFAULT_INTERVAL 50
#define LINK_WIRELESS_DEFAULT_SEND_TIMER_ID 3
#define LINK_WIRELESS_RESET_IF_NEEDED \
if (!isEnabled) \
return false; \
if (linkRawWireless.getState() == State::NEEDS_RESET) \
if (!reset()) \
#define LINK_WIRELESS_RESET_IF_NEEDED \
if (!isEnabled) \
return false; \
if (getState() == State::NEEDS_RESET) \
if (!reset()) \
return false;
/**
@@ -347,8 +347,7 @@ class LinkWireless {
const char* userName = "",
u16 gameId = LINK_WIRELESS_MAX_GAME_ID) {
LINK_WIRELESS_RESET_IF_NEEDED
if (linkRawWireless.getState() != State::AUTHENTICATED &&
linkRawWireless.getState() != State::SERVING)
if (getState() != State::AUTHENTICATED && getState() != State::SERVING)
return badRequest(Error::WRONG_STATE);
if (Link::strlen(gameName) > LINK_WIRELESS_MAX_GAME_NAME_LENGTH)
return badRequest(Error::GAME_NAME_TOO_LONG);
@@ -359,14 +358,14 @@ class LinkWireless {
if (isAsyncCommandActive())
return badRequest(Error::BUSY_TRY_AGAIN);
if (linkRawWireless.getState() != State::SERVING) {
if (getState() != State::SERVING) {
if (!setup(config.maxPlayers))
return abort(Error::COMMAND_FAILED);
}
bool success = linkRawWireless.broadcast(gameName, userName, gameId, false);
if (linkRawWireless.getState() != State::SERVING)
if (getState() != State::SERVING)
success = success && linkRawWireless.startHost(false);
if (!success)
@@ -387,7 +386,7 @@ class LinkWireless {
*/
bool closeServer() {
LINK_WIRELESS_RESET_IF_NEEDED
if (linkRawWireless.getState() != State::SERVING ||
if (getState() != State::SERVING ||
linkRawWireless.sessionState.isServerClosed)
return badRequest(Error::WRONG_STATE);
@@ -423,7 +422,7 @@ class LinkWireless {
if (!isSessionActive())
return badRequest(Error::WRONG_STATE);
if (linkRawWireless.getState() == LinkRawWireless::State::SERVING) {
if (getState() == LinkRawWireless::State::SERVING) {
for (u32 i = 0; i < LINK_WIRELESS_MAX_PLAYERS; i++)
response.signalLevels[i] = sessionState.signalLevel.level[i];
return true;
@@ -483,7 +482,7 @@ class LinkWireless {
*/
bool getServersAsyncStart() {
LINK_WIRELESS_RESET_IF_NEEDED
if (linkRawWireless.getState() != State::AUTHENTICATED)
if (getState() != State::AUTHENTICATED)
return badRequest(Error::WRONG_STATE);
bool success = linkRawWireless.broadcastReadStart();
@@ -501,7 +500,7 @@ class LinkWireless {
*/
bool getServersAsyncEnd(Server servers[]) {
LINK_WIRELESS_RESET_IF_NEEDED
if (linkRawWireless.getState() != State::SEARCHING)
if (getState() != State::SEARCHING)
return badRequest(Error::WRONG_STATE);
LinkRawWireless::BroadcastReadPollResponse response;
@@ -540,7 +539,7 @@ class LinkWireless {
*/
bool connect(u16 serverId) {
LINK_WIRELESS_RESET_IF_NEEDED
if (linkRawWireless.getState() != State::AUTHENTICATED)
if (getState() != State::AUTHENTICATED)
return badRequest(Error::WRONG_STATE);
bool success = linkRawWireless.connect(serverId);
@@ -559,7 +558,7 @@ class LinkWireless {
*/
bool keepConnecting() {
LINK_WIRELESS_RESET_IF_NEEDED
if (linkRawWireless.getState() != State::CONNECTING)
if (getState() != State::CONNECTING)
return badRequest(Error::WRONG_STATE);
LinkRawWireless::ConnectionStatus response;
@@ -638,7 +637,9 @@ class LinkWireless {
* @brief Returns the current state.
* @return One of the enum values from `State`.
*/
[[nodiscard]] State getState() { return linkRawWireless.getState(); }
[[nodiscard]] LINK_INLINE State getState() {
return linkRawWireless.getState();
}
/**
* @brief Returns `true` if the player count is higher than `1`.
@@ -651,8 +652,7 @@ class LinkWireless {
* @brief Returns `true` if the state is `SERVING` or `CONNECTED`.
*/
[[nodiscard]] bool isSessionActive() {
return linkRawWireless.getState() == State::SERVING ||
linkRawWireless.getState() == State::CONNECTED;
return getState() == State::SERVING || getState() == State::CONNECTED;
}
/**
@@ -975,7 +975,7 @@ class LinkWireless {
#ifndef LINK_WIRELESS_TWO_PLAYERS_ONLY
void forwardMessageIfNeeded(Message& message) {
if (linkRawWireless.getState() == State::SERVING && config.forwarding &&
if (getState() == State::SERVING && config.forwarding &&
linkRawWireless.sessionState.playerCount > 2)
send(message.data, message.playerId);
}
@@ -1008,6 +1008,8 @@ class LinkWireless {
: Error::COMMAND_FAILED);
}
auto state = getState();
switch (commandResult->commandId) {
case LinkRawWireless::COMMAND_SIGNAL_LEVEL: {
// SignalLevel (end)
@@ -1031,11 +1033,11 @@ class LinkWireless {
// SendData (end)
#ifdef LINK_WIRELESS_USE_SEND_RECEIVE_LATCH
if (linkRawWireless.getState() == State::CONNECTED)
if (state == State::CONNECTED)
sessionState.shouldWaitForServer = true;
sessionState.sendReceiveLatch = !sessionState.sendReceiveLatch;
#else
if (linkRawWireless.getState() == State::SERVING) {
if (state == State::SERVING) {
// ReceiveData (start)
sendCommandAsync(LinkRawWireless::COMMAND_RECEIVE_DATA);
}
@@ -1064,7 +1066,7 @@ class LinkWireless {
addIncomingMessagesFromData(commandResult);
#ifndef LINK_WIRELESS_USE_SEND_RECEIVE_LATCH
if (linkRawWireless.getState() == State::CONNECTED) {
if (state == State::CONNECTED) {
// SendData (start)
sendPendingData();
}
@@ -1078,18 +1080,16 @@ class LinkWireless {
}
LINK_INLINE void checkConnectionsOrTransferData() { // (irq only)
if (linkRawWireless.getState() == State::SERVING &&
!sessionState.signalLevelCalled) {
if (getState() == State::SERVING && !sessionState.signalLevelCalled) {
// SignalLevel (start)
if (sendCommandAsync(LinkRawWireless::COMMAND_SIGNAL_LEVEL))
sessionState.signalLevelCalled = true;
} else if (linkRawWireless.getState() == State::CONNECTED ||
isConnected()) {
} else if (getState() == State::CONNECTED || isConnected()) {
#ifdef LINK_WIRELESS_USE_SEND_RECEIVE_LATCH
bool shouldReceive =
!sessionState.sendReceiveLatch || sessionState.shouldWaitForServer;
#else
bool shouldReceive = linkRawWireless.getState() == State::CONNECTED;
bool shouldReceive = getState() == State::CONNECTED;
#endif
if (shouldReceive) {
@@ -1164,7 +1164,7 @@ class LinkWireless {
#endif
u32 checksum = header.dataChecksum;
bool isPing = !config.retransmission && isConfirmation;
bool isServer = linkRawWireless.getState() == State::SERVING;
bool isServer = getState() == State::SERVING;
if (checksum != buildChecksum(data))
continue;
@@ -1210,7 +1210,7 @@ class LinkWireless {
}
bool acceptMessage(Message& message) { // (irq only)
if (linkRawWireless.getState() == State::SERVING) {
if (getState() == State::SERVING) {
u32 expectedPacketId =
(sessionState.lastPacketIdFromClients[message.playerId] + 1) %
MAX_PACKET_IDS;
@@ -1254,7 +1254,7 @@ class LinkWireless {
}
void addConfirmations() { // (irq only)
if (linkRawWireless.getState() == State::SERVING) {
if (getState() == State::SERVING) {
#ifndef LINK_WIRELESS_TWO_PLAYERS_ONLY
if (config.maxPlayers > 2 &&
(sessionState.lastPacketIdFromClients[1] == 0 ||
@@ -1287,7 +1287,7 @@ class LinkWireless {
u8 remotePlayerId) { // (irq only)
u32 confirmationData = (confirmation.packetId << 16) | confirmation.data;
if (linkRawWireless.getState() == State::CONNECTED) {
if (getState() == State::CONNECTED) {
if (remotePlayerId == 0 &&
!sessionState.didReceiveLastPacketIdFromServer) {
sessionState.lastPacketIdFromServer = confirmationData;
@@ -1354,7 +1354,7 @@ class LinkWireless {
#ifdef LINK_WIRELESS_TWO_PLAYERS_ONLY
header.quickData = QUICK_SEND;
#else
if (linkRawWireless.getState() == State::SERVING) {
if (getState() == State::SERVING) {
header.clientCount =
linkRawWireless.sessionState.playerCount - LINK_WIRELESS_MIN_PLAYERS;
} else {
@@ -1388,9 +1388,11 @@ class LinkWireless {
}
bool checkRemoteTimeouts() { // (irq only)
for (u32 i = 0; i < linkRawWireless.sessionState.playerCount; i++) {
if ((i == 0 || linkRawWireless.getState() == State::SERVING) &&
sessionState.msgTimeouts[i] > config.timeout)
if (getState() == State::CONNECTED)
return false;
for (u32 i = 1; i < linkRawWireless.sessionState.playerCount; i++) {
if (sessionState.msgTimeouts[i] > config.timeout)
return false;
}
@@ -1399,7 +1401,7 @@ class LinkWireless {
#endif
u32 getDeviceTransferLength() { // (irq only)
return linkRawWireless.getState() == State::SERVING
return getState() == State::SERVING
? LINK_WIRELESS_MAX_SERVER_TRANSFER_LENGTH
: LINK_WIRELESS_MAX_CLIENT_TRANSFER_LENGTH;
}