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

29 lines
909 B
TypeScript

import type { ClientMessage, ServerMessage } from "./interfaces/generic/index"
type Callbacks = {
resolve: (value: ServerMessage) => void;
reject: (reason?: any) => void;
}
export class Query {
static readonly callbacks = new Map<string, Callbacks>()
readonly uuid: string
readonly message: Omit<ClientMessage, "uuid">
private readonly socket: WebSocket
constructor(socket: WebSocket, message: Omit<ClientMessage, "uuid">) {
this.uuid = crypto.randomUUID()
this.message = message
this.socket = socket
}
private serialize() {
return JSON.stringify({ uuid: this.uuid, ...this.message })
}
send() {
return new Promise<ServerMessage>((resolve, reject) => {
const callbacks = { resolve, reject }
this.socket.send(this.serialize())
Query.callbacks.set(this.uuid, callbacks)
})
}
}