Ciao a tutti, actionscripters e non...
Vorrei introdurre questa prima parte di un tutorial che arriverà a farvi conoscere come poter sviluppare un orologio utilizzando Flash CS3 e PHP
PHP perchè, per fare un bel lavoro, bisogna recuperare il tempo universale in secondi dal server.
Il motivo è semplice, la classe Date di Actionscript 3.0 non è sufficiente in quanto recupera la data e ora dalla macchina dell' utente per cui non è affidabile.
Ogni utente potrebbe avere impostato un data diversa e invece noi vogliamo che a chiunque si colleghi ( che sia italiano o giapponese ) venga visualizzata l' ora e data in cui si trova il server.

Dunque, partiamo... Creo un FLA che salvo con nome ' orario_server.fla ', al cui interno ho un campo di testo dinamico che chiamerò format_txt.
Creola Document Class, un file AS che slavocon nome ' Orario.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.text.TextField;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLVariables;
	import flash.net.navigateToURL;
	import flash.utils.Timer;
	import flash.events.*;
	import flash.ui.ContextMenu;
	import flash.ui.ContextMenuItem;
	
	public class Orario extends MovieClip
	{
		private var days_array:Array;
		private var months_array:Array;
		
		private var serverTime:Number;
		
		public function Orario()
		{
			init();
		}
		
		private function init():void
		{
			days_array=new Array('Domenica','Lunedi','Martedi','Mercoledi','Giovedi',
			'Venerdi','Sabato');
			months_array=new Array('Gennaio','Febbraio','Marzo','Aprile','Maggio',
			'Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
			
			callServer();
		}
		
		private function callServer():void
		{
			var richiesta:URLRequest=new URLRequest();
			richiesta.url='http://www.flepstudio.org/gettime.php';
			var loader:URLLoader=new URLLoader();
			addListeners(loader);
			try 
			{
				loader.load(richiesta);
			} 
			catch (error:Error) 
			{
				trace('Unable to load requested document.');
			}
		}
		
		private function addListeners(d:IEventDispatcher):void
		{
			d.addEventListener(Event.COMPLETE,completato);
		}
		
		private function completato(e:Event):void
		{
			var loader:URLLoader=URLLoader(e.target);
			var vars:URLVariables=new URLVariables(loader.data);
			serverTime=vars.time;
			
			initTime();
		}
		
		private function initTime():void
		{
			var server_milliseconds:Number=serverTime*1000;
			
			var real_date:Date=new Date(server_milliseconds);
			
			var hours:int=real_date.getHours();
			var minutes:int=real_date.getMinutes();
			var seconds:int=real_date.getSeconds();
			var day_of_the_week:String=days_array[real_date.getDay()];
			var day:int=real_date.getDate();
			var month:String=months_array[real_date.getMonth()];
			var year:int=real_date.getFullYear();
			
			var hours_str:String=hours.toString();
			if(hours<10)
				hours_str='0'+hours.toString();
			var minutes_str:String=minutes.toString();
			if(minutes<10)
				minutes_str='0'+minutes.toString();
			var seconds_str:String=seconds.toString();
			if(seconds<10)
				seconds_str='0'+seconds.toString();
			
			format_txt.text=hours_str+':'+minutes_str+':'+seconds_str+'\n'+
			day_of_the_week+' '+day+' '+month+'\n'+year;
		}
	}
}
il risultato:










Analizziamo il codice:

Proprietà

due Arrays incui inserire i nomi dei giorni e mesi in italiano
private var days_array:Array;
private var months_array:Array;
una variabile numerica in cui inserirò il tempo universale in secondi che ricevo dallo script PHP
private var serverTime:Number;

Metodi:
init();
inizializzo gli Arrays
days_array=new Array('Domenica','Lunedi','Martedi','Mercoledi','G iovedi','Venerdi','Sabato');
months_array=new Array('Gennaio','Febbraio','Marzo','Aprile','Maggi o','Giugno','Luglio','Agosto','Settembre','Ottobre ','Novembre','Dicembre');
chiamo il metodo callServer;
callServer();

callServer();
faccio richiesta di un nuovo url istanziando la classe URLRequest
var richiesta:URLRequest=new URLRequest();
assegno alla proprietà url di URLRequest l' url del file PHP
richiesta.url='http://www.flepstudio.org/gettime.php';
istanzio la classe URLLoader
var loader:URLLoader=new URLLoader();
aggiungo i listeners necessari chiamando la funzione addListeners e chiamo lo script PHP
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}

addListeners();
aggiungo un listener in ascolto dell' evento COMPLETE, quindi quando il PHP avrà restituito il valore, sarà chiamata la funzione completato()
d.addEventListener(Event.COMPLETE,completato);

completato();

istanzio la classe Loader per recuperare chi ha dispacciato l' evento
var loader:URLLoader=URLLoader(e.target);
creo una variabile di tipo URLVariables per recuperare i valori restituiti dal PHP e assegno alla variabile serverTime tali valori
var vars:URLVariables=new URLVariables(loader.data);
serverTime=vars.time;

initTime();
creo una variabile in cui inserisco il valore dei secondi del server moltiplicati per 1000 in modo da ottenere i millisecondi
var server_milliseconds:Number=serverTime*1000;
creo un variabile di tipo Date a cui passo il valore dei millisecondi ( ecco perchè ho trasformato il valore a millisecondi di serverTime
var real_date:Date=new Date(server_milliseconds);
creo una variabile in cui inserisco il valore delle ore corrente utilizzando getHours di Date
var hours:int=real_date.getHours();
creo una variabile in cui inserisco il valore dei minuti correnti utilizzando getMinutes di Date
var minutes:int=real_date.getMinutes();
creo una variabile in cui inserisco il valore dei secondi correnti utilizzando getSeconds di Date
var seconds:int=real_date.getSeconds();

creo una variabile in cui inserisco il valore dell' Array days_array con indice pari al numero del giorno -1 ( perchè i giorni del mese partono da 1 ma gli Arrays in programmazione partono da zero )
var day_of_the_week:String=days_array[real_date.getDay()-1];
creo una variabile in cui inserisco la data del giorno odierno utilizzando getDate di Date
var day:int=real_date.getDate();
creo una variabile in cui inserisco il valore dell' Array months_array con indice pari al numero del mese
var month:String=months_array[real_date.getMonth()];
creo una variabile in cui inserisco il valore dell' anno corrente utilizzando getFullYear di Date
var year:int=real_date.getFullYear();
adesso devo controllare però se i valori delle ore, minuti e secondi sono minori di 10 in quanto se lo sono devo aggiungere uno zero altrimenti risulterebbe brutto vedere unformato ora di questo tipo: 9:7:8 invece di 09:07:08, quindi creo una variabile di tipo stringa per ogniuno di loro a cui assegno il rispettivo valore. Poi faccio il controllo e se il valore è minore di10 assegno uno zero prima del valore numerico ( il tutto concatenato a stringha )
var hours_str:String=hours.toString();
if(hours<10)
hours_str='0'+hours.toString();
var minutes_str:String=minutes.toString();
if(minutes<10)
minutes_str='0'+minutes.toString();
var seconds_str:String=seconds.toString();
if(seconds<10)
seconds_str='0'+seconds.toString();
infine posso adesso assegnare i valori al mio campo di testo sullo stage ( format_txt ) utilizzando un concatenamento tra stringhe e numeri
format_txt.text=hours_str+':'+minutes_str+':'+seco nds_str+'\n'+day_of_the_week+' '+day+' '+month+'\n'+year;

Questo è lo script PHP che viene chiamato:
PHP Code:
<?php
header
("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0"false);
header("Pragma: no-cache");
echo 
"time=" time();
?>
Alla prossima !