Commit Diff


commit - 7d390ed8992106bf3574f65f7fe6ca195c208d07
commit + f3fbde3134fce52d2d09c4ef1de3ba0372bbb171
blob - e2ed5cdc821597ddd5b60cc8982aa42cbd19135a
blob + 4c97b61a48c1358cebde4b6afd7a670cbb634740
--- include/procedures.h
+++ 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);
 
blob - b4e9accd02c29f4a684a0a82f6f087ee5cc71dad
blob + d3f9bba7c4011521fbfc70eb86e46f9789e75421
--- src/main.c
+++ src/main.c
@@ -444,16 +444,6 @@ void handlePacket (int client_fd, int length, int pack
 
 }
 
-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();
 }
 
blob - eee26a4879930f6a28e98d11aab4a2d9b8938fd0
blob + e341cd4362eb8db374d2b528086c6dee93389072
--- src/procedures.c
+++ src/procedures.c
@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <errno.h>
 
 #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
blob - 33d35baf4b86052e1919bf7e25e1598d66172036
blob + 24a023a828bdd5f9aa5ab7ce054a9e650b13ed0f
--- src/tools.c
+++ 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, 
     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, ssiz
     // 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;
     }