@@ -26,12 +26,14 @@ app.get('/replay/:token/sync', function (req:any, res:any) {
2626 var r_sync = match [ req . params . token ] . firstsync
2727 const r = {
2828 tick : r_sync . tick ,
29- rtdelay : sync . rtdelay ,
30- rcvage : sync . rcvage ,
29+ //rtdelay: sync.rtdelay,
30+ rtdelay : 2 ,
31+ //rcvage: r_sync.rcvage,
32+ rcvage : 2 ,
3133 fragment : r_sync . fragment ,
3234 signup_fragment : sync . signup_fragment ,
3335 tps : sync . tps ,
34- protocool : sync . protocool ,
36+ protocol : sync . protocol ,
3537 }
3638 //console.log(r)
3739 res . send ( r ) ;
@@ -65,18 +67,19 @@ app.get('/replay/:token/:fragment_number/:frametype', function (req:any, res:any
6567// playcast "http://586f7685.ngrok.io/match/s85568392920768736t1477086968"
6668app . post ( '/reset/:token/' , ( req :any , res :any ) => {
6769 res . send ( "ACK" ) ;
68- match [ req . params . token ] . sync . signup_fragment = null ;
70+ match [ req . params . token ] . sync . signup_fragment = - 1 ;
6971} )
7072
7173
7274class Matches {
73- sync : match_sync
74- firstsync : replay_sync // sync for replay
75- start :any = [ ]
76- full :any = [ ]
77- delta : any = [ ]
78- token : string
79- time : string ;
75+ public sync : match_sync
76+ public firstsync : replay_sync // sync for replay
77+ public start :any = [ ]
78+ public full :any = [ ]
79+ public delta : any = [ ]
80+ public token : string
81+ public auth : string
82+ public time : string
8083
8184 constructor ( ) {
8285 this . sync = new match_sync ( ) ;
@@ -85,27 +88,54 @@ class Matches{
8588 this . full [ - 1 ] = Buffer . alloc ( 16 , 0 , "binary" )
8689 this . delta [ - 1 ] = Buffer . alloc ( 16 , 0 , "binary" )
8790 this . token = ""
91+ this . auth = ""
8892 this . time = new Date ( ) . toJSON ( )
8993 }
9094}
9195
9296class match_sync {
93- tick : number
94- rtdelay : number
95- rcvage : number
96- fragment : number
97- signup_fragment : number
98- tps : number
99- protocool : number ;
100-
97+ public tick : number
98+ //public rtdelay: number
99+ private _rtdelay : Date
100+ private _rcvage : Date
101+ public fragment : number
102+ public signup_fragment : number
103+ public tps : number
104+ public protocol : number ;
105+ public full_received : any
106+ public full_received_tick : any
107+
101108 constructor ( ) {
102109 this . tick = - 1
103- this . rtdelay = 2
104- this . rcvage = 2
110+ this . _rtdelay = new Date ( )
111+ //this.rtdelay = 2
112+ this . _rcvage = new Date ( )
105113 this . fragment = - 1
106114 this . signup_fragment = - 1
107115 this . tps = 32
108- this . protocool = 4
116+ this . protocol = 4
117+ this . full_received = { } ;
118+ this . full_received_tick = { }
119+ }
120+
121+
122+ public rtdelay ( i :number ) {
123+ var now = new Date ( )
124+ //var i = this.fragment - config.frag_delay
125+ var selected_full = this . full_received [ i ] ;
126+ var sec = ( ( now . getTime ( ) - selected_full . getTime ( ) ) / 1000 ) ;
127+ console . log ( sec )
128+ return sec ;
129+ }
130+
131+
132+ public rcvage ( ) {
133+ var now = new Date ( )
134+ var i = this . fragment ;
135+ var last_full = this . full_received [ i ] ;
136+ var sec = ( ( now . getTime ( ) - last_full . getTime ( ) ) / 1000 ) ;
137+ console . log ( sec )
138+ return sec ;
109139 }
110140}
111141
@@ -118,19 +148,47 @@ class replay_sync{
118148 this . fragment = - 1 }
119149}
120150
121- var match : any = { }
151+ var match : Imatches = { } ;
152+ interface Imatches {
153+ [ x :string ] :Matches
154+ }
122155
123156app . get ( '/match/:token/sync' , function ( req :any , res :any ) {
124157 console . log ( "match sync!" )
125- res . set ( 'Cache-Control' , 'public, max-age=1' ) ; // cache 1sec for delayed live
126- const r = match [ req . params . token ] . sync
127- //console.log(r)
158+ var sync = match [ req . params . token ] . sync
159+ var r : any ;
160+ res . set ( 'Cache-Control' , 'public, max-age=5' ) ; // cache 5sec for delayed live
161+ if ( req . query . fragment ) {
162+ r = {
163+ tick : sync . full_received_tick [ req . query . fragment ] ,
164+ rtdelay : sync . rtdelay ( req . query . fragment ) ,
165+ rcvage : sync . rcvage ( ) ,
166+ fragment : req . query . fragment ,
167+ signup_fragment : sync . signup_fragment ,
168+ tps : sync . tps ,
169+ protocol : sync . protocol ,
170+ }
171+ }
172+ else {
173+ var frag = sync . fragment - config . frag_delay ;
174+ r = {
175+ tick : sync . tick ,
176+ rtdelay : sync . rtdelay ( frag ) ,
177+ rcvage : sync . rcvage ( ) ,
178+ fragment : frag ,
179+ signup_fragment : sync . signup_fragment ,
180+ tps : sync . tps ,
181+ protocol : sync . protocol ,
182+ }
183+ }
184+
185+ console . log ( r )
128186 res . send ( r ) ;
129187} )
130188
131189app . get ( '/match/:token/:fragment_number/:frametype' , function ( req :any , res :any ) {
132190 console . log ( 'Fragment request for' , req . params . fragment_number )
133- res . set ( 'Cache-Control' , 'public, max-age=1 ' ) ; // cache 1sec for delayed live
191+ res . set ( 'Cache-Control' , 'public, max-age=86400 ' ) ; // cache 1sec for delayed live
134192 res . setHeader ( 'Content-Type' , 'application/octet-stream' )
135193 var p = Buffer . alloc ( 16 , 0 , 'binary' ) ;
136194 if ( req . params . frametype == 'start' ) {
@@ -172,6 +230,7 @@ app.post('/:token/:fragment_number/:frametype', function (req:any, res:any) {
172230 match [ req . params . token ] . sync . signup_fragment = req . params . fragment_number
173231 match [ req . params . token ] . start [ req . params . fragment_number ] = req . body
174232 match [ req . params . token ] . token = req . params . token
233+ match [ req . params . token ] . auth = req . headers [ "x-origin-auth" ]
175234 }
176235 else {
177236 if ( match [ req . params . token ] . sync . signup_fragment == - 1 ) {
@@ -195,6 +254,8 @@ app.post('/:token/:fragment_number/:frametype', function (req:any, res:any) {
195254 res . status ( 200 ) . send ( "OK" ) ;
196255 match [ req . params . token ] . sync . fragment = req . params . fragment_number
197256 match [ req . params . token ] . full [ req . params . fragment_number ] = req . body
257+ match [ req . params . token ] . sync . full_received [ req . params . fragment_number ] = new Date ( )
258+ match [ req . params . token ] . sync . full_received_tick [ req . params . fragment_number ] = req . query . tick
198259 if ( match [ req . params . token ] . firstsync . fragment == - 1 ) {
199260 match [ req . params . token ] . firstsync . fragment = req . params . fragment_number
200261 }
@@ -207,6 +268,6 @@ app.post('/:token/:fragment_number/:frametype', function (req:any, res:any) {
207268 }
208269} )
209270
210- app . listen ( 3000 , function ( ) {
211- console . log ( ' CSGO broadcast server listening on port 3000!' ) ;
271+ app . listen ( config . port , function ( ) {
272+ console . log ( ` CSGO broadcast server listening on port ${ config . port } !` ) ;
212273} ) ;
0 commit comments