29 lines
909 B
TypeScript
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)
|
|
})
|
|
}
|
|
} |