diff options
Diffstat (limited to 'same/src/main/java/com/orbekk/same/BroadcastRunner.java')
-rw-r--r-- | same/src/main/java/com/orbekk/same/BroadcastRunner.java | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/same/src/main/java/com/orbekk/same/BroadcastRunner.java b/same/src/main/java/com/orbekk/same/BroadcastRunner.java new file mode 100644 index 0000000..45935b6 --- /dev/null +++ b/same/src/main/java/com/orbekk/same/BroadcastRunner.java @@ -0,0 +1,33 @@ +package com.orbekk.same; + +import java.util.List; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +public class BroadcastRunner { + private ConnectionManager connections; + private Executor executor; + + /** + * Get a BroadcastRunner for ClientService using a thread pool of size 20. + */ + public static BroadcastRunner getDefaultBroadcastRunner() { + return new BroadcastRunner(Executors.newFixedThreadPool(20)); + } + + public BroadcastRunner(Executor executor, ConnectionManager connections) { + this.executor = executor; + } + + public synchronized void broadcast(final List<String> targets, + final ServiceOperation operation) { + for (String t : targets) { + final ClientService client = connections.getConnection(t); + executor.execute(new Runnable() { + @Override public void run() { + operation.run(client); + } + }); + } + } +} |