diff --git a/app/view/pages/race/live-results.php b/app/view/pages/race/live-results.php new file mode 100644 index 0000000..52ebbb7 --- /dev/null +++ b/app/view/pages/race/live-results.php @@ -0,0 +1,30 @@ +

Live resultater

+

Venter på data...

+ + \ No newline at end of file diff --git a/app/view/template/header.php b/app/view/template/header.php index 0f36deb..83f24b8 100644 --- a/app/view/template/header.php +++ b/app/view/template/header.php @@ -38,6 +38,7 @@

Felles

user->loggedIn): ?> diff --git a/public/race/live-results.php b/public/race/live-results.php new file mode 100644 index 0000000..3390160 --- /dev/null +++ b/public/race/live-results.php @@ -0,0 +1,5 @@ +view('template/header', ["title" => "Live resultater"]); +$app->view('pages/race/live-results'); +$app->view('template/footer'); \ No newline at end of file diff --git a/public/race/long-polling.php b/public/race/long-polling.php new file mode 100644 index 0000000..3b72f4f --- /dev/null +++ b/public/race/long-polling.php @@ -0,0 +1,38 @@ +database->conn); + +/** + * Long polling + */ +session_write_close(); +ignore_user_abort(false); +set_time_limit(30); + +// if ajax request has send a timestamp, then $last_ajax_call = timestamp, else $last_ajax_call = null +$last_ajax_call = isset($_GET['timestamp']) ? (int)$_GET['timestamp'] : NULL; + +// main loop +while(TRUE) +{ + $time = $timeMapper->getLatest(); + + if ($time) + { + $last_change_in_timetable = $time->date->getTimestamp(); + + if ($time && $last_ajax_call == NULL || $last_change_in_timetable > $last_ajax_call) + { + exit(json_encode(["data" => json_encode($timeMapper->getAll()), "timestamp" => $last_change_in_timetable])); + } + } + + // PHP caches file data, like requesting the size of a file, by default. clearstatcache() clears that cache + clearstatcache(); + // wait for 1 sec (not very sexy as this blocks the PHP/Apache process, but that's how it goes) + sleep(1); + continue; +} +