Documentación de Flash CS3 |
|||
| Programación con ActionScript 3.0 > Redes y comunicación > Conexión a otras instancias de Flash Player | |||
La clase LocalConnection permite la comunicación entre distintas instancias de Flash Player como, por ejemplo, un archivo SWF en un contenedor HTML, o en un reproductor autónomo o incorporado. Esto permite generar aplicaciones muy versátiles que pueden compartir datos entre instancias de Flash Player como, por ejemplo, archivos SWF ejecutados en un navegador Web o incorporados en aplicaciones de escritorios.
La clase LocalConnection permite desarrollar archivos SWF capaces de enviar instrucciones a otros archivos SWF sin utilizar el método fscommand() ni JavaScript. Los objetos LocalConnection sólo pueden comunicarse con archivos SWF que se ejecuten en el mismo equipo cliente, aunque pueden ejecutarse en aplicaciones distintas. Por ejemplo, un archivo SWF que se ejecuta en un navegador y un archivo SWF que se ejecuta en un proyector pueden compartir información, y el proyector conserva la información local y el archivo basado en el navegador se conecta de forma remota. (Un proyector es un archivo SWF guardado en un formato que puede ejecutarse como una aplicación autónoma, es decir, que el proyector no requiere que se instale Flash Player porque está incorporado en el ejecutable.)
Los objetos LocalConnection se pueden utilizar para comunicarse entre archivos SWF con distintas versiones de ActionScript:
Flash Player controla automáticamente esta comunicación entre objetos LocalConnection de distintas versiones.
La manera más sencilla de utilizar un objeto LocalConnection es permitir la comunicación únicamente entre objetos LocalConnection del mismo dominio. De esta manera no hay que preocuparse por la seguridad. No obstante, si es necesario permitir la comunicación entre dominios, existen diversas formas de implementar medidas de seguridad. Para más información, consulte la explicación del parámetro connectionName del métodosend() y las entradas allowDomain() y domain de la clase LocalConnection en Referencia del lenguaje y componentes ActionScript 3.0.
|
SUGERENCIA |
|
Es posible utilizar objetos LocalConnection para enviar y recibir datos en un solo archivo SWF, pero Adobe no recomienda esta práctica. En lugar de eso, se recomienda utilizar objetos compartidos. |
Hay tres formas de añadir métodos callback a los objetos LocalConnection:
LocalConnection.client en un objeto que implemente los métodos. La primera forma de añadir métodos callback consiste en ampliar la clase LocalConnection. Los métodos se definen en la clase personalizada en lugar de añadirlos de forma dinámica a la instancia de LocalConnection. Este enfoque se muestra en el siguiente código:
package
{
import flash.net.LocalConnection;
public class CustomLocalConnection extends LocalConnection
{
public function CustomLocalConnection(connectionName:String)
{
try
{
connect(connectionName);
}
catch (error:ArgumentError)
{
// servidor ya creado o conectado
}
}
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
Para crear una nueva instancia de la clase DynamicLocalConnection, se puede usar el siguiente código:
var serverLC:CustomLocalConnection;
serverLC = new CustomLocalConnection("serverName");
La segunda forma de añadir métodos callback consiste en utilizar la propiedad LocalConnection.client. Esto implica crear una clase personalizada y asignar una nueva instancia a la propiedad client, como se muestra en el siguiente código:
var lc:LocalConnection = new LocalConnection(); lc.client = new CustomClient();
La propiedad LocalConnection.client indica los métodos callback del objeto que deben llamarse. En el código anterior, la propiedad client se estableció en una nueva instancia de una clase personalizada, CustomClient. El valor predeterminado de la propiedad client es la instancia de LocalConnection actual. Se puede utilizar la propiedad client si se tienen dos controladores de datos con el mismo conjunto de métodos pero distintos comportamientos; por ejemplo, en una aplicación donde un botón de una ventana activa o desactiva la visualización en una segunda ventana.
Para crear la clase CustomClient, se podría usar el siguiente código:
package
{
public class CustomClient extends Object
{
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
La tercera forma de añadir métodos callback, que consiste en crear una clase dinámica y asociar los métodos de forma dinámica, es muy similar a la utilización de la clase LocalConnection en versiones anteriores de ActionScript, como se muestra en el siguiente código:
import flash.net.LocalConnection;
dynamic class DynamicLocalConnection extends LocalConnection {}
Los métodos callback pueden añadirse de forma dinámica a esta clase con el siguiente código:
var connection:DynamicLocalConnection = new DynamicLocalConnection();
connection.onMethod = this.onMethod;
// Añadir aquí el código propio.
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
No se recomienda la anterior forma de añadir métodos callback porque el código tiene una escasa portabilidad. Además, si se utiliza este método de creación de conexiones locales, podrían surgir problemas de rendimiento debido a que el acceso a las propiedades dinámicas es considerablemente más lento que el acceso a las propiedades cerradas.
La clase LocalConnection se utiliza en la comunicación entre distintas instancias de Flash Player. Por ejemplo, se pueden tener varias instancias de Flash Player en una página Web o se puede hacer que una instancia de Flash Player recupere datos de otra instancia de Flash Player en una ventana emergente.
El código siguiente define un objeto de conexión local que actúa como un servidor y acepta llamadas entrantes de otras instancias de Flash Player:
package
{
import flash.net.LocalConnection;
import flash.display.Sprite;
public class ServerLC extends Sprite
{
public function ServerLC()
{
var lc:LocalConnection = new LocalConnection();
lc.client = new CustomClient1();
try
{
lc.connect("conn1");
}
catch (error:Error)
{
trace("error:: already connected");
}
}
}
}
Este código primero crea un objeto LocalConnection denominado lc y establece la propiedad client en una clase personalizada, CustomClient1. Cuando otra instancia de Flash Player llama a un método en esta instancia de conexión local, Flash Player busca dicho método en la clase CustomClient1.
Cuando una instancia de Flash Player se conecta a este archivo SWF e intenta llamar a cualquier método en la conexión local especificada, la solicitud se envía a la clase especificada por la propiedad client, que se establece en la clase CustomClient1:
package
{
import flash.events.*;
import flash.system.fscommand;
import flash.utils.Timer;
public class CustomClient1 extends Object
{
public function doMessage(value:String = ""):void
{
trace(value);
}
public function doQuit():void
{
trace("quitting in 5 seconds");
this.close();
var quitTimer:Timer = new Timer(5000, 1);
quitTimer.addEventListener(TimerEvent.TIMER, closeHandler);
}
public function closeHandler(event:TimerEvent):void
{
fscommand("quit");
}
}
}
Para crear un servidor LocalConnection, hay que llamar al método LocalConnection.connect() y proporcionar un nombre de conexión exclusivo. Si ya se dispone de una conexión con el nombre especificado, se genera un error ArgumentError, que indica que el intento de conexión falló porque el objeto ya está conectado.
El siguiente fragmento de código muestra la creación de una nueva conexión de socket con el nombre conn1:
try
{
connection.connect("conn1");
}
catch (error:ArgumentError)
{
trace("Error! Server already exists\n");
}
|
NOTA |
|
En versiones anteriores de ActionScript, el método |
La conexión al archivo SWF principal desde un archivo SWF secundario requiere crear un nuevo objeto LocalConnection en el objeto LocalConnection emisor y luego llamar al método LocalConnection.send() con el nombre de la conexión y el nombre del método que se va a ejecutar. Por ejemplo, para conectarse al objeto LocalConnection creado anteriormente, se utiliza el siguiente código:
sendingConnection.send("conn1", "doQuit");
Este código se conecta a un objeto LocalConnection existente, con el nombre de conexión conn1, y llama al método doQuit() en el archivo SWF remoto. Si se desea enviar parámetros al archivo SWF remoto, se deben especificar argumentos adicionales después del nombre del método en el método send(), como se muestra en el siguiente fragmento de código:
sendingConnection.send("conn1", "doMessage", "Hello world");
Para permitir las comunicaciones exclusivamente desde dominios específicos, hay que llamar al método allowDomain() o allowInsecureDomain() de la clase LocalConnection y pasar una lista de uno o varios dominios que tienen permitido el acceso a este objeto LocalConnection.
En versiones anteriores de ActionScript, LocalConnection.allowDomain() y LocalConnection.allowInsecureDomain() eran métodos callback que implementaban los desarrolladores y que tenían que devolver un valor booleano. En ActionScript 3.0, LocalConnection.allowDomain() y LocalConnection.allowInsecureDomain() son métodos incorporados a los que los desarrolladores llaman del mismo modo que Security.allowDomain() y Security.allowInsecureDomain(), pasando uno o varios nombres de dominios que deben autorizarse.
Hay dos valores especiales que pueden pasarse a los métodos LocalConnection.allowDomain() y LocalConnection.allowInsecureDomain(): * y localhost. El valor de asterisco (*) permite el acceso desde todos los dominios. La cadena localhost permite las llamadas al archivo SWF desde archivos SWF instalados localmente.
Flash Player 8 introdujo restricciones de seguridad en los archivos SWF locales. Un archivo SWF al que se le permite acceder a Internet no puede tener también acceso al sistema de archivos local. Si se especifica localhost, cualquier archivo SWF local podrá acceder al archivo SWF. Si el método LocalConnection.send() intenta comunicarse con un archivo SWF desde un entorno limitado de seguridad al que no puede acceder el código que realiza la llamada, se distribuye un evento securityError (SecurityErrorEvent.SECURITY_ERROR). Para solucionar este error, se puede especificar el dominio del que realiza la llamada en el método LocalConnection.allowDomain().
Si se implementa la comunicación exclusivamente entre archivos SWF del mismo dominio, se puede especificar un parámetro connectionName que no empiece por un carácter de subrayado (_) y que no especifique un nombre de dominio (por ejemplo, myDomain:connectionName). Debe utilizarse la misma cadena en el comando LocalConnection.connect(connectionName).
Si se implementa la comunicación entre archivos SWF de distintos dominios, se debe especificar un parámetro connectionName cuyo valor empiece por un carácter de subrayado. La especificación del carácter de subrayado aumenta la portabilidad entre dominios del archivo SWF con el objeto LocalConnection receptor. Estos son los dos casos posibles:
connectionName no empieza por un carácter de subrayado, Flash Player añade un prefijo con el nombre de superdominio y dos puntos (por ejemplo, myDomain:connectionName). Aunque esto garantiza que la conexión no entre en conflicto con conexiones de otros dominios que tengan el mismo nombre, los objetos LocalConnection emisores deben especificar este superdominio (por ejemplo, myDomain:connectionName). Si el archivo SWF que contiene el objeto LocalConnection receptor se traslada a otro dominio, Flash Player cambiará el prefijo para reflejar el nuevo superdominio (por ejemplo, anotherDomain:connectionName). Sería necesario editar manualmente todos los objetos LocalConnection emisores para que señalaran al nuevo superdominio.connectionName empieza por un carácter de subrayado (por ejemplo, _connectionName), Flash Player no añadirá ningún prefijo a la cadena. Esto significa que los objetos LocalConnection receptores y emisores utilizarán cadenas idénticas para connectionName. Si el objeto receptor utiliza LocalConnection.allowDomain() para especificar que se acepten las conexiones de cualquier dominio, el SWF que contiene el objeto LocalConnection receptor podrá trasladarse a otro dominio sin modificar ningún objeto LocalConnection emisor.Flash CS3
Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios
Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000317.html