Где я должен хранить данные о сервере в приложении Flex? - PullRequest
2 голосов
/ 28 марта 2011

Я новичок в Flex, и я разрабатываю приложение Flex, которое должно взаимодействовать с сервером AMF для аутентификации пользователя.

Где я должен хранить URL-адрес сервера?Я не хочу жестко кодировать его в исходном коде, но URL должен быть исправлен во время компиляции, потому что когда я компилирую приложение, оно должно быть привязано к определенному серверу.

Ответы [ 3 ]

6 голосов
/ 28 марта 2011

Если вам нужен URL во время компиляции, но вы не хотите «жестко» его кодировать, лучше всего сохранить его в встроенных константах . Они работают как #IFDEF или #define на C / C ++, и вы можете легко изменить URL-адрес без изменения приложения (просто перекомпилировав его).

Вы должны добавить что-то подобное в параметры компилятора:

-define+=APP::amfServerUrl,'http://localhost/some/path/'

А затем в коде вашего приложения:

private static const AMF_SERVER_URL:String = APP::amfServerUrl;
0 голосов
/ 28 марта 2011

Я использую внешний файл config.xml, который находится на сервере.Мой swf / wrapper находится в корне, а конфиг находится в папке с именем 'config'.Вот код из моего текущего проекта, который использует эту конфигурацию:.

override protected function doStart() : void {
    var xmlLoader : URLLoader = new URLLoader();

    xmlLoader.addEventListener(Event.COMPLETE, result, false, EventPriority.DEFAULT_HANDLER, true);
    xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, fault, false, EventPriority.DEFAULT_HANDLER, true);

    xmlLoader.load(new URLRequest("config/config.xml"));
}

public function fault(info : *) : void {
    error("Failed to load config file.");
    trace("Error Loading Configuration");
}

public function result(data : Event) : void {
    var xml : XML = new XML(data.target.data);
    var settings : Object = XMLMapperUtil.mapAppSettingsModelFromXML(xml);
    var appSettingsModel : AppSettingsModel = AppSettingsModel.getInstance();

    ExObjectUtil.copyObjectProperties(appSettingsModel, settings);

    var secureString : String = (appSettingsModel.serverProtocol == 'https') ? "secure" : "";

    var firstURLSegment : String =
        appSettingsModel.serverProtocol
        + "://"
        + appSettingsModel.serverIP
        + ":"
        + appSettingsModel.serverPort
        + "/FlexClient/messagebroker/";

    var remotingURL : String  = firstURLSegment + "amf" + secureString;
    var messagingURL : String = firstURLSegment + secureString + "streamingamf";

    var remotingChannelSet : ChannelSet = new ChannelSet();
    var messagingChannelSet : ChannelSet = new ChannelSet();

    if (appSettingsModel.serverProtocol == 'https') {
        remotingChannelSet.addChannel(new SecureAMFChannel("my-secure-amf", remotingURL));
        messagingChannelSet.addChannel(new SecureStreamingAMFChannel("my-secure-amf-stream", messagingURL));
    }
    else {
        remotingChannelSet.addChannel(new AMFChannel("my-amf", remotingURL));
        messagingChannelSet.addChannel(new StreamingAMFChannel("my-streaming-amf", messagingURL));
    }

    appSettingsModel.remoteObject_ChannelSet = remotingChannelSet;
    appSettingsModel.messaging_ChannelSet = messagingChannelSet;

    complete();
}

Моя функция результата использует XMLObjectMapper SpiceLab, функцию singleton и функцию копирования специальных свойств, чтобы получить настройки из XML в глобальный объект, которыйЯ могу использовать (appSettingsModel).Все, что вам действительно нужно, - это получить этот XML, разобрать его и создать несколько каналов с результатами.О, вот мой XML-файл:

<AppSettingsModelXML 
    serverIP = "123.123.123.123"
    serverPort = "8080"
    serverProtocol = "http"/>
0 голосов
/ 28 марта 2011

Если это не AIR, вы можете указать URL-адрес сервера через FlashVars

HTML

<script type="text/javascript">
    var flashvars = {gateway:'http://myserver/amfphp'
    };
    var params = { 
        menu: "false",
        scale: "showAll",
        allowFullscreen: "true",
        allowScriptAccess: "always",
        quality:"best",
        bgcolor: "#FFFFFF"
    };
    var attributes = {
        id:"main", name:"main"
    };
    swfobject.embedSWF("main.swf", "altContent", "100%", "100%", "10.0.0", "expressInstall.swf", flashvars, params, attributes);

</script>

Затем, чтобы получить этот параметр, используйте:

AS3

var gatewayUrl:String = stage.loaderInfo.parameters["gateway"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...