Bonjour,
je déploie mon site ce jour sur un hébergement ovh.
j’ai tout testé en local tout est ok, sur ovh tout est KO.
en clair, j’ai une page planning qui doit afficher se mettre à jour au fur et a mesure que les clients prennent rendez-vous. concrètement, j’ai une entity rendez-vous et une entity SSE. l’entity SSE s’incrémente lorsque la prise du rendez-vous est aujourd’hui avec l’id du planning, l’id du rendez-vous et un état (null par défaut)
voici le code sur la page planning qui intérroge la méthode SSEAction
<script>
$(document).ready(function(){
//server sent
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("{{ path('SSE', {'id': planning.id, 'date': date|date("d-m-Y") }) }}");
source.addEventListener('message', function(e) {
{# if (e.origin =="http://{{ app.request.server.get('SERVER_NAME') }}") { #}
source.onmessage = function(event) {
if(event.data != "null"){
console.log(event.data);
var audio = new Audio('{{ asset("son/msg.mp3") }}');
var promise = audio.play();
if (promise !== undefined) {
promise.then(_ => {
// Autoplay started!
}).catch(error => {
// Autoplay was prevented.
// Show a "Play" button so that user can start playback.
});
}
idrdv = event.data;
msg = "Nouveau rendez-vous positionné dans votre planning";
if (!("Notification" in window)) {
alert("Ce navigateur ne supporte pas les notifications desktop");
} else if (Notification.permission === "granted") {
var notification = new Notification(msg);
} else if (Notification.permission !== 'denied') {
Notification.requestPermission(function (permission) {
if(!('permission' in Notification)) {
Notification.permission = permission;
document.getElementById("snackbar-container").innerHTML = ' <div class="snackbar error fadeOut">Vous avez desactiver les notifications windows</div>';
}
if (permission === "granted") {
var notification = new Notification(msg);
}
});
}
{# document.getElementById("snackbar-container").innerHTML = ' <div class="snackbar notice fadeInUp"></div>'; #}
majRdv(idrdv);
}
};
{# } #}
});
} else {
document.getElementById("snackbar-container").innerHTML = ' <div class="snackbar error fadeOut">Désolé, votre browser n\'est pas supporté</div>';
}
});
la méthode SSEAction
/**
* server sent
* @param integer [$id] identifiant du planning
* @param date $date la date en francais 05-11-2018
* @return
*/
public function SSEAction(Request $request, $id, $date){
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$planning = $em->getRepository('AppBundle:Planning')->find($id);
$rdvs = $em->getRepository('AppBundle:SSE')->findBy(array('planning'=>$planning, 'etat'=>null));
if($rdvs){
foreach($rdvs as $rdv){
echo "data: {$rdv->getRendezvous()->getId()} \n\n";
$rdv->setEtat(1);
}
} else {
echo "data:null\n\n";
}
flush();
$em->flush();
return new Response();
}
dans la console j’ai bien mon retour comme quoi il n’y a pas de nouveaux rendez-vous mais lorsqu’un rendez-vous se positionne, la base de donnée ce met à jour (on met 1 à la place de null dans l’etat de la table SSE) mais la connexion SSE ne me renvoi pas le data.