PDA

Просмотр полной версии : SharedObject


fishbounce
16.03.2006, 19:00
Когда пишем в что-нибудь SharedObject в AS3, сам файл *.sol создается только после закрытия флешки, из которой мы писали.
Никто не знает как "обмануть" эту систему? Нужно писать и читать из разных флешек, одновременно открытых...

Den0k
16.03.2006, 19:56
> Когда пишем в что-нибудь SharedObject в AS3, сам файл *.sol создается только после закрытия флешки,

это ты пытаешься доказать что метода flush() нету и никогда не было !?

RTFM :)

silin
16.03.2006, 20:30
насчет 'нету и никогда не было':
ведь было (в 8-ке все нормально), а здесь почему-то не работает..
зы: может надо сообщить куда-нить ( не знаю куда)

fishbounce
16.03.2006, 21:19
to DenOk:
вообще-то я про flush() знаю. Ты бы сначала разобрался, что я спрашиваю, а потом давал свои "полезные" советы.

Объясняю проблему: независимо оттого, когда вы написали flush() в коде или clear(), эти команды (а именно создание или запись в файл, например) будут выполнены только по закрытии флешки (это, кстати, и в доках написано). Раньше (в 7 флеше точно), все происходило сразу.
Вот такая проблема.
Если запустить 2 приложения одновременно, пишущие в один и тот же SharedObject, в файл запишется инфа из того приложения, которое закроется последним!!! Все остальное, записанное другим приложением, затрется.
Т.е. если вы открываете для записи sharedObject-файл и пишете туда двумя флешками, то после закрытия обоих в файле будет информация, которая была до запуска флешек, плюс инфа из последней закрытой флешки.

Den0k
16.03.2006, 21:23
> насчет 'нету и никогда не было'
это я вообще шутил. ну так написал бы что знаешь, а совет читать мануал, всё равно полезный :)

Метод то был с 6 плеера и есть сейчас и в справке задокументирован.
Но походу и правда надо сообщить куда надо. Надо разобраться, хотя бета же :)

Den0k
16.03.2006, 21:31
> ...будут выполнены только по закрытии флешки (это, кстати, и в доках написано).

сорри, где написано что только ? я не вижу?
ну, в доках написано:


flush method

public function flush(minDiskSpace:int = 0):*
Immediately writes a locally persistent shared object to a local file. If you don't use this method, Flash writes the shared object to a file when the shared object session ends—that is, when the SWF file is closed, that is when the shared object is garbage-collected because it no longer has any references to it or you call SharedObject.clear().

Antares
16.03.2006, 22:06
Проблемы такой быть просто не может -- иначе теряется весь смысл суперкуки, которыми, фактически, является LSO.

Den0k
16.03.2006, 23:23
Миш, я вот тоже сначала написал "этого не может быть потому что не может быть" :)

Что я увидел:
flush(); возвращает true но не пишет ничего, не создаёт *.sol файлика, то есть по барабану, только при закрытии приложения, происходит то что по идее и должен делать flush()

если не ошибаюсь, ещё желаемый эффект наблюдается "...when the shared object is garbage-collected because it no longer has any references to it."

silin
16.03.2006, 23:28
ещё желаемый эффект наблюдается "...when the shared object is garbage-collected because it no longer has any references to it."
не наблюдается..

fishbounce
16.03.2006, 23:48
да, с документацией и я че-то попутал:)
действительно, написано Immediatly - но не фига..:)

Кстати, на so.clear(), файл очищается, но не удаляется. Короче, удалить, по-ходу, сейчас нельзя.....

fishbounce
17.03.2006, 11:09
В общем, на flexcoders мне ответили, что обе проблемы (некорректная работа flush и clear) зафиксины в качестве багов и в beta2 все будет, как надо.
Жалко, что сейчас ниче не работает..:(

Можно закрывать топик.

fishbounce
21.03.2006, 13:18
вышла beta2. С SharedObject баги исправили. Молодцы:)

Denixis
21.04.2006, 21:56
Посмотрите пример как может реализоваться данная функция. Но есть свои плюсы и минусы. Получилось реализовать только через setInterval.
Коментарий:
Запускаете две эти swf-ины (SO.swf & SO2.swf) и перетаскиваете красный шарик в одной из них. Смотрите, как во второй зелёный движется вместе с красным.

silin
21.04.2006, 22:22
интересно зачем ты этот пример запостил сюда :
во-первых, речь шла о косяке flush() в 8.5
во-вторых, писать в SO с частотой enterFrame, имхо бред: LocalConnection тут куда как уместнее..

Antares
21.04.2006, 22:30
Учимся читать правила и следовать им