Simple http server web

This commit is contained in:
2026-05-12 14:23:26 +02:00
parent 4b69a1240a
commit ba9f1da758
4 changed files with 67 additions and 3 deletions

View File

@@ -339,7 +339,11 @@ if(${PLATFORM} MATCHES "Web")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EM_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file ${CMAKE_SOURCE_DIR}/data@/data")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file \"${CMAKE_SOURCE_DIR}/data@/data\"")
set_target_properties(${PROJECT_NAME} PROPERTIES RULE_LAUNCH_LINK "set EMCC_WASM_OPT=0 &&")
# Remove -g (DWARF) to prevent wasm-opt post-link optimizations from running
string(REPLACE "-g" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
string(REPLACE "-g" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
target_compile_options(${PROJECT_NAME} PUBLIC
"-Os"
@@ -355,7 +359,7 @@ if(${PLATFORM} MATCHES "Web")
"-sFORCE_FILESYSTEM=1"
"-sLEGACY_GL_EMULATION=1"
"-sGL_UNSAFE_OPTS=0"
"-sEMULATE_FUNCTION_POINTER_CASTS=1"
"-sEMULATE_FUNCTION_POINTER_CASTS=0"
"-sALLOW_TABLE_GROWTH=1"
"-sEXPORTED_RUNTIME_METHODS=['FS','stringToUTF8','UTF8ToString','cwrap','ccall','HEAP8','HEAPU8','HEAP32','HEAPU32']"
"-sEXPORTED_FUNCTIONS=['_main']"
@@ -404,6 +408,7 @@ else()
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/index.html" $<TARGET_FILE_DIR:${PROJECT_NAME}>
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/misc/web/coi-serviceworker.js" $<TARGET_FILE_DIR:${PROJECT_NAME}>
)
endif()

View File

@@ -176,7 +176,7 @@ cmake --build .
2. Configure and build project:
```
mkdir build && cd build
cmake .. -B . -G Ninja "-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE="$env:EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
cmake --build . --target MinecraftPE
```
> [!Note]

View File

@@ -0,0 +1,57 @@
/* coi-serviceworker.js */
if (typeof window === "undefined") {
// Código del Worker: Intercepta peticiones
self.addEventListener("install", () => self.skipWaiting());
self.addEventListener("activate", (event) =>
event.waitUntil(self.clients.claim())
);
self.addEventListener("fetch", (event) => {
if (event.request.method !== "GET") return;
event.respondWith(
fetch(event.request)
.then((response) => {
if (response.status === 0) return response;
const newHeaders = new Headers(response.headers);
newHeaders.set("Cross-Origin-Embedder-Policy", "require-corp");
newHeaders.set("Cross-Origin-Opener-Policy", "same-origin");
newHeaders.set("Cross-Origin-Resource-Policy", "cross-origin");
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders,
});
})
.catch(() => fetch(event.request))
);
});
} else {
// Código de la Ventana: Registra el worker y recarga
(function () {
if ("serviceWorker" in navigator) {
navigator.serviceWorker
.register(window.document.currentScript.src)
.then((registration) => {
registration.addEventListener("updatefound", () => {
// Si hay una actualización, recargamos
location.reload();
});
if (registration.active && !navigator.serviceWorker.controller) {
// Si el worker está activo pero no controla la página aún, recargamos
location.reload();
}
});
}
// Si ya estamos aislados, perfecto
if (window.crossOriginIsolated) {
console.log("Aislamiento de origen ACTIVADO");
}
})();
}

View File

@@ -23,6 +23,8 @@
<canvas id="canvas"></canvas>
<script src="coi-serviceworker.js"></script>
<script>
var Module = {
canvas: document.getElementById('canvas'),