37 lines
523 B
TypeScript
37 lines
523 B
TypeScript
enum OpCode {
|
|
PING,
|
|
HELLO,
|
|
MOVE,
|
|
}
|
|
|
|
type PingEvent = Record<string, never>;
|
|
|
|
type HelloEvent = {
|
|
name: string;
|
|
};
|
|
|
|
type MoveEvent = {
|
|
x: number;
|
|
y: number;
|
|
};
|
|
|
|
type OpArgsMapping = {
|
|
[OpCode.PING]: PingEvent;
|
|
[OpCode.HELLO]: HelloEvent;
|
|
[OpCode.MOVE]: MoveEvent;
|
|
};
|
|
|
|
class WebSocketClient {
|
|
public op<TOp extends OpCode, TArgs extends OpArgsMapping[TOp]>(
|
|
op: TOp,
|
|
args: TArgs,
|
|
) {
|
|
// ...
|
|
}
|
|
}
|
|
|
|
function main_ws() {
|
|
const client = new WebSocketClient();
|
|
client.op(OpCode.PING, {});
|
|
}
|