1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| <?php
error_reporting(E_ALL);
ini_set("display_errors", "On");
define('_VERSION','1.0.5');
define('_PS_ADMIN_DIR','../../');
include(_PS_ADMIN_DIR.'config/config.inc.php');
{ session_start();
// *partA*
// On récupère les timestamp des tables de la base de données
// Les timestamp sont stockés dans une table car (voir mon problème 2 :-)
$req='SELECT * FROM `xxx.data` WHERE `xxx.data`.`varId`=1;';
$res=Db::getInstance()->executeS($req);
$stamps=[];
if ($res[0]['varData']!='')
{ $tmp=explode('|',$res[0]['varData']);
for($i=0;$i<count($tmp);$i++)
{ $data=explode('=',$tmp[$i]);
$stamps[$data[0]]=$data[1];
}
}
$update='';
// *partB*
// Si les timestamp de $_SESSION sont inexistant ou inférieurs aux timestamp de la base de donnée, on signifie une demande de mise à jour
foreach($stamps as $key=>$value)
{ if(!isset($_SESSION[$key]) || (($value-$_SESSION[$key])>20))
{ $update.=$key.'-'.$_SESSION[$key].'-'.$value;
$_SESSION[$key]=$value;
$update.='-'.$_SESSION[$key].'|';
}
}
$update=substr($update,0,-1);
session_start();
// *partC*
// headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: text/event-stream");
header('Cache-Control: no-cache');
if($update!='')
{ // *partD*
// On envoie un message SSE au Process 1 du client pour signifier une mise à jour nécessaire
echo 'data: '._VERSION.':'.$update."\n\n";
}
else
{
// *partE*
}
session_write_close();
sleep(20);
}
?> |
Partager