1- const request = require ( 'request ' ) ;
1+ const eventsource = require ( 'eventsource ' ) ;
22const config = require ( './config' ) ;
33const EventEmitter = require ( 'events' ) ;
4- const util = require ( 'util' ) ;
5- const crypto = require ( 'crypto' ) ;
64const sprintf = require ( 'sprintf' ) ;
75
86class WwbotaSpotReceiver extends EventEmitter {
@@ -13,62 +11,26 @@ class WwbotaSpotReceiver extends EventEmitter {
1311 }
1412
1513 start ( ) {
16- setInterval ( ( ) => {
17- this . refreshSpots ( ) ;
18- } , config . wwbota . refreshInterval ) ;
19- this . refreshSpots ( ) ;
20- }
21-
22- refreshSpots ( ) {
23- console . log ( "Refreshing WWBOTA JSON feed" ) ;
24-
25- let req = request ( {
26- url : config . wwbota . spotsUrl ,
27- headers : {
28- 'User-Agent' : 'HamAlert/1.0 (+https://hamalert.org)'
29- } ,
30- json : true
31- } , ( error , response , body ) => {
32- if ( error ) {
33- console . error ( `Loading WWBOTA feed failed: ${ error } ` ) ;
34- return ;
35- }
36-
37- if ( response . statusCode !== 200 ) {
38- console . error ( `Bad status code ${ response . statusCode } from WWBOTA` ) ;
39- return ;
40- }
41-
42- if ( ! Array . isArray ( body ) ) {
43- console . error ( `Expected array from WWBOTA, but got something else` ) ;
44- return ;
45- }
46-
47- // reverse to process oldest to newest
48- body . reverse ( )
49- body . forEach ( spot => {
50- this . processJsonSpot ( spot )
51- } ) ;
52- if ( body . length > 0 ) {
53- this . lastProcessedTime = spot [ body . length - 1 ] . time ; // Previously reversed, so newest last
54- }
14+ let es = new eventsource . EventSource ( config . wwbota . spotsUrl , {
15+ fetch : ( input , init ) =>
16+ fetch ( input , {
17+ ...init ,
18+ headers : {
19+ ...init . headers ,
20+ 'User-Agent' : 'HamAlert/1.0 (+https://hamalert.org)' ,
21+ } ,
22+ } ) ,
5523 } ) ;
24+ es . addEventListener ( 'message' , ( event ) => this . processSpotEvent ( event ) ) ;
25+ es . addEventListener ( 'error' , ( error ) => {
26+ console . error ( `Loading WWBOTA feed failed: ${ error . responseCode } ` )
27+ } )
5628 }
5729
58- processJsonSpot ( jsonSpot ) {
30+ processSpotEvent ( spotEvent ) {
5931 try {
32+ let jsonSpot = JSON . parse ( spotEvent . data ) ;
6033 jsonSpot . time = new Date ( jsonSpot . time ) ;
61-
62- // Check if spot newer that last batch processed
63- // edited spot have new timestamp as well
64- if ( this . lastProcessedTime && this . lastProcessedTime >= jsonSpot . time ) {
65- return ;
66- }
67-
68- // Ignore old spots
69- if ( ( new Date ( ) - jsonSpot . spotTime ) > config . wwbota . spotMaxAge ) {
70- return ;
71- }
7234
7335 // Ignore QRT/Test spots
7436 if ( jsonSpot . type !== "Live" ) {
@@ -88,9 +50,9 @@ class WwbotaSpotReceiver extends EventEmitter {
8850 source : 'wwbota' ,
8951 time : jsonSpot . time . toISOString ( ) . substring ( 11 , 16 ) ,
9052 fullCallsign : jsonSpot . call ,
91- wwbotaScheme : spot . reference [ 0 ] . scheme , // Multiple, but lets just take the first.
92- wwbotaRef : spot . reference [ 0 ] . reference ,
93- wwbotaName : spot . reference [ 0 ] . name ,
53+ wwbotaScheme : jsonSpot . references [ 0 ] . scheme , // Multiple, but lets just take the first.
54+ wwbotaRef : jsonSpot . references [ 0 ] . reference ,
55+ wwbotaName : jsonSpot . references [ 0 ] . name ,
9456 frequency,
9557 mode : jsonSpot . mode . toLowerCase ( ) . trim ( ) ,
9658 comment : jsonSpot . comment . trim ( ) ,
0 commit comments