@@ -76,7 +76,7 @@ let controls = {};
76
76
let zoom = false ;
77
77
let currentDisplay = '' ;
78
78
let htmlText = { } ;
79
- let pollVars = { } ;
79
+ let httpVars = { } ;
80
80
let intervals = [ ] ;
81
81
82
82
app . use ( cors ( corsOptions ) ) ;
@@ -244,8 +244,8 @@ function processConfig() {
244
244
for ( let t of config . text ) {
245
245
htmlText [ t . name ] = t . frames ;
246
246
}
247
- for ( let p of config . poll ) {
248
- pollVars [ p . name ] = p ;
247
+ for ( let p of config . vars ) {
248
+ httpVars [ p . name ] = p ;
249
249
}
250
250
setUpPolling ( ) ;
251
251
}
@@ -438,7 +438,7 @@ function pollVariable( name, url ) {
438
438
console . log ( 'There was a problem with the request. [' + xhr . status + ']' ) ;
439
439
} else {
440
440
console . log ( name + ' = ' + xhr . responseText ) ;
441
- pollVars [ name ] = xhr . responseText ;
441
+ httpVars [ name ] . val = xhr . responseText ;
442
442
}
443
443
}
444
444
} ;
@@ -454,14 +454,16 @@ function setUpPolling() {
454
454
clearInterval ( intervals [ i ] ) ;
455
455
}
456
456
intervals = [ ] ;
457
- for ( let p in pollVars ) {
458
- console . log ( pollVars [ p ] . name ) ;
459
- console . log ( pollVars [ p ] . url ) ;
460
- console . log ( pollVars [ p ] . interval ) ;
461
- pollVariable ( p , pollVars [ p ] . url ) ;
462
- let url = pollVars [ p ] . url ;
463
- inv = setInterval ( function ( ) { pollVariable ( p , url ) } , pollVars [ p ] . interval * 1000 ) ;
464
- intervals . push ( inv ) ;
457
+ for ( let p in httpVars ) {
458
+ console . log ( httpVars [ p ] . name ) ;
459
+ console . log ( httpVars [ p ] . url ) ;
460
+ console . log ( httpVars [ p ] . interval ) ;
461
+ if ( httpVars [ p ] . url !== undefined ) {
462
+ pollVariable ( p , httpVars [ p ] . url ) ;
463
+ let url = httpVars [ p ] . url ;
464
+ inv = setInterval ( function ( ) { pollVariable ( p , url ) } , httpVars [ p ] . interval * 1000 ) ;
465
+ intervals . push ( inv ) ;
466
+ }
465
467
}
466
468
}
467
469
@@ -500,6 +502,54 @@ function get_view_list( ) {
500
502
return result ;
501
503
}
502
504
505
+ function expand_text ( content ) {
506
+ if ( streams . length > 0 ) {
507
+ for ( let v in streams [ 0 ] . options . var_map ) {
508
+ re = replre ( '{{' + v + '}}' ) ;
509
+ content = content . replace ( re , streams [ 0 ] . options . var_map [ v ] ) ;
510
+ }
511
+ }
512
+ for ( let p in httpVars ) {
513
+ re = replre ( '{{' + p + '}}' ) ;
514
+ content = content . replace ( re , httpVars [ p ] . val ) ;
515
+ }
516
+ re = replre ( '{{view-list}}' ) ;
517
+ content = content . replace ( re , get_view_list ( ) ) ;
518
+ return content ;
519
+ }
520
+
521
+ app . get ( '/set' , async ( req , res , next ) => {
522
+ if ( req . query . var !== undefined && req . query . val !== undefined ) {
523
+ if ( streams . length > 0 && req . query . var in streams [ 0 ] . options . var_map ) {
524
+ // this likely isn't extremely useful, as var_map gets regenerated on reload
525
+ streams [ 0 ] . options . var_map [ req . query . var ] = req . query . val ;
526
+ } else {
527
+ httpVars [ req . query . var ] . val = req . query . val ;
528
+ }
529
+ }
530
+ return res . send ( "OK" ) ;
531
+ } ) ;
532
+
533
+ app . get ( '/get' , async ( req , res , next ) => {
534
+ result = "" ;
535
+ if ( req . query . var !== undefined ) {
536
+ if ( streams . length > 0 && req . query . var in streams [ 0 ] . options . var_map ) {
537
+ result = streams [ 0 ] . options . var_map [ req . query . var ] ;
538
+ } else if ( req . query . var in httpVars ) {
539
+ result = httpVars [ req . query . var ] . val ;
540
+ }
541
+ }
542
+ return res . send ( JSON . stringify ( { result } ) ) ;
543
+ } ) ;
544
+
545
+ app . get ( '/expand' , async ( req , res , next ) => {
546
+ result = "" ;
547
+ if ( req . query . text !== undefined ) {
548
+ result = expand_text ( req . query . text ) ;
549
+ }
550
+ return res . send ( JSON . stringify ( { result } ) ) ;
551
+ } ) ;
552
+
503
553
app . get ( '/display' , async ( req , res , next ) => {
504
554
var key ;
505
555
try {
@@ -540,37 +590,28 @@ app.get('/display', async (req, res, next) => {
540
590
currentDisplay = key ;
541
591
}
542
592
}
593
+ let content ;
543
594
if ( htmlText [ currentDisplay ] ) {
544
595
if ( currentFrame >= htmlText [ currentDisplay ] . length ) {
545
596
currentFrame = 0 ;
546
597
currentDisplay = '' ;
547
- return res . send ( config . html ) ;
548
- }
549
- if ( htmlText [ currentDisplay ] . length ) {
550
- h = htmlText [ currentDisplay ] [ currentFrame ] + config . html ;
598
+ content = config . html ;
599
+ } else if ( htmlText [ currentDisplay ] . length ) {
600
+ content = htmlText [ currentDisplay ] [ currentFrame ] + config . html ;
551
601
}
552
602
} else
553
- h = config . html ;
603
+ content = config . html ;
554
604
555
605
let re ;
556
- if ( streams . length > 0 ) {
557
- for ( let v in streams [ 0 ] . options . var_map ) {
558
- re = replre ( '{{' + v + '}}' ) ;
559
- h = h . replace ( re , streams [ 0 ] . options . var_map [ v ] ) ;
560
- }
561
- }
562
- for ( let p in pollVars ) {
563
- re = replre ( '{{' + p + '}}' ) ;
564
- h = h . replace ( re , pollVars [ p ] ) ;
565
- }
566
- re = replre ( '{{view-list}}' ) ;
567
- h = h . replace ( re , get_view_list ( ) ) ;
568
- return res . send ( h ) ;
606
+ content = expand_text ( content ) ;
607
+
608
+ return res . send ( JSON . stringify ( { content, currentDisplay } ) ) ;
569
609
} catch ( err ) {
570
610
console . log ( err ) ;
571
611
next ( err ) ;
572
612
}
573
- return res . send ( '<B><CENTER><FONT SZ=+4>Define content for ' + key + ' in config</FONT></CENTER></B>' + config . html ) ;
613
+ content = '<B><CENTER><FONT SZ=+4>Define content for ' + key + ' in config</FONT></CENTER></B>' + config . html ;
614
+ return res . send ( JSON . stringify ( { content, currentDisplay } ) ) ;
574
615
} ) ;
575
616
576
617
app . get ( '/keypress' , async ( req , res ) => {
@@ -710,4 +751,41 @@ app.post('/admin/config/save', protect(), async (req, res) => {
710
751
} ) ) ;
711
752
} ) ;
712
753
754
+
755
+ app . get ( '/sse' , ( req , res ) => {
756
+ console . log ( 'A' ) ;
757
+ res . writeHead ( 200 , {
758
+ 'Content-Type' : 'text/event-stream' ,
759
+ 'Cache-Control' : 'no-cache' ,
760
+ 'Connection' : 'keep-alive'
761
+ } ) ;
762
+ addSSEClient ( req , res ) ;
763
+ } ) ;
764
+
765
+ let clientData = [ ] ;
766
+ let sequence = 1 ;
767
+ function addSSEClient ( req , res ) {
768
+ console . log ( 'B' ) ;
769
+ req . on ( 'close' , ( ) => clientData = clientData . filter ( o => o . res !== res ) ) ;
770
+ clientData . push ( {
771
+ res,
772
+ clientNo : sequence ++ ,
773
+ messageNo : 1
774
+ } ) ;
775
+ }
776
+ function send ( ) {
777
+ clientData . forEach ( o => {
778
+ console . log ( 'C' ) ;
779
+ const data = JSON . stringify ( {
780
+ clientCount : clientData . length ,
781
+ clientNo : o . clientNo ,
782
+ messageNo : o . messageNo ++
783
+ } ) ;
784
+ o . res . write ( `data: ${ data } \n\n` ) ;
785
+ } ) ;
786
+ setTimeout ( send , 1000 ) ;
787
+ }
788
+
789
+ setTimeout ( send ) ;
790
+
713
791
app . listen ( 3004 ) ;
0 commit comments