Skip to content

Commit 3483f42

Browse files
committed
wip
1 parent 94d4230 commit 3483f42

2 files changed

Lines changed: 26 additions & 38 deletions

File tree

src/matches/match-relay/match-relay.controller.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,6 @@ export class MatchRelayController {
9696
@Req() request: Request,
9797
@Res() response: Response,
9898
) {
99-
console.info(`post start`, {
100-
matchId,
101-
fragment: parseInt(fragment),
102-
});
10399
this.matchRelayService.postField(
104100
request,
105101
response,
@@ -116,10 +112,6 @@ export class MatchRelayController {
116112
@Req() request: Request,
117113
@Res() response: Response,
118114
) {
119-
console.info(`post full`, {
120-
matchId,
121-
fragment: parseInt(fragment),
122-
});
123115
this.matchRelayService.postField(
124116
request,
125117
response,
@@ -136,10 +128,6 @@ export class MatchRelayController {
136128
@Req() request: Request,
137129
@Res() response: Response,
138130
) {
139-
console.info(`post delta`, {
140-
matchId,
141-
fragment: parseInt(fragment),
142-
});
143131
this.matchRelayService.postField(
144132
request,
145133
response,

src/matches/match-relay/match-relay.service.ts

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ import { promisify } from "util";
33
import { Request, Response } from "express";
44
import { Injectable, Logger } from "@nestjs/common";
55

6+
type FieldData = {
7+
data?: Buffer;
8+
gipped?: boolean;
9+
};
10+
611
type Fragment = {
7-
data?: {
8-
start?: Buffer;
9-
full?: Buffer;
10-
delta?: Buffer;
11-
start_ungzlen?: number;
12-
full_ungzlen?: number;
13-
delta_ungzlen?: number;
14-
[key: string]: Buffer | number | undefined;
15-
};
12+
start?: FieldData;
13+
full?: FieldData;
14+
delta?: FieldData;
1615
tick?: number;
1716
endtick?: number;
1817
timestamp?: number;
@@ -100,7 +99,7 @@ export class MatchRelayService {
10099

101100
const match_field_0 = broadcast[0];
102101
// Check if start fragment exists at index 0
103-
if (match_field_0 == null || match_field_0.data?.start == null) {
102+
if (match_field_0 == null || match_field_0.start?.data == null) {
104103
response.writeHead(404, "Broadcast has not started yet");
105104
response.end();
106105
return;
@@ -176,6 +175,7 @@ export class MatchRelayService {
176175
matchId: string,
177176
fragmentIndex: number,
178177
): void {
178+
console.info(`${fragmentIndex} ${field}`);
179179
if (!this.broadcasts[matchId]) {
180180
this.logger.log(`Creating new match broadcast for matchId ${matchId}`);
181181
this.broadcasts[matchId] = [];
@@ -196,7 +196,7 @@ export class MatchRelayService {
196196
} else {
197197
// For non-start fields, ensure start fragment exists at index 0
198198
// Start fragment is always at index 0, check if the start data exists
199-
if (broadcast[0] == null || broadcast[0].data?.start == null) {
199+
if (broadcast[0] == null || broadcast[0].start?.data == null) {
200200
response.writeHead(205);
201201
response.end();
202202
return;
@@ -206,9 +206,9 @@ export class MatchRelayService {
206206
if (broadcast[fragmentIndex] == null) {
207207
broadcast[fragmentIndex] = {};
208208
}
209-
// Initialize data object if it doesn't exist
210-
if (broadcast[fragmentIndex].data == null) {
211-
broadcast[fragmentIndex].data = {};
209+
// Initialize field data object if it doesn't exist
210+
if (broadcast[fragmentIndex][field] == null) {
211+
broadcast[fragmentIndex][field] = {};
212212
}
213213
}
214214

@@ -229,22 +229,23 @@ export class MatchRelayService {
229229
// Send response immediately (like old code)
230230
response.end();
231231

232-
// Initialize data object if it doesn't exist
233-
if (broadcast[fragmentIndex].data == null) {
234-
broadcast[fragmentIndex].data = {};
232+
// Initialize field data object if it doesn't exist
233+
if (broadcast[fragmentIndex][field] == null) {
234+
broadcast[fragmentIndex][field] = {};
235235
}
236236

237237
this.gzip(totalBuffer)
238238
.then((compressedBlob: Buffer) => {
239-
broadcast[fragmentIndex].data![field + "_ungzlen"] = totalBuffer.length;
240-
broadcast[fragmentIndex].data![field] = compressedBlob;
239+
broadcast[fragmentIndex][field].gipped = true;
240+
broadcast[fragmentIndex][field].data = compressedBlob;
241241
broadcast[fragmentIndex].timestamp = Date.now();
242242
})
243243
.catch((error: Error) => {
244244
this.logger.error(
245245
`Cannot gzip ${totalBuffer.length} bytes: ${error}`,
246246
);
247-
broadcast[fragmentIndex].data![field] = totalBuffer;
247+
broadcast[fragmentIndex][field].gipped = false;
248+
broadcast[fragmentIndex][field].data = totalBuffer;
248249
broadcast[fragmentIndex].timestamp = Date.now();
249250
});
250251
});
@@ -262,8 +263,8 @@ export class MatchRelayService {
262263
private isSyncReady(fragment: Fragment | undefined): boolean {
263264
return (
264265
fragment != null &&
265-
fragment.data?.full != null &&
266-
fragment.data?.delta != null &&
266+
fragment.full?.data != null &&
267+
fragment.delta?.data != null &&
267268
fragment.tick != null &&
268269
fragment.endtick != null &&
269270
fragment.timestamp != null
@@ -285,20 +286,19 @@ export class MatchRelayService {
285286
fragmentRec: Fragment | undefined,
286287
field: string,
287288
): void {
288-
const blob = fragmentRec?.data?.[field];
289+
const fieldData = fragmentRec?.[field] as FieldData | undefined;
290+
const blob = fieldData?.data;
289291

290292
if (!blob) {
291293
response.writeHead(404, "Field not found");
292294
response.end();
293295
return;
294296
}
295297

296-
const ungzipped_length = fragmentRec.data?.[field + "_ungzlen"];
297-
298298
const headers: { [key: string]: string } = {
299299
"Content-Type": "application/octet-stream",
300300
};
301-
if (ungzipped_length) {
301+
if (fieldData.gipped) {
302302
headers["Content-Encoding"] = "gzip";
303303
}
304304
response.writeHead(200, headers);

0 commit comments

Comments
 (0)