This commit is contained in:
William 2022-03-30 08:51:46 +00:00
parent 2f19e5eb4e
commit aebd249237
5 changed files with 52 additions and 47 deletions

View File

@ -72,7 +72,7 @@ class App
/**
* Turn data array into json response
*/
public function api(array $data, int $status_code = 200): void
public function api($data, int $status_code = 200): void
{
// set headers
http_response_code($status_code);

View File

@ -1,6 +1,6 @@
<h1>Live resultater</h1>
<br>
<table>
<table id ="table">
<tr>
<th>Some shit</th>
<th>Some shit</th>
@ -8,9 +8,24 @@
</table>
<script>
var es = new EventSource('stream.php');
es.onmessage = function(event)
hash = 0;
async function doTheThang()
{
console.log("New message", event.data);
};
response = await fetch("sync.php?hash=" + hash);
if (response.status === 204)
{
return;
}
json = await response.json();
hash = json.hash;
data = json.data;
document.getElementById("table").innerHTML = json.data;
}
setInterval(function() { doTheThang() }, 1000)
doTheThang();
</script>

View File

@ -1,12 +1,14 @@
<?php $app = require '../../app/inc.php';
// uh oh.. stinky
$cardreader = $app->model('Cardreader');
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
if (isset($_POST['cardnumber']) && strlen($_POST['cardnumber']) !== 0)
if (isset($_POST['cardnumber']) && strlen((string)$_POST['cardnumber']) !== 0)
{
$cardnumber = $_POST['cardnumber'];
$cardnumber = (string)$_POST['cardnumber'];
try {
$code = $cardreader->receive($cardnumber, 5);

View File

@ -1,39 +0,0 @@
<?php $app = require '../../app/inc.php';
use App\Teamtable\TeamMapper;
use App\Timetable\TimeMapper;
use App\SSE\EventLoop;
use App\SSE\StopEventLoopException;
$teamMapper = new TimeMapper($app->database->conn);
$timeMapper = new TimeMapper($app->database->conn);
/**
* Send events to client with Server-Sent Events(SSE)
*/
$sse = new EventLoop();
$sse->interval = 1;
$persist_obj = new class {
public ?int $prev_last_insert = NULL;
};
$sse->start(
function () use ($timeMapper, $teamMapper, &$persist_obj) {
$time = $timeMapper->getLatest();
if ($time)
{
$last_insert = $time->date->getTimestamp();
if ( $persist_obj->prev_last_insert == NULL
|| $last_insert > $persist_obj->prev_last_insert
) {
$persist_obj->prev_last_insert = $last_insert;
return($timeMapper->getAll());
}
}
}
);

27
public/race/sync.php Normal file
View File

@ -0,0 +1,27 @@
<?php $app = require '../../app/inc.php';
/**
* We originally wanted to use SSE for this, but the hosting provider
* did not support that so we resorted to simple polling instead
*/
use App\Teamtable\TeamMapper;
use App\Timetable\TimeMapper;
$teamMapper = new TimeMapper($app->database->conn);
$timeMapper = new TimeMapper($app->database->conn);
$prev_hash = (int)filter_input(INPUT_GET, 'hash');
$times = $timeMapper->getAll();
$hash = crc32(serialize($timeMapper->getAll()));
if ($prev_hash !== $hash)
{
$app->api([
"hash" => $hash,
"data" => $times
]);
}
// return nothing
http_response_code(204);