le fichier update.online.php
est un fichier de
DialogueDescendant : il est appelé et s'adresse à Google Earth
Il est appelé automatiquement avec
online.php avec un cookie contenant la liste des pilotes connus en vol par le client
réponse
Il interroge la base 1000_online pour en extraire les pilotes ayant bougé dans la dernière minute
un fichier kmz qui contient :
- des updates de création d'objets pour les nouveaux arrivants
- des updates d'effacement d'objet pour les pilotes disparrus
- des updates de mise à jour de position pour les pilotes en cours de vol (non encore implémenté)
- un nouveau cookie contenant la liste des pilotes en vol
paramètres
passés par " <viewFormat>BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]; $pilote </viewFormat>"
pilote : le nom du pilote qui demande la liste
cookie contient la liste des pilotes connus : joj=envol;biol=envol; .....
exemple
http://earth.1000lieues.net/server/update.online.php?BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth];CdrikO&LeonarDeVinci=envol;SantosDumont=envol
code
<?php
//l'appel est de la forme :
//<viewFormat>BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth];CdrikO</viewFormat>
include("settings.php");
include("vignette.php");
$bbox=$_GET['BBOX'];
$nargs=count($_GET);
$donnees=explode(";",$bbox);
$box=$donnees[0];
$pilotes = array();
$moimeme=$donnees[1];///nom du pilote demandeur
///liste des pilotes déjà connus par le client
while (list($pilote, $etat) = each($_GET)) {
if ($pilote!="BBOX"){///la suite est de la forme jojo=envol;bill=ausol;tartempion=looping
///$pilote est le nom du premier pilote, le reste doit être dépouillé
$listcookie=explode(";",$etat);
$etat=$listcookie[0];
///premier pilote
$pilotes[$pilote]="posé";
///dépouillement du reste
for ($i = 1; $i < count($listcookie); $i++) {
$infos=explode("=",$listcookie[$i]);
$pilote=$infos[0];
$etat=$infos[1];
$pilotes[$pilote]="posé";
}
}
}
///$pilotes contient maintenant la liste des pilotes connus par le client
////nouvelles infos venant du serveur
// Connexion et sélection de la base
$link = mysql_connect($Msql_host, $Msql_user, $Msql_psword) or die("Impossible de se connecter");
//echo "Connexion réussie";
mysql_select_db($Msql_DB) or die("Could not select database");
// Exécuter des requêtes SQL
//SELECT * FROM `1000_online` WHERE `pilote` NOT LIKE 'CdrikO' AND `lastmodif` >DATE_SUB(NOW(),INTERVAL 20 MINUTE)
//selectionne les pilotes qui ne sont pas moimême et qui ont été modifiés dans la dernière minute
//$query = "SELECT pilote,longitude,latitude,altitude,head FROM 1000_online where pilote not like ".$moimeme." and lastmodif > DATE_SUB(NOW(),INTERVAL 1 DAY)";
$query = "SELECT * FROM 1000_online where pilote != '".$moimeme."' and lastmodif > (NOW()-100)";
//$query = "SELECT * FROM 1000_online ";
$result = mysql_query($query) or die("Query failed");
$update="";
while ($ligne = mysql_fetch_assoc($result)) {//tous les pilotes en vol
if (array_key_exists($ligne["pilote"], $pilotes)) {//je connais déjà le pilote
///mise à jour de sa position
//s'il est dans le champ, l'affiche comme un tapis volant
///mise à jour de son image si elle a changé
///s'il est loin, l'affiche dans le hud
}else{///c'est un pilote que je ne connaissait pas
//crée la boite du pilote
$update=$update.nouveauPilote($ligne["pilote"], $ligne["longitude"], $ligne["latitude"], $ligne["altitude"], $ligne["head"]);
$retour=$retour.$ligne["pilote"]." a été créé<br>";
}
//if (isset($login_array[$user_name])){
$pilotes[$ligne["pilote"]]="envol";
//}
}
// Libération des résultats
mysql_free_result($result);
// Fermeture de la connexion
mysql_close($link);
///mise à jour du cookie
while (list($pilote, $etat) = each($pilotes)) {
if($etat=="posé"){
if ($pilote!=""){
$update=$update.efface($pilote);
$retour=$retour.$pilote." est effacé<br>";
//$cookie=$cookie.$pilote."=posé;";
}
}else{
$cookie=$cookie.$pilote."=".$etat.";";
$retour=$retour.$pilote." est $etat <br>";}
}
///efface le dernier ;
$cookie=substr($cookie,0,-1);
/*<?xml version=\"1.0\" encoding=\"UTF-8\"?>*/
$kml="<kml xmlns=\"http://earth.google.com/kml/2.2\">
<NetworkLinkControl>
<cookie>".$cookie."</cookie>
<linkName>Dernières Nouvelles pour $moimeme </linkName>
<linkSnippet maxLines=\"20\"><![CDATA[ $retour <br><br> * $cookie *]]></linkSnippet>
<linkDescription></linkDescription>
<Update>
<targetHref>".$server."online.new.php?pilote=".$moimeme."</targetHref>
".$update."
</Update>
</NetworkLinkControl>
</kml>";
include_once("kmz.php");
kmz($kml);
//echo ($kml);
////fonctions intégrées
function efface($pilote){
$bloc="<Delete>
<Folder targetId=\"".$pilote."\"></Folder>
</Delete> ";
return $bloc;
}
function nouveauPilote($pilote, $longitude, $latitude, $altitude, $head){
$vignette=vignette($pilote);
if (file_exists("zamis/".$pilote.".jpg")) {
$image="zamis/".$pilote.".jpg";
}else{
$image="defaut.jpg";
}
$cap=360-$head;
$nouveauBloc="<Create>
<Folder targetId=\"actuellement en vOl\">
<Folder id=\"".$pilote."\"><name>$pilote</name><styleUrl>#fermé</styleUrl>
<description><![CDATA[ $pilote<br> ]]> </description>
<Placemark><name>$pilote</name><styleUrl>#sans_icone</styleUrl>
<LookAt id=\"vue_".$pilote."\">
<longitude>".$longitude."</longitude>
<latitude>".$latitude."</latitude>
<altitude>".$altitude."</altitude>
<heading>".$cap."</heading>
<tilt>70</tilt>
<range>2000</range>
<altitudeMode>absolute</altitudeMode>
</LookAt>
<Point id=\"etiquette_".$pilote."\"><coordinates> $longitude, $latitude, $altitude </coordinates>
<altitudeMode>absolute</altitudeMode>
</Point></Placemark>
<GroundOverlay id=\"tapis_".$pilote."\"><color>75ffffff</color>
<Icon>
<href>".$server.$image."</href>
<viewBoundScale>0.005</viewBoundScale>
</Icon>
<altitude>".$altitude."</altitude>
<altitudeMode>absolute</altitudeMode>
<LatLonBox>
<north>".($latitude+0.0003)."</north>
<south>".($latitude-0.0003)."</south>
<east>".($longitude-0.0004)."</east>
<west>".($longitude+0.0004)."</west>
<rotation>".$cap."</rotation>
</LatLonBox>
</GroundOverlay>
<ScreenOverlay id=\"flech_".$pilote."\" >
<Icon>
<href>".$server.$vignette."</href>
</Icon>
<overlayXY x=\"0.5\" y=\"-1\" xunits=\"fraction\" yunits=\"fraction\"/>
<screenXY x=\"0.5\" y=\"0.9\" xunits=\"fraction\" yunits=\"fraction\"/>
<rotationXY x=\"0.5\" y=\"0.5\" xunits=\"fraction\" yunits=\"fraction\"/>
<rotation>45</rotation>
<size x=\"-1\" y=\"-1\" xunits=\"fraction\" yunits=\"fraction\"/>
</ScreenOverlay>
</Folder>
</Folder>
</Create> ";
return $nouveauBloc;
}
?>