Mercurial Hosting > luan
diff src/goodjava/webserver/ServerSentEvents.java @ 1740:c9c974817d0c
add ServerSentEvents.sweep
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 03 Nov 2022 22:05:11 -0600 |
parents | 9713f7fd50b3 |
children | 623d9f62ab92 |
line wrap: on
line diff
--- a/src/goodjava/webserver/ServerSentEvents.java Thu Nov 03 19:32:03 2022 -0600 +++ b/src/goodjava/webserver/ServerSentEvents.java Thu Nov 03 22:05:11 2022 -0600 @@ -11,9 +11,14 @@ import java.util.HashMap; import java.util.Collections; import java.util.Iterator; +import java.util.Timer; +import java.util.TimerTask; +import goodjava.logging.Logger; +import goodjava.logging.LoggerFactory; public class ServerSentEvents { + private static final Logger logger = LoggerFactory.getLogger(ServerSentEvents.class); private static class Con { final Socket socket; @@ -45,8 +50,10 @@ iter.remove(); } } - if( cons.isEmpty() ) + if( cons.isEmpty() ) { map.remove(url); + //logger.info("removed "+url); + } } } @@ -92,5 +99,26 @@ write( url, toData(message) ); } + private static void sweep() { + List<String> urls; + synchronized(map) { + urls = new ArrayList<String>(map.keySet()); + } + for( String url : urls ) { + write( url, "event: ping\n" ); + } + } + + private static final Timer sweeper = new Timer("ServerSentEvents",true); + static { + long period = 1000L*60*60; // hour + TimerTask task = new TimerTask() { + public void run() { + sweep(); + } + }; + sweeper.schedule(task,period,period); + } + private ServerSentEvents() {} // never }