У меня есть два swfs:
- приложение SWF
- p2p клиент SWF, который позволяет загружать данные с использованием репликации rtmfp
технология (через службу цирруса)
Основная идея состоит в том, чтобы иметь один загрузчик p2p в определенном домене, который сможет работать в сети p2p, не запрашивая много раз разрешения для каждого домена, например:
p2p-клиент загружает двоичные данные по запросу, содержание, на самом деле, не имеет значения, я верю.
Итак, я загружаю p2pclient swf, используя следующий класс ( app.swf )
public class ClientLoader {
// .. some code
public function load(cb:Function, err:Function):void
{
_cb = cb;
_err = err;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onLoaded);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, _onIoError);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _onSecurityError);
// note that context has neither application domain nor security domain
loader.load(new URLRequest(_url), new LoaderContext());
}
private function _onLoaded(e:Event):void
{
trace("Loaded. Connecting to the p2p network...");
_client = e.target.content;
_client.addEventListener(Event.CONNECT, _onClientReady);
_client.connect();
}
private function _onClientReady(e:Event):void
{
_cb(_client);
}
}
}
Сам p2pclient ( p2pcli.swf ):
public class P2P extends Sprite
{
public function SqP2P() {
Security.allowDomain("*");
}
public function connect():void
{
_connection = new NetConnection();
_connection.addEventListener(NetStatusEvent.NET_STATUS, _netStatus);
_connection.connect(CIRRUS_ADDRESS, CIRRUS_KEY);
// after successful connect this method called
_loadGroup();
}
private method _loadGroup():void
{
var spec:GroupSpecifier = new GroupSpecifier(_name);
spec.serverChannelEnabled = true;
spec.objectReplicationEnabled = true;
_group = new NetGroup(connection, spec.groupspecWithAuthorizations());
_group.addEventListener(NetStatusEvent.NET_STATUS, _netStatus);
}
private function _netStatus(event:NetStatusEvent):void
{
trace("NetStatusEvent:", event.info.code);
}
}
Но похоже, что Flash Player игнорирует сеанс безопасности и пытается сохранить настройки всплывающего окна для домена, к которому принадлежит app.swf, но не для домена p2pcli.swf. Почему?!
У меня абсолютно такой же код, но p2pcli.swf заменен на swf, который хранит данные в Local Shared Object, и все domain1-2-N.com имеют к нему доступ.
Есть идеи?
Я знаю, мой английский дерьмо: (