websocket stuff
This commit is contained in:
parent
046504a15e
commit
914e71b231
1 changed files with 46 additions and 13 deletions
|
@ -1,8 +1,39 @@
|
||||||
import Joi from "joi";
|
import Joi from "joi";
|
||||||
import { JSXElement } from "solid-js";
|
import { createEffect, createSignal, onCleanup } from "solid-js";
|
||||||
import { onCleanup } from "solid-js";
|
|
||||||
|
|
||||||
export function Websocket(): JSXElement {
|
export function Websocket() {
|
||||||
|
const socket = new WebSocket("ws://127.0.0.1:3030/websocket");
|
||||||
|
|
||||||
|
// Signals
|
||||||
|
let [connected, set_connected] = createSignal(false);
|
||||||
|
let [users_count, set_users_count] = createSignal(null);
|
||||||
|
let [games_count, set_games_count] = createSignal(null);
|
||||||
|
let [active_games, set_active_games] = createSignal(null);
|
||||||
|
let [user_update, set_user_update] = createSignal(null);
|
||||||
|
let [chat_update, set_chat_update] = createSignal(null);
|
||||||
|
let [judge_round, set_judge_round] = createSignal(null);
|
||||||
|
let [chat_message, set_chat_message] = createSignal(null);
|
||||||
|
let [game_meta, set_game_meta] = createSignal(null);
|
||||||
|
let [game_state, set_game_state] = createSignal(null);
|
||||||
|
let [card_packs_meta, set_card_packs_meta] = createSignal(null);
|
||||||
|
|
||||||
|
// Wipe everything on disconnect
|
||||||
|
createEffect(() => {
|
||||||
|
if (!connected()) {
|
||||||
|
set_users_count(null);
|
||||||
|
set_games_count(null);
|
||||||
|
set_active_games(null);
|
||||||
|
set_user_update(null);
|
||||||
|
set_chat_update(null);
|
||||||
|
set_judge_round(null);
|
||||||
|
set_chat_message(null);
|
||||||
|
set_game_meta(null);
|
||||||
|
set_game_state(null);
|
||||||
|
set_card_packs_meta(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Incoming message types
|
||||||
const UserUpdate = Joi.object({
|
const UserUpdate = Joi.object({
|
||||||
username: Joi.string(),
|
username: Joi.string(),
|
||||||
});
|
});
|
||||||
|
@ -33,8 +64,7 @@ export function Websocket(): JSXElement {
|
||||||
unofficial_meta: Joi.array(),
|
unofficial_meta: Joi.array(),
|
||||||
});
|
});
|
||||||
|
|
||||||
const socket = new WebSocket("ws://127.0.0.1:3030/websocket");
|
// Message handler
|
||||||
|
|
||||||
const handleMessage = (event: MessageEvent) => {
|
const handleMessage = (event: MessageEvent) => {
|
||||||
let json = JSON.parse(event.data);
|
let json = JSON.parse(event.data);
|
||||||
|
|
||||||
|
@ -76,21 +106,24 @@ export function Websocket(): JSXElement {
|
||||||
};
|
};
|
||||||
socket.addEventListener("message", handleMessage);
|
socket.addEventListener("message", handleMessage);
|
||||||
|
|
||||||
|
// Close handler
|
||||||
const handleClose = (event: CloseEvent) => {
|
const handleClose = (event: CloseEvent) => {
|
||||||
console.log(
|
set_connected(false);
|
||||||
"The connection has been closed successfully.",
|
console.log("Disconnected from websocket", event.code, event.reason);
|
||||||
event.code,
|
|
||||||
event.reason,
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.addEventListener("close", handleClose);
|
socket.addEventListener("close", handleClose);
|
||||||
|
|
||||||
|
// Open handler
|
||||||
|
const handleOpen = () => {
|
||||||
|
set_connected(true);
|
||||||
|
console.log("Connected to websocket");
|
||||||
|
};
|
||||||
|
socket.addEventListener("open", handleOpen);
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
onCleanup(() => {
|
onCleanup(() => {
|
||||||
socket.removeEventListener("message", handleMessage);
|
socket.removeEventListener("message", handleMessage);
|
||||||
socket.removeEventListener("close", handleClose);
|
socket.removeEventListener("close", handleClose);
|
||||||
socket.close();
|
socket.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
return <>SockEt</>;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue