Adding LinkWireless::isServerClosed

This commit is contained in:
Rodrigo Alfonso
2025-01-01 20:21:11 -03:00
parent 9af5aa2e1a
commit 9e77e1010e
5 changed files with 22 additions and 8 deletions

View File

@@ -250,6 +250,7 @@ You can also change these compile-time constants:
| `getState()` | **LinkWireless::State** | Returns the current state (one of `LinkWireless::State::NEEDS_RESET`, `LinkWireless::State::AUTHENTICATED`, `LinkWireless::State::SEARCHING`, `LinkWireless::State::SERVING`, `LinkWireless::State::CONNECTING`, or `LinkWireless::State::CONNECTED`). |
| `isConnected()` | **bool** | Returns `true` if the player count is higher than `1`. |
| `isSessionActive()` | **bool** | Returns `true` if the state is `SERVING` or `CONNECTED`. |
| `isServerClosed()` | **bool** | Returns `true` if the server was closed with `closeServer()`. |
| `playerCount()` | **u8** _(1~5)_ | Returns the number of connected players. |
| `currentPlayerId()` | **u8** _(0~4)_ | Returns the current player ID. |
| `getLastError([clear])` | **LinkWireless::Error** | If one of the other methods returns `false`, you can inspect this to know the cause. After this call, the last error is cleared if `clear` is `true` (default behavior). |

View File

@@ -353,24 +353,27 @@ void messageLoop() {
if (didPress(KEY_UP, switching)) {
#ifdef PROFILING_ENABLED
// In the profiler ROM, pressing UP will update the broadcast data
if (linkWireless->getState() == LinkWireless::State::SERVING) {
if (linkWireless->getState() == LinkWireless::State::SERVING &&
!(keys & KEY_START)) {
linkWireless->serve("LinkWireless",
("N = " + std::to_string(counters[0])).c_str(),
counters[0]);
if (linkWireless->getLastError() ==
LinkWireless::Error::BUSY_TRY_AGAIN) {
log("Busy!");
log("Busy! Can't update.");
waitFor(KEY_DOWN);
}
}
// In the profiler ROM, pressing START+UP will close the server
if ((keys & KEY_START) &&
linkWireless->getState() == LinkWireless::State::SERVING) {
linkWireless->closeServer();
if (linkWireless->getLastError() ==
LinkWireless::Error::BUSY_TRY_AGAIN) {
log("Busy!");
if (linkWireless->getState() == LinkWireless::State::SERVING &&
!linkWireless->isServerClosed() && (keys & KEY_START)) {
if (linkWireless->closeServer()) {
log("Server closed!");
waitFor(KEY_DOWN);
} else if (linkWireless->getLastError() ==
LinkWireless::Error::BUSY_TRY_AGAIN) {
log("Busy! Can't close.");
waitFor(KEY_DOWN);
}
}

View File

@@ -733,6 +733,11 @@ class LinkWireless {
return state == SERVING || state == CONNECTED;
}
/**
* @brief Returns `true` if the server was closed with `closeServer()`.
*/
[[nodiscard]] bool isServerClosed() { return sessionState.serverClosed; }
/**
* @brief Returns the number of connected players.
*/

View File

@@ -128,6 +128,10 @@ bool C_LinkWireless_isSessionActive(C_LinkWirelessHandle handle) {
return static_cast<LinkWireless*>(handle)->isSessionActive();
}
bool C_LinkWireless_isServerClosed(C_LinkWirelessHandle handle) {
return static_cast<LinkWireless*>(handle)->isServerClosed();
}
u8 C_LinkWireless_playerCount(C_LinkWirelessHandle handle) {
return static_cast<LinkWireless*>(handle)->playerCount();
}

View File

@@ -111,6 +111,7 @@ bool C_LinkWireless_receive(C_LinkWirelessHandle handle,
C_LinkWireless_State C_LinkWireless_getState(C_LinkWirelessHandle handle);
bool C_LinkWireless_isConnected(C_LinkWirelessHandle handle);
bool C_LinkWireless_isSessionActive(C_LinkWirelessHandle handle);
bool C_LinkWireless_isServerClosed(C_LinkWirelessHandle handle);
u8 C_LinkWireless_playerCount(C_LinkWirelessHandle handle);
u8 C_LinkWireless_currentPlayerId(C_LinkWirelessHandle handle);