2005年8月18日木曜日

FCS(flashcom)上での共有オブジェクトの扱い



サーバサイド(FCS)で共有メモリを作り、そこにプロパティをセットする。そしてそれをクライアントから見るという形の使い方をしたかったけど、どうしても値が保存されず意図した動きにならない。

Client.prototype.Hoge = function()
{
var test_so = SharedObject.get("test");
trace("version : " + test_so.version);

test_so.lock();

test_so.setProperty("test", "hogehoge");
trace("version : " + test_so.version);

trace("test : " + test_so.getProperty("test"));

test_so.unlock();
trace("version : " + test_so.version);

test_so.close();

var test2_so = SharedObject.get("test");
trace("version : " + test2_so.version);
trace("test : " + test2_so.getProperty("test"));
test2_so.close();
}

このコードをクライアントFlashからつついて実行すると


version : 0

version : 0

test : hogehoge

version : 1

version : 0

test : null


こんな感じになります。test2_soのtestプロパティには「hogehoge」が保存されてくれなくて困っていたのですが、バージョンをとってみて気付いたのは値を変更した場合に1になってるバージョンが再度取得してみると0に戻っている。つまり保存がされていないわけです。

で、結論から行くと


test_so.close();


がガンだったりします。これを消すと


version : 0

version : 0

test : hogehoge

version : 1

version : 1

test : hogehoge


ばっちり(゜∀゜)

新規に作成される場合の共有オブジェクトはクローズすると共有メモリそのものがパージされてしまうらしい。本来このメソッドの挙動は共有オブジェクトへのコネクションをはるものという事を考えるとバグだと思うのですが・・・。ちなみに後の


test2_so.close();


では消えません。こっちは期待通りの挙動です。

一応解決したものの何か複雑なものがありますな・・・。




0 件のコメント:

コメントを投稿