From 56002b3beebf3164278013fad012933c8705e39f Mon Sep 17 00:00:00 2001 From: ymlam Date: Tue, 17 Sep 2019 23:02:56 -0400 Subject: [PATCH] Pause and resume --- src/main/java/altk/comm/engine/Broadcast.java | 2 +- .../java/altk/comm/engine/CommEngine.java | 2 ++ src/main/java/altk/comm/engine/Postback.java | 30 ++++++++++++------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main/java/altk/comm/engine/Broadcast.java b/src/main/java/altk/comm/engine/Broadcast.java index ef4bd65..5c9ae2f 100644 --- a/src/main/java/altk/comm/engine/Broadcast.java +++ b/src/main/java/altk/comm/engine/Broadcast.java @@ -934,7 +934,7 @@ public abstract class Broadcast protected void pause() { - // Sets state to HALTED, which is monitored by Broadcast.Service threads. + // Sets state to PAUSING, which is monitored by Broadcast.Service threads. setState(BroadcastState.PAUSING); } diff --git a/src/main/java/altk/comm/engine/CommEngine.java b/src/main/java/altk/comm/engine/CommEngine.java index 3fc050c..1ea9f5c 100644 --- a/src/main/java/altk/comm/engine/CommEngine.java +++ b/src/main/java/altk/comm/engine/CommEngine.java @@ -331,6 +331,7 @@ public abstract class CommEngine extends HttpServlet return; } broadcast.pause(); + out.print("OK"); } @@ -345,6 +346,7 @@ public abstract class CommEngine extends HttpServlet return; } broadcast.resume(); + out.print("OK"); } /** diff --git a/src/main/java/altk/comm/engine/Postback.java b/src/main/java/altk/comm/engine/Postback.java index 2033174..ef53986 100644 --- a/src/main/java/altk/comm/engine/Postback.java +++ b/src/main/java/altk/comm/engine/Postback.java @@ -146,30 +146,40 @@ public class Postback } // No reports - BroadcastState finalState = null; + BroadcastState toState = null; String reason = null; switch (broadcast.getState()) { case ALLDONE: - finalState = BroadcastState.COMPLETED; + toState = BroadcastState.COMPLETED; reason = "All posted"; break; case CANCELING: - finalState = BroadcastState.CANCELED; + if (broadcast.getActiveJobCount() > 0) break; + toState = BroadcastState.CANCELED; reason = "User canceled"; break; case PAUSING: - finalState = BroadcastState.PAUSED; + if (broadcast.getActiveJobCount() > 0) break; + toState = BroadcastState.PAUSED; reason = "User paused"; break; default: } - if (finalState != null) - { - broadcast.terminate(finalState, reason); - myLogger.info("All posted, thread terminating"); - return; - } + if (toState != null) + { + if (toState.isFinal) + { + broadcast.terminate(toState, reason); + myLogger.info("All posted, thread terminating"); + return; + } + else + { + broadcast.setState(toState); + return; + } + } if (broadcast.getState().isFinal) { // No more. Notify all waiting postback threads and exit thread