Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

URLRequest multiple SWF links not working properly

I'm trying to load 3 different tickers in 3 different containers. When I delete this line:

 loader2.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));
 loader3.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));

and load them separately they works fine:

enter image description here

but when i load them together, just as the written in this document in adobe, all three tickers showing the same number:

enter image description here

package  {    
import flash.display.MovieClip;
import flash.net.URLRequest;
import flash.display.Loader;


public class importExternalSWF extends MovieClip {
    private var loader:Loader = new Loader();
    private var loader2:Loader = new Loader();
    private var loader3:Loader = new Loader();

    public function importExternalSWF() {
        loader.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=mrj-4&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));
        loader2.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=bl&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));
        loader3.load(new URLRequest("http://tickers.playtech.com/jackpots/new_jackpot.swf?casino=cityclub&info=1&game=grel&font_face=Arial&bold=true&font_color=FFFFFF&bg_color=240000&font_size=24&currency=eur"));

        ticker1.addChild(loader);
        ticker1.width=50;
        ticker1.height=20;

        ticker2.addChild(loader2);
        ticker2.width=50;
        ticker2.height=20;

        ticker3.addChild(loader3);
        ticker3.width=50;
        ticker3.height=20;      
        }
    }
}

I cant find solution anywhere

Thanks

edit I rewrite my code to this, and its still the same result

public class importExternalSWF extends MovieClip {

    public function importExternalSWF() {

        var url = "http://tickers.playtech.com/jackpots/new_jackpot.swf";
        var urlParams:Array = ["grel", "bl", "game=mrj-4"];
        var tickers:Array = [ticker1, ticker2, ticker3];
        var tickerHeight:Number = 50;
        var tickerWidth:Number = 50;

        loadUrls();

        function loadUrls():void {

            for(var i:uint = 0; i<urlParams.length; i++)
            {
                var urlLoader = new Loader();
                var flashvars:URLVariables = new URLVariables();
                flashvars["casino"] = "cityclub";
                flashvars["info"] = "1";
                flashvars["game"] = urlParams[i];
                flashvars["currency"] = "eur";
                flashvars["font_face"] = "arial";
                flashvars["bold"] = "true";
                flashvars["font_size"] = "10";
                flashvars["bg_color"] = "0x000000";
                flashvars["font_color"] = "ffffff";

                var request:URLRequest = new URLRequest(url);
                request.data = flashvars;
                urlLoader.load(request);

                tickers[i].width=tickerWidth;
                tickers[i].height=tickerHeight;
                tickers[i].addChild(urlLoader);
            }
        }
    }
like image 308
Iliya Reyzis Avatar asked Feb 16 '23 20:02

Iliya Reyzis


2 Answers

I suspect that the external SWF file sets some variables on the root level. Therefore each load will override the previous values and you'll end up with the same score in all "tickers".

Most likely this interference can be resolved by loading each SWF into its own ApplicationDomain. By default, SWFs are being loaded into the same ApplicationDomain and share their code.

So instead of doing this:

urlLoader.load(request);

You should do soemthing like this:

// create a new LoaderContext with a spearate ApplicationDomain
var context:LoaderContext = new LoaderContext(false, new ApplicationDomain());

// load the request and use the context with the separate ApplicationDomain
urlLoader.load(request, context);
like image 113
bummzack Avatar answered Feb 24 '23 05:02

bummzack


I have bad news, i tried everything, but I can't load correctly the swf files. So, I have started to investigate this, and i found that, first, your SWF has AVM1Movie format (new_jackpot.swf), so, I conclude that this SWF was created with version 1 or 2 of ActionScript. If you see the reference of AVM1Movie Class (here the link), says the following:

There are several restrictions on an AVM1 SWF file loaded by an AVM2 SWF file:

  • The AVM1 SWF file that is loaded by an AVM2 SWF file cannot load another SWF file into this. That is, it cannot load another SWF file over itself. However, child Sprite objects, MovieClip objects, or other AVM1 SWF files loaded by this SWF file can load into this.

Then, i tried too, with a library that implements Threads in Flex, and found this (here this link async-threading):

  • The Actionscript Virtual Machine (AVM) in the Flash Player is severely limited by only having one thread...

I have created several projects using Loaders, SWFLoaders, ByteArrays, etc, all this in actionscript 3 in Flex SDK 3.2. Maybe if you create this project in a previous version could work, or try to use same library that implements threads.

Anyway if I find something more, will edit this answer with another solution that's right.

like image 29
Gaston Flores Avatar answered Feb 24 '23 04:02

Gaston Flores