39 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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;
 | |
| }
 | |
| 
 |