Commit
This commit is contained in:
parent
2f19e5eb4e
commit
aebd249237
@ -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);
|
||||
|
@ -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>
|
@ -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);
|
||||
|
@ -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
27
public/race/sync.php
Normal 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);
|
Reference in New Issue
Block a user