function createNLC($kml_data_file, $connection_timeout = 60) { $client_timestamp = getOrDefault('t', 0); $client_kmls = getOrDefault('client_kmls', ''); if ($client_kmls != '') { $client_kml_list = array_fill_keys(explode(',', $client_kmls), ''); } else { $client_kml_list = array(); } #keep connection alive for $connection_timeout seconds $start = microtime(true); set_time_limit($connection_timeout + 1); $new_data = False; for ($i = 0; $i < $connection_timeout; $i += 1) { clearstatcache(); $file_mod = filemtime($kml_data_file); echo "<!--" . $file_mod . "-->\n"; if ($file_mod > $client_timestamp) { $add_del_keep = getSyncLists($client_kml_list, $kml_data_file); $kml = makeNLCUpdate($add_del_keep[0], $add_del_keep[1], $add_del_keep[2], $file_mod, $connection_timeout); outputKML($kml); $new_data = True; echo "</kml>"; exit(0); #need to break the loop. $i = $connection_timeout; } time_sleep_until($start + $i + 1); } #Make sure to provide the cookie if no changes detected. Else NL loses cookie and dup. features if (!$new_data) { $kml = "\n <NetworkLinkControl>\n <minRefreshPeriod>1</minRefreshPeriod>\n <maxSessionLength>-1</maxSessionLength>\n <cookie><![CDATA[t=%s&client_kmls=%s]]></cookie> \n </NetworkLinkControl>\n"; echo sprintf($kml, $client_timestamp, $client_kmls); } }
function syncTouchscreenChoices($kml_data_file) { $touch_kml = trim(getOrDefault('touch_kml', '')); $touch_action = getOrDefault('touch_action', ''); $kml_url_list = getKmlListUrls($kml_data_file); # If delete action, remove element from array if ($touch_action == 'delete' && in_array($touch_kml, $kml_url_list)) { $index = array_search($touch_kml, $kml_url_list); unset($kml_url_list[$index]); writeKmlListFile($kml_data_file, $kml_url_list); } else { if ($touch_action == 'add' && !in_array($touch_kml, $kml_url_list)) { $kml_url_list[md5($touch_kml)] = $touch_kml; writeKmlListFile($kml_data_file, $kml_url_list); } } }