28. Comunicazione fra filmati
In questo capitolo vedremo come sarà possibile comunicare fra filmati residenti sullo stesso client, quindi in locale.
Non verrà perciò trattata la comunicazione fra filmati in remoto, che richiede in ogni caso una tecnologia server-side.
Di solito nel Web si trovano esempi che consentono ai filmati di comunicare fra di loro tramite JavaScript, un linguaggio client-side nativo dei browser che approfondiremo fra qualche capitolo.
Comunicare con JavaScript ha i suoi vantaggi, ma non è sempre possibile perché l'utente potrebbe utilizzare un vecchio
browser o avere addirittura il linguaggio disabilitato.
In ogni caso non è un metodo che ci consente un trasferimento dei
dati esattamente in tempo reale, poichè ci sarà sempre JavaScript a fare da ponte con tutte le conseguenze che può portare
sulle prestazioni, essendo quest'ultime strettamente legate al motore in uso dal browser.
Per far comunicare i nostri filmati, ActionScript 3 ci mette a disposizione la classe LocalConnection. Questa classe ci consentirà di creare un canale di connessione al quale il filmato ricevente rimarrà in ascolto per eventuali chiamate, mentre il filmato che invierà i dati si collegherà alla connessione solo al momento dell'invio. Creando più canali di connessione potremo abilitare i filmati sia alla ricezione che all'invio, inoltre attraverso la funzione allowDomain(), consentiremo la comunicazione fra filmati provenienti da diversi domini. L'esempio che segue riporta il codice di due filmati (ricezione e invio) e il codice della pagina HTML dove risiedono contemporaneamente i due filmati sopracitati, in modo da poterne verificare il corretto funzionamento. |
HelloWorld.as - Filmato di ricezione
package
{
import flash.text.TextField;
import flash.display.MovieClip;
import flash.net.LocalConnection;
public class HelloWorld extends MovieClip
{
private var output:TextField;
private var conn:LocalConnection;
public function HelloWorld():void
{
// Inizializziamo il campo di testo che visualizzerà il messaggio ricevuto
this.output = new TextField();
this.output.width = 250;
this.addChild(this.output);
// Inizializziamo la connessione e la mettiamo in ascolto su "miaconnessione"
this.conn = new LocalConnection();
this.conn.client = this;
this.conn.connect("miaconnessione");
}
public function funzione(messaggio:String):void
{
this.output.text = messaggio;
}
}
}Assegnando l'attributo client dell'istanza di LocalConnection all'oggetto this, consentiamo agli altri filmati di poter richiamare i metodi della classe corrente, quindi il metodo funzione().
Sender.as - Filmato di invio
package
{
import flash.net.LocalConnection;
import flash.events.MouseEvent;
import flash.display.MovieClip;
import fl.controls.TextInput;
public class Sender extends MovieClip
{
private var snd:LocalConnection;
private var input:TextInput;
public function Sender():void
{
/*
Inizializziamo il campo di input che raccoglierà il messaggio da inviare.
Per il corretto funzionamento è necessario che il componente "TextInput"
venga aggiunto alla libreria del filmato.
*/
this.input = new TextInput();
this.input.move(10, 10);
this.input.drawFocus(true);
this.addChild(this.input);
this.snd = new LocalConnection();
// Per inviare il messaggio basterà cliccare ovunque sullo stage
stage.addEventListener(MouseEvent.CLICK, this.click);
}
private function click(evt:MouseEvent):void
{
this.snd.send("miaconnessione", "funzione", this.input.text);
}
}
}test.html - Pagina di prova
<html> <body> <table border="1"> <tr> <td> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="250" height="150" id="Sender" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="allowFullScreen" value="false" /> <param name="movie" value="Sender.swf" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="wmode" value="transparent" /><param name="bgcolor" value="#ffffff" /> <embed src="Sender.swf" loop="false" menu="false" quality="best" wmode="transparent" bgcolor="#ffffff" width="250" height="150" name="Sender" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> </td> </tr> <tr> <td> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="250" height="150" id="hello world" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="allowFullScreen" value="false" /> <param name="movie" value="hello world.swf" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="wmode" value="transparent" /><param name="bgcolor" value="#ffffff" /> <embed src="hello world.swf" loop="false" menu="false" quality="best" wmode="transparent" bgcolor="#ffffff" width="250" height="150" name="hello world" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> </td> </tr> </table> </body> </html>
- Linguaggi:
- Tags:
