feat(base): Fixed logic for websockets and added GameStateEvent. Might've caused instability on other feature branches!

This commit is contained in:
2025-11-26 10:57:51 +01:00
parent 52e5033afc
commit 22cd198ef6
14 changed files with 209 additions and 134 deletions

View File

@@ -39,4 +39,12 @@ function receiveHandEvent(eventData) {
handElement.html(newHtml);
}
onEvent("ReceivedHandEvent", receiveHandEvent)
function receiveGameStateChange(eventData) {
const content = eventData.content;
const title = eventData.title || 'Knockout Whist';
exchangeBody(content, title);
}
onEvent("ReceivedHandEvent", receiveHandEvent)
onEvent("GameStateChangeEvent", receiveGameStateChange)

View File

@@ -216,4 +216,7 @@ function navSpa(page, title) {
})
});
return false
}
}
globalThis.exchangeBody = exchangeBody;

View File

@@ -1,10 +1,7 @@
type EventHandler = (data: any) => any | Promise<any>;
// javascript
let ws = null; // will be created by connectWebSocket()
const pending: Map<string, any> = new Map(); // id -> { resolve, reject, timer }
const handlers: Map<string, EventHandler> = new Map(); // eventType -> handler(data) -> (value|Promise)
const pending = new Map(); // id -> { resolve, reject, timer }
const handlers = new Map(); // eventType -> handler(data) -> (value|Promise)
let timer = null;
@@ -39,6 +36,8 @@ function setupSocketHandlers(socket) {
return;
}
console.log("Received event:", eventType, "data:", data);
if (id && eventType) {
const handler = handlers.get(eventType);
const sendResponse = (result) => {
@@ -52,6 +51,7 @@ function setupSocketHandlers(socket) {
if (!handler) {
// no handler: respond with an error object in data so server can fail it
console.warn("No handler for event:", eventType);
sendResponse({error: "No handler for event: " + eventType});
return;
}
@@ -182,7 +182,7 @@ function sendEventAndWait(eventType, eventData, timeoutMs = 10000) {
return p;
}
function onEvent(eventType: string, handler: EventHandler) {
function onEvent(eventType, handler) {
handlers.set(eventType, handler);
}