From 5d93db81d256d495e9e3bc4b54bdf805c072b6dd Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 28 May 2021 17:54:57 +1000 Subject: [PATCH] Fix multiplayer not working at all with old emscripten --- misc/buildbot.sh | 2 +- src/Platform_Web.c | 15 +++++++++++---- src/interop_web.js | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/misc/buildbot.sh b/misc/buildbot.sh index a7c11da01..6b716ce5e 100644 --- a/misc/buildbot.sh +++ b/misc/buildbot.sh @@ -90,7 +90,7 @@ WEB_CC="/home/buildbot/emsdk/emscripten/1.38.31/emcc" build_web() { echo "Building web.." rm cc.js - $WEB_CC *.c -O1 -o cc.js -s WASM=0 -s LEGACY_VM_SUPPORT=1 -s ALLOW_MEMORY_GROWTH=1 -s ABORTING_MALLOC=0 --preload-file texpacks/default.zip -w + $WEB_CC *.c -O1 -o cc.js --js-library interop_web.js -s WASM=0 -s LEGACY_VM_SUPPORT=1 -s ALLOW_MEMORY_GROWTH=1 -s ABORTING_MALLOC=0 --preload-file texpacks/default.zip -w # so game loads textures from classicube.net/static/default.zip sed -i 's#cc.data#/static/default.zip#g' cc.js # fix mouse wheel scrolling page not being properly prevented diff --git a/src/Platform_Web.c b/src/Platform_Web.c index 8b9edc408..bc91a0ed3 100644 --- a/src/Platform_Web.c +++ b/src/Platform_Web.c @@ -22,10 +22,17 @@ #include #include +/* Unfortunately, errno constants are different in some older emscripten versions */ +/* (linux errno compared to WASI errno) */ +/* So just use the same numbers as interop_web.js (otherwise connecting always fail) */ +#define _EINPROGRESS 26 +#define _EAGAIN 6 /* same as EWOULDBLOCK */ +#define _EHOSTUNREACH 23 + const cc_result ReturnCode_FileShareViolation = 1000000000; /* TODO: not used apparently */ const cc_result ReturnCode_FileNotFound = ENOENT; -const cc_result ReturnCode_SocketInProgess = EINPROGRESS; -const cc_result ReturnCode_SocketWouldBlock = EWOULDBLOCK; +const cc_result ReturnCode_SocketInProgess = _EINPROGRESS; +const cc_result ReturnCode_SocketWouldBlock = _EAGAIN; const cc_result ReturnCode_DirectoryExists = EEXIST; #include #include "Chat.h" @@ -288,7 +295,7 @@ cc_result Socket_Connect(cc_socket s, const cc_string* ip, int port) { res = -interop_SocketConnect(s, addr, port); /* error returned when invalid address provided */ - if (res == EHOSTUNREACH) return ERR_INVALID_ARGUMENT; + if (res == _EHOSTUNREACH) return ERR_INVALID_ARGUMENT; return res; } @@ -305,7 +312,7 @@ cc_result Socket_Read(cc_socket s, cc_uint8* data, cc_uint32 count, cc_uint32* m data += res; count -= res; } else { /* EAGAIN when no data available */ - if (res == -EAGAIN) break; + if (res == -_EAGAIN) break; return -res; } } diff --git a/src/interop_web.js b/src/interop_web.js index 61b14f2fe..0ab1e0f99 100644 --- a/src/interop_web.js +++ b/src/interop_web.js @@ -125,7 +125,7 @@ mergeInto(LibraryManager.library, { }, interop_InitSockets: function() { window.SOCKETS = { - EBADF:-8,EISCONN:-30,ENOTCONN:-53,EAGAIN:-6,EWOULDBLOCK:-6,EHOSTUNREACH:-23,EINPROGRESS:-26,EALREADY:-7,ECONNRESET:-15,EINVAL:-28,ECONNREFUSED:-14, + EBADF:-8,EISCONN:-30,ENOTCONN:-53,EAGAIN:-6,EHOSTUNREACH:-23,EINPROGRESS:-26,EALREADY:-7,ECONNRESET:-15,EINVAL:-28,ECONNREFUSED:-14, sockets: [], createSocket:function() {