La classe LocalConnection consente di sviluppare file SWF in grado di inviare istruzioni ad altri file SWF senza utilizzare il metodo fscommand() o JavaScript. Gli oggetti LocalConnection possono comunicare solo tra file SWF in esecuzione sullo stesso computer client, tuttavia possono essere eseguiti in applicazioni diverse. Ad esempio, un file SWF in esecuzione in un browser e un file SWF in esecuzione in un proiettore possono condividere le informazioni: il proiettore gestisce le informazioni locali, mentre il file SWF basato su browser si connette in remoto. Un proiettore è un file SWF salvato in un formato che può essere eseguito come applicazione autonoma, ovvero senza richiedere l'installazione di Flash Player essendo incorporato nell'eseguibile.
Gli oggetti LocalConnection possono essere utilizzati per la comunicazione tra file SWF che utilizzano versioni diverse di ActionScript:
-
Gli oggetti LocalConnection di ActionScript 3.0 sono in grado di comunicare con gli oggetti LocalConnection creati in ActionScript 1.0 e 2.0.
-
Gli oggetti LocalConnection di ActionScript 1.0 e 2.0 sono in grado di comunicare con gli oggetti LocalConnection creati in ActionScript 3.0.
Flash Player gestisce in modo automatico questa comunicazione tra oggetti LocalConnection di versioni diverse.
Il modo più semplice di usare un oggetto LocalConnection consiste nel consentire la comunicazione soltanto tra gli oggetti LocalConnection che si trovano nello stesso dominio o nella stessa applicazione AIR. In questo modo, non dovete preoccuparvi dei problemi legati alla sicurezza. Tuttavia, se dovete permettere la comunicazione tra domini diversi, esistono vari modi per implementare delle misure di sicurezza. Per ulteriori informazioni, vedete la discussione del parametro
connectionName
del metodo
send()
e le voci
allowDomain()
e
domain
nella classe
LocalConnection
elencata nella
Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash
.
È possibile utilizzare gli oggetti LocalConnection per inviare e ricevere dati in un solo file SWF; Adobe consiglia tuttavia di non utilizzare questo metodo. Utilizzate invece oggetti condivisi.
Sono disponibili tre modi per aggiungere metodi di callback agli oggetti LocalConnection:
-
Creare una sottoclasse della classe LocalConnection e aggiungere dei metodi.
-
Impostare la proprietà
LocalConnection.client
su un oggetto che implementi i metodi.
-
Creare una classe dinamica per estendere LocalConnection e associare in modo dinamico i metodi.
Il primo modo per aggiungere i metodi di callback consiste nell'estendere la classe LocalConnection. Definite i metodi all'interno della classe personalizzata anziché aggiungerli in modo dinamico all'istanza di LocalConnection. Questo approccio viene illustrato nel codice riportato di seguito:
package
{
import flash.net.LocalConnection;
public class CustomLocalConnection extends LocalConnection
{
public function CustomLocalConnection(connectionName:String)
{
try
{
connect(connectionName);
}
catch (error:ArgumentError)
{
// server already created/connected
}
}
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
Per creare una nuova istanza della classe CustomLocalConnection, potete utilizzare il codice riportato di seguito:
var serverLC:CustomLocalConnection;
serverLC = new CustomLocalConnection("serverName");
Il secondo modo per aggiungere i metodi di callback consiste nell'utilizzare la proprietà
LocalConnection.client
. In questa fase occorre creare una classe personalizzata e assegnare una nuova istanza alla proprietà
client
come illustrato nel codice riportato di seguito:
var lc:LocalConnection = new LocalConnection();
lc.client = new CustomClient();
La proprietà
LocalConnection.client
indica i metodi di callback dell'oggetto da chiamare. Nel codice precedente la proprietà
client
è stata impostata su una nuova istanza della classe personalizzata CustomClient. Il valore predefinito per la proprietà
client
è l'istanza di LocalConnection corrente. Potete utilizzare la proprietà
client
se disponete di due gestori di dati con lo stesso set di metodi ma con un funzionamento diverso; ad esempio, in un'applicazione dove un pulsante in una finestra attiva/disattiva la vista in una seconda finestra.
Per creare la classe CustomClient, è possibile utilizzare il seguente codice:
package
{
public class CustomClient extends Object
{
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
Il terzo modo per aggiungere i metodi di callback, creando una classe dinamica e associando in modo dinamico i metodi, è molto simile all'utilizzo della classe LocalConnection nelle versioni precedenti di ActionScript, come illustrato nel codice riportato di seguito:
import flash.net.LocalConnection;
dynamic class DynamicLocalConnection extends LocalConnection {}
I metodi di callback possono essere aggiunti in modo dinamico a questa classe utilizzando il codice riportato di seguito:
var connection:DynamicLocalConnection = new DynamicLocalConnection();
connection.onMethod = this.onMethod;
// Add your code here.
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
Il precedente modo di aggiungere i metodi di callback non è consigliato, perché il codice non è molto portabile. Inoltre, l'utilizzo di questo metodo per la creazione delle connessioni locali potrebbe causare problemi a livello di prestazioni perché l'accesso alle proprietà dinamiche è significativamente più lento dell'accesso alle proprietà chiuse.
Proprietà isPerUser
La proprietà
isPerUser
è stata aggiunta a Flash Player (10.0.32) e AIR (1.5.2) per risolvere un conflitto che si verifica quando più utenti sono collegati a un computer Mac. In altri sistemi operativi, la proprietà viene ignorata poiché la connessione locale ha sempre avuto come area di validità i singoli utenti. La proprietà
isPerUser
deve essere impostata su
true
nel nuovo codice. Tuttavia, il valore predefinito è attualmente
false
per la compatibilità con le versioni precedenti. L'impostazione predefinita può essere modificata nelle versioni future dei runtime.