fix: worker event forwarding

This commit is contained in:
didinele 2024-07-03 00:18:52 +03:00
parent 20695b9f7a
commit d0dd88fa6a
No known key found for this signature in database
GPG key ID: 577AA3A485A5422C
3 changed files with 11 additions and 9 deletions

View file

@ -91,7 +91,7 @@ vi.mock('node:worker_threads', async () => {
op: WorkerReceivePayloadOp.Event,
shardId: message.shardId,
event: WebSocketShardEvents.Dispatch,
data: memberChunkData,
data: [memberChunkData],
};
this.emit('message', response);
@ -204,10 +204,13 @@ test('spawn, connect, send a message, session info, and destroy', async () => {
};
await manager.send(0, payload);
expect(mockSend).toHaveBeenCalledWith(0, payload);
expect(managerEmitSpy).toHaveBeenCalledWith(WebSocketShardEvents.Dispatch, {
...memberChunkData,
shardId: 0,
});
expect(managerEmitSpy).toHaveBeenCalledWith(
WebSocketShardEvents.Dispatch,
{
...memberChunkData,
},
0,
);
expect(mockRetrieveSessionInfo).toHaveBeenCalledWith(0);
expect(mockUpdateSessionInfo).toHaveBeenCalledWith(0, { ...sessionInfo, sequence: sessionInfo.sequence + 1 });

View file

@ -48,7 +48,7 @@ export enum WorkerReceivePayloadOp {
export type WorkerReceivePayload =
// Can't seem to get a type-safe union based off of the event, so I'm sadly leaving data as any for now
| { data: any; event: WebSocketShardEvents; op: WorkerReceivePayloadOp.Event; shardId: number }
| { data: any[]; event: WebSocketShardEvents; op: WorkerReceivePayloadOp.Event; shardId: number }
| { nonce: number; op: WorkerReceivePayloadOp.CancelIdentify }
| { nonce: number; op: WorkerReceivePayloadOp.FetchStatusResponse; status: WebSocketShardStatus }
| { nonce: number; op: WorkerReceivePayloadOp.RetrieveSessionInfo; shardId: number }

View file

@ -148,12 +148,11 @@ export class WorkerBootstrapper {
for (const shardId of this.data.shardIds) {
const shard = new WebSocketShard(new WorkerContextFetchingStrategy(this.data), shardId);
for (const event of options.forwardEvents ?? Object.values(WebSocketShardEvents)) {
// @ts-expect-error: Event types incompatible
shard.on(event, (data) => {
shard.on(event, (...args) => {
const payload: WorkerReceivePayload = {
op: WorkerReceivePayloadOp.Event,
event,
data,
data: args,
shardId,
};
parentPort!.postMessage(payload);