Mercurial Hosting > luan
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 1739:3e9f26404433 | 1740:c9c974817d0c |
|---|---|
| 9 import java.util.ArrayList; | 9 import java.util.ArrayList; |
| 10 import java.util.Map; | 10 import java.util.Map; |
| 11 import java.util.HashMap; | 11 import java.util.HashMap; |
| 12 import java.util.Collections; | 12 import java.util.Collections; |
| 13 import java.util.Iterator; | 13 import java.util.Iterator; |
| 14 import java.util.Timer; | |
| 15 import java.util.TimerTask; | |
| 16 import goodjava.logging.Logger; | |
| 17 import goodjava.logging.LoggerFactory; | |
| 14 | 18 |
| 15 | 19 |
| 16 public class ServerSentEvents { | 20 public class ServerSentEvents { |
| 21 private static final Logger logger = LoggerFactory.getLogger(ServerSentEvents.class); | |
| 17 | 22 |
| 18 private static class Con { | 23 private static class Con { |
| 19 final Socket socket; | 24 final Socket socket; |
| 20 final Writer writer; | 25 final Writer writer; |
| 21 | 26 |
| 43 writer.flush(); | 48 writer.flush(); |
| 44 } catch(IOException e) { | 49 } catch(IOException e) { |
| 45 iter.remove(); | 50 iter.remove(); |
| 46 } | 51 } |
| 47 } | 52 } |
| 48 if( cons.isEmpty() ) | 53 if( cons.isEmpty() ) { |
| 49 map.remove(url); | 54 map.remove(url); |
| 55 //logger.info("removed "+url); | |
| 56 } | |
| 50 } | 57 } |
| 51 } | 58 } |
| 52 | 59 |
| 53 private static final Map<String,EventHandler> map | 60 private static final Map<String,EventHandler> map |
| 54 = Collections.synchronizedMap(new HashMap<String,EventHandler>()); | 61 = Collections.synchronizedMap(new HashMap<String,EventHandler>()); |
| 90 | 97 |
| 91 public static void writeMessage( String url, String message ) { | 98 public static void writeMessage( String url, String message ) { |
| 92 write( url, toData(message) ); | 99 write( url, toData(message) ); |
| 93 } | 100 } |
| 94 | 101 |
| 102 private static void sweep() { | |
| 103 List<String> urls; | |
| 104 synchronized(map) { | |
| 105 urls = new ArrayList<String>(map.keySet()); | |
| 106 } | |
| 107 for( String url : urls ) { | |
| 108 write( url, "event: ping\n" ); | |
| 109 } | |
| 110 } | |
| 111 | |
| 112 private static final Timer sweeper = new Timer("ServerSentEvents",true); | |
| 113 static { | |
| 114 long period = 1000L*60*60; // hour | |
| 115 TimerTask task = new TimerTask() { | |
| 116 public void run() { | |
| 117 sweep(); | |
| 118 } | |
| 119 }; | |
| 120 sweeper.schedule(task,period,period); | |
| 121 } | |
| 122 | |
| 95 private ServerSentEvents() {} // never | 123 private ServerSentEvents() {} // never |
| 96 } | 124 } |
