@@ -3,16 +3,15 @@ import { promisify } from "util";
33import { Request , Response } from "express" ;
44import { Injectable , Logger } from "@nestjs/common" ;
55
6+ type FieldData = {
7+ data ?: Buffer ;
8+ gipped ?: boolean ;
9+ } ;
10+
611type 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