Files
front/netcode/index.ts
T
2024-05-29 16:46:58 +02:00

84 lines
2.6 KiB
TypeScript

import { Lobby } from "./model/Lobby";
import type { ServerMessage } from "./interfaces/generic";
import { ServerQueryType, ClientQueryType } from "./interfaces/generic";
import { Query } from "./Query";
let socket: WebSocket
export function setupWebsocket(): Promise<WebSocket> {
return new Promise<WebSocket>((resolve, reject) => {
if (socket) {
if (!socket.OPEN) {
return reject("socket closed")
}
return resolve(socket);
}
const config = useRuntimeConfig();
socket = new WebSocket(config.public.websocketEndpoint);
socket.onopen = function (e) {
if (socket.readyState == 1) {
resolve(socket);
}
console.log("[open] Connection established");
};
socket.onclose = function (event) {
if (event.wasClean) {
console.warn(
`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`
);
} else {
// e.g. server process killed or network down
// event.code is usually 1006 in this case
console.error("[close] Connection died");
}
};
socket.onerror = function (error) {
console.error(error);
};
socket.onmessage = function (ev: MessageEvent) {
const data = ev.data as ServerMessage
const answer_to = ev.data.answer_to
if (!answer_to) { return }
const callback = Query.callbacks.get(answer_to)
if (!callback) { return }
if (data.type == ServerQueryType.ERROR) {
callback.reject()
} else {
callback.resolve(ev.data)
}
}
});
}
export async function login() {
const socket = await setupWebsocket()
const query = new Query(socket, {
type: ClientQueryType.LOGIN,
method: "anon",
args: { code: "" },
target: ""
})
const loginInfo = await query.send()
// return new Promise<Lobby>((resolve, reject) => {
// const handler = ((e: MessageEvent) => {
// const data = e.data as ServerMessage
// if (data.type == ServerQueryType.CREATE) {
// if (data.args.objectType == "Lobby") {
// const lobby = new Lobby(socket, data.args as any)
// socket.removeEventListener("message", handler)
// resolve(lobby)
// }
// }
// })
// socket.onmessage = handler
// })
}