diff --git a/include/procedures.h b/include/procedures.h index e2ed5cd..4c97b61 100644 --- a/include/procedures.h +++ b/include/procedures.h @@ -15,6 +15,7 @@ void resetPlayerData (PlayerData *player); int reservePlayerData (int client_fd, uint8_t *uuid, char* name); int getPlayerData (int client_fd, PlayerData **output); void handlePlayerDisconnect (int client_fd); +void disconnectClient (int *client_fd, int cause); int givePlayerItem (PlayerData *player, uint16_t item, uint8_t count); void spawnPlayer (PlayerData *player); diff --git a/src/main.c b/src/main.c index b4e9acc..d3f9bba 100644 --- a/src/main.c +++ b/src/main.c @@ -444,16 +444,6 @@ void handlePacket (int client_fd, int length, int packet_id, int state) { } -void disconnectClient (int *client_fd, int cause) { - if (*client_fd == -1) return; - client_count --; - setClientState(*client_fd, STATE_NONE); - handlePlayerDisconnect(*client_fd); - close(*client_fd); - *client_fd = -1; - printf("Disconnected client %d, cause: %d, errno: %d\n\n", *client_fd, cause, errno); -} - int main () { // Hash the seeds to ensure they're random enough @@ -655,6 +645,7 @@ void wifi_init () { esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_set_config(WIFI_IF_STA, &wifi_config); + esp_wifi_set_ps(WIFI_PS_NONE); esp_wifi_start(); } diff --git a/src/procedures.c b/src/procedures.c index eee26a4..e341cd4 100644 --- a/src/procedures.c +++ b/src/procedures.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "globals.h" #include "tools.h" @@ -145,6 +146,16 @@ void handlePlayerDisconnect (int client_fd) { } } +void disconnectClient (int *client_fd, int cause) { + if (*client_fd == -1) return; + client_count --; + setClientState(*client_fd, STATE_NONE); + handlePlayerDisconnect(*client_fd); + close(*client_fd); + *client_fd = -1; + printf("Disconnected client %d, cause: %d, errno: %d\n\n", *client_fd, cause, errno); +} + uint8_t serverSlotToClientSlot (int window_id, uint8_t slot) { if (window_id == 0) { // player inventory diff --git a/src/tools.c b/src/tools.c index 33d35ba..24a023a 100644 --- a/src/tools.c +++ b/src/tools.c @@ -17,6 +17,7 @@ #include "globals.h" #include "varnum.h" +#include "procedures.h" #include "tools.h" static uint64_t htonll (uint64_t value) { @@ -57,7 +58,10 @@ ssize_t recv_all (int client_fd, void *buf, size_t n, uint8_t require_first) { if (r < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) { // handle network timeout - if (get_program_time() - last_update_time > NETWORK_TIMEOUT_TIME) return -1; + if (get_program_time() - last_update_time > NETWORK_TIMEOUT_TIME) { + disconnectClient(&client_fd, -1); + return -1; + } task_yield(); continue; } else { @@ -101,7 +105,10 @@ ssize_t send_all (int client_fd, const void *buf, ssize_t len) { // not yet ready to transmit, try again if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) { // handle network timeout - if (get_program_time() - last_update_time > NETWORK_TIMEOUT_TIME) return -1; + if (get_program_time() - last_update_time > NETWORK_TIMEOUT_TIME) { + disconnectClient(&client_fd, -2); + return -1; + } task_yield(); continue; }