VoodooFlash
El ActionScript sigue siendo, por desgracia, y salvo que el rodaje de AS3 demuestre lo contrario, un 80% de programación y un 20% de vudú. Y eso con suerte.
Véase el siguiente ejemplo (reducido hasta la mayor simplicidad a efectos prácticos). Lo que se pretende es escribir un cliente de IRC en AS2. Tras un par de días de pruebas desesperantes, no se consigue abrir un socket con el servidor: medio día de eliminación de código, hasta dejarlo en el puro varillaje, lleva a esta conclusión:
import mx.utils.Delegate
class IRCFacade
{
function IRCFacade( )
{
}
public function connect( server: String , port: Number )
{
var socket: XMLSocket = new XMLSocket( );
socket.onConnect = Delegate.create( this, onConnect);
socket.connect( server, port );
}
private function onConnect( )
{
trace( "socket abierto" );
}
}
Si desde la línea de tiempo principal de un fla vacío se hace:
var facade: IRCFacade = new IRCFacade( );
facade.connect( "server.server.server", 7000 );
No salta el evento onConnect.
Sin embargo, si se modifica la clase IRCFacade de la siguiente forma:
import mx.utils.Delegate
class IRCFacade
{
private var socket: XMLSocket;
function IRCFacade( )
{
socket= new XMLSocket( );
}
public function connect( server: String , port: Number )
{
socket.onConnect = Delegate.create( this, onConnect);
socket.connect( server, port );
}
private function onConnect( )
{
trace( "socket abierto" );
}
}
Oh, sorpresa, todo funciona como se espera. Estupendo. Me lo expliquen.