From b700113b8820e53e0b7b18b31e3e6a098d56181f Mon Sep 17 00:00:00 2001 From: Lexi Quinn Date: Mon, 21 Aug 2023 00:40:13 +1000 Subject: [PATCH] changed mind, added helpers to derive pausedTime without a global --- src2/server.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/src2/server.c b/src2/server.c index 05d94d8..6de1be4 100644 --- a/src2/server.c +++ b/src2/server.c @@ -474,11 +474,11 @@ int current_ms() { if (timerActive) clock_gettime(CLOCK_REALTIME, &finish); - if (paused) { - sub_timespec(run[0].time, run[runMarker - 1].time, &delta); - } else { + //if (paused) { + // sub_timespec(run[0].time, run[runMarker - 1].time, &delta); + //} else { sub_timespec(run[0].time, finish, &delta); - } + //} return timespecToMS(delta); } @@ -624,6 +624,24 @@ void process_socket_input(int sock) token = strtok(NULL, " "); if (!strcmp(token, "current_time")) { sendInt(sock, current_ms()); + } else if (!strcmp(token, "current_time_with_pause")) { + int running_pause = 0; + struct timespec p, r; + bool tracking_pause = false; + for (int i = 0; i < runMarker; i++) { + if (run[i].type == PAUSE) { + sub_timespec(run[0].time, run[i].time, &p); + tracking_pause = true; + } + if (run[i].type == RESUME) { + sub_timespec(run[0].time, run[i].time, &r); + running_pause += timespecToMS(r) - timespecToMS(p); + tracking_pause = false; + } else if (i == runMarker - 1 && tracking_pause) { + running_pause += current_ms() - timespecToMS(p); + } + } + sendInt(sock, current_ms() - running_pause); } else if (!strcmp(token, "run_count")) { sendInt(sock, run_count); } else if (!strcmp(token, "segment_count")) { @@ -670,6 +688,35 @@ void process_socket_input(int sock) struct timespec t; sub_timespec(run[0].time, run[x].time, &t); sendInt(sock, timespecToMS(t)); + } else if (!strcmp(token, "event_time_with_pause")) { + token = strtok(NULL, " "); + int x; + if (!strcmp(token, "last")) + x = runMarker - 1; + else if (!strcmp(token, "first")) + x = 0; + else + x = atoi(token); + int running_pause = 0; + struct timespec p, r; + bool tracking_pause = false; + for (int i = 0; i < x; i++) { + if (run[i].type == PAUSE) { + sub_timespec(run[0].time, run[i].time, &p); + tracking_pause = true; + } + if (run[i].type == RESUME) { + sub_timespec(run[0].time, run[i].time, &r); + running_pause += timespecToMS(r) - timespecToMS(p); + tracking_pause = false; + } else if (i == x - 1 && tracking_pause) { + sub_timespec(run[0].time, run[x].time, &r); + running_pause += timespecToMS(r) - timespecToMS(p); + } + } + struct timespec t; + sub_timespec(run[0].time, run[x].time, &t); + sendInt(sock, timespecToMS(t) - running_pause); } else if (!strcmp(token, "event_type")) { token = strtok(NULL, " "); int x;