Skip to content

Commit 20132f7

Browse files
committed
improved typedefs
1 parent 7c12e32 commit 20132f7

7 files changed

Lines changed: 37 additions & 40 deletions

File tree

apps/game-server/src/main.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -159,16 +159,11 @@ const riftServer = new MpRiftServer({
159159
});
160160

161161
transport.on((event) => {
162-
if (event.type !== "open") {
163-
return;
164-
}
165-
const ws = event.ws as WebSocket | undefined;
166-
if (!ws) {
167-
return;
168-
}
169-
const user = userByWs.get(ws);
170-
if (user !== undefined) {
171-
registry.recordConnection(event.clientId, user);
162+
if (event.type === "open") {
163+
const user = userByWs.get(event.socket);
164+
if (user !== undefined) {
165+
registry.recordConnection(event.clientId, user);
166+
}
172167
}
173168
});
174169

integrations/world/scripts/simulation.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ const FIXTURES_DIR = resolve(
5454
"../../../docker/file-server/public/areas",
5555
);
5656

57-
export interface CapturingTransport extends ServerTransport {
58-
emit(ev: ServerTransportEvent): void;
57+
export interface CapturingTransport extends ServerTransport<void> {
58+
emit(ev: ServerTransportEvent<void>): void;
5959
/** All packet byte lengths, in send order, across all clients. */
6060
bytes: number[];
6161
/** All packet payloads, in send order, across all clients. */
@@ -240,7 +240,7 @@ export async function createSimulation(
240240
if (playerCount > 0) {
241241
transport.resetCapture();
242242
for (const clientId of clientIds) {
243-
transport.emit({ type: "open", clientId });
243+
transport.emit({ type: "open", clientId, socket: undefined });
244244
const helloWriter = new Writer(64);
245245
helloWriter.writeU8(Opcode.Hello);
246246
helloWriter.writeBytes(server.schema.digest());
@@ -286,7 +286,7 @@ function loadBenchArea(id: AreaId): Promise<AreaResource> {
286286
}
287287

288288
function makeTransport(): CapturingTransport {
289-
const listeners = new Set<(ev: ServerTransportEvent) => void>();
289+
const listeners = new Set<(ev: ServerTransportEvent<void>) => void>();
290290
const packets: Uint8Array[] = [];
291291
const bytes: number[] = [];
292292
const bytesByClient = new Map<ClientId, number[]>();

integrations/world/src/server.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,9 @@ export class MpRiftServer extends RiftServer {
2626
);
2727
}
2828

29-
override async dispose(
30-
...args: Parameters<RiftServer["dispose"]>
31-
): Promise<void> {
29+
override async dispose(): Promise<void> {
3230
await this.#cleanup?.();
3331
this.#cleanup = undefined;
34-
await super.dispose(...args);
32+
await super.dispose();
3533
}
3634
}

libraries/rift/core/src/server.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export type VisibilityFn = (
2929

3030
export interface ServerOptions {
3131
readonly schema: RiftSchema;
32-
readonly transport: ServerTransport;
32+
readonly transport: ServerTransport<unknown>;
3333
readonly tickRateHz?: number;
3434
readonly handshakeTimeoutMs?: number;
3535
readonly visibility?: VisibilityFn;
@@ -72,7 +72,7 @@ export class RiftServer extends EventBus<
7272
readonly world: World;
7373
readonly schema: RiftSchema;
7474

75-
readonly #transport: ServerTransport;
75+
readonly #transport: ServerTransport<unknown>;
7676
readonly #hash: Uint8Array;
7777
readonly #clients = new Map<ClientId, ClientSlot>();
7878
readonly #eventQueue: RiftServerEvent[] = [];
@@ -502,7 +502,7 @@ export class RiftServer extends EventBus<
502502
});
503503
}
504504

505-
#onTransportEvent(ev: ServerTransportEvent): void {
505+
#onTransportEvent(ev: ServerTransportEvent<unknown>): void {
506506
switch (ev.type) {
507507
case "open": {
508508
const slot: ClientSlot = {

libraries/rift/core/src/transport.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import type { ClientId } from "./protocol";
22

33
export type ConnectionState = "connecting" | "open" | "closing" | "closed";
44

5-
export type ServerTransportEvent =
5+
export type ServerTransportEvent<Socket> =
66
| {
77
readonly type: "open";
88
readonly clientId: ClientId;
9-
readonly ws?: unknown;
9+
readonly socket: Socket;
1010
}
1111
| {
1212
readonly type: "message";
@@ -25,8 +25,8 @@ export type ServerTransportEvent =
2525
readonly error: Error;
2626
};
2727

28-
export interface ServerTransport {
29-
on(listener: (event: ServerTransportEvent) => void): () => void;
28+
export interface ServerTransport<Socket> {
29+
on(listener: (event: ServerTransportEvent<Socket>) => void): () => void;
3030
send(clientId: ClientId, data: Uint8Array<ArrayBuffer>): void;
3131
close(clientId: ClientId, code: RiftCloseCode, reason?: string): void;
3232
shutdown(code?: RiftCloseCode, reason?: string): Promise<void>;

libraries/rift/core/tests/integration.test.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,32 +50,32 @@ function altSchema() {
5050
}
5151

5252
interface PairedTransports {
53-
server: ServerTransport;
53+
server: ServerTransport<unknown>;
5454
client: ClientTransport;
5555
fromClient: ClientId;
5656
triggerClientError(err: Error): void;
5757
}
5858

5959
function makePair(clientId: number): PairedTransports {
6060
const id = clientId as ClientId;
61-
let serverListener: ((ev: ServerTransportEvent) => void) | undefined;
61+
let serverListener: ((ev: ServerTransportEvent<unknown>) => void) | undefined;
6262
let clientListener: ((ev: ClientTransportEvent) => void) | undefined;
6363
let clientState: "connecting" | "open" | "closing" | "closed" = "open";
6464

65-
function emitToServer(ev: ServerTransportEvent): void {
65+
function emitToServer(ev: ServerTransportEvent<void>): void {
6666
serverListener?.(ev);
6767
}
6868
function emitToClient(ev: ClientTransportEvent): void {
6969
clientListener?.(ev);
7070
}
7171

72-
const server: ServerTransport = {
72+
const server: ServerTransport<unknown> = {
7373
on(listener) {
7474
serverListener = listener;
7575
// Match production wssTransport ordering: server "connection" fires
7676
// before the client-side WS open. Without this, a synchronously-
7777
// constructed RiftClient would send Hello before the server has a slot.
78-
emitToServer({ type: "open", clientId: id });
78+
emitToServer({ type: "open", clientId: id, socket: undefined });
7979
return () => {
8080
serverListener = undefined;
8181
};
@@ -557,12 +557,14 @@ describe("emit guard", () => {
557557
// constructor's sync Hello path is deferred, exposing the pre-handshake
558558
// window for the test to observe.
559559
const id = 99 as ClientId;
560-
let serverListener: ((ev: ServerTransportEvent) => void) | undefined;
560+
let serverListener:
561+
| ((ev: ServerTransportEvent<unknown>) => void)
562+
| undefined;
561563
let clientListener: ((ev: ClientTransportEvent) => void) | undefined;
562564
let clientState: "connecting" | "open" | "closing" | "closed" =
563565
"connecting";
564566

565-
const serverTransport: ServerTransport = {
567+
const serverTransport: ServerTransport<unknown> = {
566568
on(listener) {
567569
serverListener = listener;
568570
return () => {
@@ -622,7 +624,7 @@ describe("emit guard", () => {
622624
expect(received).toEqual([]);
623625

624626
clientState = "open";
625-
serverListener?.({ type: "open", clientId: id });
627+
serverListener?.({ type: "open", clientId: id, socket: undefined });
626628
clientListener?.({ type: "open" });
627629
await awaitOpen(client);
628630

@@ -645,12 +647,14 @@ describe("server time replication", () => {
645647
// Client starts in "connecting" so the DeltaApplied listener can be
646648
// attached before the handshake's initial snapshot fires.
647649
const id = 50 as ClientId;
648-
let serverListener: ((ev: ServerTransportEvent) => void) | undefined;
650+
let serverListener:
651+
| ((ev: ServerTransportEvent<unknown>) => void)
652+
| undefined;
649653
let clientListener: ((ev: ClientTransportEvent) => void) | undefined;
650654
let clientState: "connecting" | "open" | "closing" | "closed" =
651655
"connecting";
652656

653-
const serverTransport: ServerTransport = {
657+
const serverTransport: ServerTransport<unknown> = {
654658
on(listener) {
655659
serverListener = listener;
656660
return () => {
@@ -704,7 +708,7 @@ describe("server time replication", () => {
704708
});
705709

706710
clientState = "open";
707-
serverListener?.({ type: "open", clientId: id });
711+
serverListener?.({ type: "open", clientId: id, socket: undefined });
708712
clientListener?.({ type: "open" });
709713
await awaitOpen(client);
710714

libraries/rift/wss/src/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import {
66
} from "@rift/core";
77
import type { WebSocket, WebSocketServer } from "ws";
88

9-
export function wssTransport(wss: WebSocketServer): ServerTransport {
10-
const listeners = new Set<(ev: ServerTransportEvent) => void>();
9+
export function wssTransport(wss: WebSocketServer): ServerTransport<WebSocket> {
10+
const listeners = new Set<(ev: ServerTransportEvent<WebSocket>) => void>();
1111
const sockets = new Map<ClientId, WebSocket>();
1212
let nextId = 1;
1313

14-
function emit(ev: ServerTransportEvent): void {
14+
function emit(ev: ServerTransportEvent<WebSocket>): void {
1515
for (const l of listeners) {
1616
l(ev);
1717
}
@@ -53,7 +53,7 @@ export function wssTransport(wss: WebSocketServer): ServerTransport {
5353
socket.on("error", (error: Error) => {
5454
emit({ type: "error", clientId: id, error });
5555
});
56-
emit({ type: "open", clientId: id, ws: socket });
56+
emit({ type: "open", clientId: id, socket });
5757
});
5858

5959
return {

0 commit comments

Comments
 (0)