Commit
This commit is contained in:
parent
87c1a0c1c5
commit
ecded9573d
30
app/view/pages/race/live-results.php
Normal file
30
app/view/pages/race/live-results.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<h1>Live resultater</h1>
|
||||||
|
<p id="response">Venter på data...</p>
|
||||||
|
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function getContent(timestamp)
|
||||||
|
{
|
||||||
|
var queryString = {'timestamp' : timestamp};
|
||||||
|
|
||||||
|
$.ajax(
|
||||||
|
{
|
||||||
|
type: 'GET',
|
||||||
|
url: 'long-polling.php',
|
||||||
|
data: queryString,
|
||||||
|
success: function(data){
|
||||||
|
// put result data into "obj"
|
||||||
|
var obj = jQuery.parseJSON(data);
|
||||||
|
// put the data_from_file into #response
|
||||||
|
$('#response').html(obj.data);
|
||||||
|
// call the function again, this time with the timestamp we just got from server.php
|
||||||
|
getContent(obj.timestamp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialize jQuery
|
||||||
|
$(function() {
|
||||||
|
getContent();
|
||||||
|
});
|
||||||
|
</script>
|
@ -38,6 +38,7 @@
|
|||||||
<h4>Felles</h4>
|
<h4>Felles</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<?=$this->config['root_url']?>index.php">Forside</a></li>
|
<li><a href="<?=$this->config['root_url']?>index.php">Forside</a></li>
|
||||||
|
<li><a href="<?=$this->config['root_url']?>race/live-results.php">Resultater</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<?php if ($this->user->loggedIn): ?>
|
<?php if ($this->user->loggedIn): ?>
|
||||||
|
5
public/race/live-results.php
Normal file
5
public/race/live-results.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php $app = require '../../app/inc.php';
|
||||||
|
|
||||||
|
$app->view('template/header', ["title" => "Live resultater"]);
|
||||||
|
$app->view('pages/race/live-results');
|
||||||
|
$app->view('template/footer');
|
38
public/race/long-polling.php
Normal file
38
public/race/long-polling.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php $app = require '../../app/inc.php';
|
||||||
|
|
||||||
|
use App\Timetable\TimeMapper;
|
||||||
|
|
||||||
|
$timeMapper = new TimeMapper($app->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;
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user