@@ -3290,9 +3290,13 @@ function refreshSingleNew(serial) {
32903290 }
32913291
32923292 ajax_inprogress_single_new = true ;
3293-
3294- var data_str = "duration=3d&payload_callsign=" + serial ;
3295-
3293+
3294+ // Only request backlog data from the current time period.
3295+ var mode = wvar . mode . toLowerCase ( ) ;
3296+ mode = ( mode == "position" ) ? "latest" : mode . replace ( / / g, "" ) ;
3297+ var data_str = "duration=" + mode + "&payload_callsign=" + serial ;
3298+
3299+
32963300 ajax_positions_single_new = $ . ajax ( {
32973301 type : "GET" ,
32983302 url : newdata_url ,
@@ -3328,6 +3332,12 @@ function liveData() {
33283332 client . subscribe ( "amateur/#" ) ;
33293333 clientTopic = "amateur/#" ;
33303334 }
3335+
3336+ // Also subscribe to amateur-listener data, for listener and chase-car telemetry.
3337+ // To revert listener-via-websockets change, comment out this line,
3338+ // and un-comment the 'Disable periodical listener refresh' lines further below.
3339+ client . subscribe ( "amateur-listener/#" ) ;
3340+
33313341 clientConnected = true ;
33323342 $ ( "#stText" ) . text ( "websocket |" ) ;
33333343 } ;
@@ -3368,24 +3378,51 @@ function liveData() {
33683378 var dateNow = new Date ( ) . getTime ( ) ;
33693379 try {
33703380 if ( clientActive ) {
3371- var frame = [ { "1" :JSON . parse ( message . payloadString . toString ( ) ) } ] ;
3372- if ( frame . length == null ) {
3373- var tempDate = new Date ( frame . time_received ) . getTime ( ) ;
3374- } else {
3375- var tempDate = new Date ( frame [ frame . length - 1 ] [ "1" ] . time_received ) . getTime ( )
3376- }
3377- if ( ( dateNow - tempDate ) < 30000 ) {
3378- var test = formatData ( frame ) ;
3379- if ( clientActive ) {
3380- live_data_buffer . positions . position . push . apply ( live_data_buffer . positions . position , test . positions . position ) ;
3381+ if ( message . topic . startsWith ( "amateur-listener" ) ) {
3382+ // Message is Listener / Chase-Car information
3383+ var frame = JSON . parse ( message . payloadString . toString ( ) ) ;
3384+ // We need to convert this into the right format for feeding into the receiver / chase car update functions.
3385+ // Probably a cleaner way of doing this.
3386+ // Format needs to be {callsign : {timestamp: frame}}
3387+ var formatted_frame = { } ;
3388+ formatted_frame [ frame . uploader_callsign ] = { } ;
3389+ formatted_frame [ frame . uploader_callsign ] [ frame . ts ] = frame ;
3390+
3391+ // Send frames with mobile present and true onto the chase-car updater,
3392+ // otherwise, send them to the receiver updater.
3393+ // Do this on a per-update bases, since listener / chase car updates shouldn't
3394+ // be as frequent.
3395+ if ( frame . hasOwnProperty ( 'mobile' ) ) {
3396+ if ( frame . mobile == true ) {
3397+ updateChase ( formatted_frame ) ;
3398+ } else {
3399+ updateReceivers ( formatted_frame ) ;
3400+ }
3401+ } else {
3402+ updateReceivers ( formatted_frame ) ;
33813403 }
3382- $ ( "#stTimer" ) . attr ( "data-timestamp" , dateNow ) ;
3383- $ ( "#stText" ) . text ( "websocket |" ) ;
3384- } else if ( ( dateNow - new Date ( frame [ 0 ] [ "1" ] . time_received ) . getTime ( ) ) > 150000 ) {
3385- $ ( "#stText" ) . text ( "error |" ) ;
3386- refresh ( ) ;
3404+
33873405 } else {
3388- $ ( "#stText" ) . text ( "error |" ) ;
3406+ // Message is payload telemetry
3407+ var frame = [ { "1" :JSON . parse ( message . payloadString . toString ( ) ) } ] ;
3408+ if ( frame . length == null ) {
3409+ var tempDate = new Date ( frame . time_received ) . getTime ( ) ;
3410+ } else {
3411+ var tempDate = new Date ( frame [ frame . length - 1 ] [ "1" ] . time_received ) . getTime ( )
3412+ }
3413+ if ( ( dateNow - tempDate ) < 30000 ) {
3414+ var test = formatData ( frame ) ;
3415+ if ( clientActive ) {
3416+ live_data_buffer . positions . position . push . apply ( live_data_buffer . positions . position , test . positions . position ) ;
3417+ }
3418+ $ ( "#stTimer" ) . attr ( "data-timestamp" , dateNow ) ;
3419+ $ ( "#stText" ) . text ( "websocket |" ) ;
3420+ } else if ( ( dateNow - new Date ( frame [ 0 ] [ "1" ] . time_received ) . getTime ( ) ) > 150000 ) {
3421+ $ ( "#stText" ) . text ( "error |" ) ;
3422+ refresh ( ) ;
3423+ } else {
3424+ $ ( "#stText" ) . text ( "error |" ) ;
3425+ }
33893426 }
33903427 }
33913428 }
@@ -3436,7 +3473,8 @@ function refreshReceivers() {
34363473 updateReceivers ( response ) ;
34373474 } ,
34383475 complete : function ( request , textStatus ) {
3439- periodical_receivers = setTimeout ( function ( ) { refreshReceivers ( false ) } , 60 * 10 * 1000 ) ;
3476+ // Disable periodical listener refresh - this data now comes via websockets.
3477+ //periodical_receivers = setTimeout(function() {refreshReceivers(false)}, 60 * 10 * 1000);
34403478 if ( ! offline . get ( "opt_hide_chase" ) ) {
34413479 refreshNewReceivers ( true ) ;
34423480 }
@@ -3470,7 +3508,8 @@ function refreshNewReceivers(initial, serial) {
34703508 } ,
34713509 complete : function ( request , textStatus ) {
34723510 if ( typeof serial === 'undefined' ) {
3473- periodical_listeners = setTimeout ( function ( ) { refreshNewReceivers ( false ) } , 60 * 1000 ) ;
3511+ // Disable periodical listener refresh - this data now comes via websockets.
3512+ //periodical_listeners = setTimeout(function() {refreshNewReceivers(false)}, 60 * 1000);
34743513 }
34753514 }
34763515 } ) ;
@@ -3497,6 +3536,7 @@ function refreshPredictions() {
34973536 } ,
34983537 complete : function ( request , textStatus ) {
34993538 clearTimeout ( periodical_predictions ) ;
3539+ // TODO - Switch this to websockets as well.
35003540 periodical_predictions = setTimeout ( refreshPredictions , 60 * 1000 ) ;
35013541 }
35023542 } ) ;
0 commit comments