Как загрузить SWF и некоторые дополнительные данные в одном запросе? - PullRequest
1 голос
/ 06 октября 2011

Я загружаю модуль Flex 4.5 (это SWF-файл), используя такой код PHP:

$module = 'modules/'.$_GET['module'].'.swf';

if(!file_exists($module)) {

    $module = 'error.swf';

}

$size = filesize($module);
$contents = file_get_contents($module);

header('Content-Type: application/x-shockwave-flash');
header('Accept-Ranges: bytes');
header('Content-Length: '.$size);

echo $contents;

, и он работает очень хорошо.

Теперь я хочу получитьнекоторые дополнительные данные для загрузки и заполнения модуля этими данными только в одном обработчике запросов, что-то вроде:

private function requestHandler(response:???):void {

    var data:Array = response as Array;

    mySparkModuleLoader.load("", data[0] as ByteArray);
    myController.load(data[1]);

}

Я пытался сделать это с AMFPHP, но ByteArray, кажется, сломан или что-то, потому что это нене показывается, но с остальными данными все в порядке:

return array(
    'hello world!',
    new Amfphp_Core_Amf_Types_ByteArray(file_get_contents($module))
);

Может быть, создать многочастный ответ типа http://sun3.org/archives/107 и обработать его?

Любая идея будет приветствоваться.

1 Ответ

1 голос
/ 07 октября 2011

OMG РАБОТАЕТ!

Я надеюсь, что это будет полезно кому-то еще, так:

Служба AMFPHP 2.0 RC1:

<?php

class Services {

    public function getModule() {

        $path = dirname(__FILE__).'\..\..\Modules\Foo.swf';
        $ba = new Amfphp_Core_Amf_Types_ByteArray(file_get_contents($path));

        return array(
            $ba,
            array(
                'colors' => array(
                    'red',
                    'green',
                    'blue'
                ),
                'animals' => array(
                    'dog',
                    'cat'
                )
            )
        );

    }

}

Служба (использующаяОбработчик Flex SDK 4.5):

private function resultHandler(event:ResultEvent):void {

    var response:Array = event.result as Array;

    moduleLoader.loadModule("http://some.random.url", response[0] as ByteArray);
    initialData = response[1] as Array;

}

И все!

...