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