This page was saved using jaction on 2006-09-04 8:34:03.
Address: http://flexdocs.kr/docs/flex2/langref/flash/net/SharedObject.html
Title: flash.net.SharedObject (Flex™ 2 레퍼런스 가이드)  •  Size: 107124
Packageflash.net
Classpublic class SharedObject
InheritanceSharedObject Inheritance EventDispatcher Inheritance Object

SharedObject 클래스는, 유저의 컴퓨터 또는 서버상에서 한정된 양의 데이터를 read 및 포함하기 위해서 사용됩니다. 공유 object를 사용하면, 로컬 컴퓨터 또는 리모트 서버-위에 영속화 되고 있는 SWF 파일과 object간으로, 리얼타임에 데이터를 공유할 수가 있습니다. 로컬 공유 object는 브라우저의 쿠키를 닮아 있어 리모트 공유 object는 리얼타임 데이터 전송 디바이스를 닮아 있습니다. 리모트 공유 object를 사용하려면 , Adobe Flex 또는 Adobe 의 Macromedia Flash Media Server 2 등의 서버가 필요합니다.

NetStream 클래스의 property나 Methods안에는, 주로 Flash Media Server 2 나 Flex 등의 서버로 사용하는 것을 목적으로 한 것이 있습니다. 이러한 property와 Methods에는, 서버 사이드 기능을 추가할 수 있습니다. 상세한 것에 대하여는, Flash Media Server 메뉴얼의 「NetStream class」를 참조해 주세요.

다음에, 공유 object의 3 개의 일반적인 사용 방법을 설명합니다.

로컬 공유 object를 작성하려면 , 다음의 문장구조법을 사용합니다.

 var so:SharedObject = SharedObject.getLocal("userHighScore");
 so.data.highScore = new Number(1234567890);
 so.flush();
 

이 예에서는, 공유 object가 디스크에 명시적으로보존또는 기입해지고 있습니다. 어플리케이션이 닫으면, 공유 object는 자동적으로 보존됩니다만, 데이터를 디스크에 기입하는 순서를 나타내기 (위해)때문에, 보존한 object는 여기에 표시됩니다.

로컬 디스크 area에 대한 고려사항 : 로컬 공유 object는 매우 도움이 됩니다만, 어플리케이션의 설계시에 고려할 필요가 있는 몇개의 제한이 있습니다. SWF 파일로 로컬 공유 object의 기입이 허가되지 않는 경우가 있습니다. 로컬 공유 object에 포함되고 있는 데이터가, 모르는 동안에 삭제되는 경우도 있습니다. Flash Player 의 유저는, 개개의 도메인 또는 모든 도메인으로 사용할 수 있는 디스크 area를 관리할 수 있습니다. 유저가 사용 가능한 디스크 area의 양을 줄이면, 일부의 로컬 공유 object가 삭제될 가능성이 있습니다. Flash Player 의 유저에게는, 써드파티 도메인 (현재의 브라우저의 주소 바에 있는 도메인 이외의 도메인)에 의한 로컬 공유 object의 읽어내 또는 기입을 방지할 수 있는 프라이버시 컨트롤 기능도 있습니다.

메모:리모트 서버-는 아니고 로컬 컴퓨터로 포함 및 실행되는 SWF 파일은, 디스크에의 써드파티에 의한 공유 object의 기입을 허가하고 있지 않는 경우에서도, 항상 디스크에 써드파티의 공유 object를 기입할 수가 있습니다. 써드파티의 공유 object의 상세한 것에 대하여는, Flash Player 의 헬프의 「글로벌 기억 area의 설정 패널」에 있는 써드파티 컨텐츠에 관한 설명을 참조해 주세요.

디스크 area의 양과 유저의 프라이버시 컨트롤에 관한 실패에 대해 체크하는 것을 추천합니다. getLocal()flush() 의 호출시에 이러한 체크를 실행합니다.

SWF 파일로 로컬 공유 object를 작성 또는 변경하려고 하는 경우, SWF 파일의 폭이 최악이어도 215 픽셀, 높이가 최악이어도 138 픽셀 있는 것을 확인해 주세요. 이 크기는, 다이알로그 박스 (로컬 공유 object의 기억역제한을 늘릴지 어떨지를 유저에게 확인한다)를 표시하기 위한 최소의 크기입니다. SWF 파일이 이 크기보다 작고, 기억역제한을 늘릴 필요가 있는 경우,SharedObject.flush() 는 실패해,SharedObjectFlushedStatus.PENDING 를 돌려주어,netStatus 이벤트를 dispatch합니다.

View the examples

See also

flush()
getLocal()
netStatus


Public property
 property정의
  client : Object
콜백 Methods가 불려 가는 object를 나타냅니다.
SharedObject
 Inheritedconstructor : Object
특정의 object 인스턴스의 클래스 object 또는 constructor    함수에의 참조입니다.
Object
  data : Object
[read-only] object의 data property에 할당할 수 있었던 속성의 콜렉션입니다. 이러한 속성은 공유 및 보존할 수가 있습니다.
SharedObject
  defaultObjectEncoding : uint
[static] SWF 파일로 작성된 모든 로컬 공유 object의 디폴트 object의 encode (AMF 버젼)입니다.
SharedObject
  fps : Number
[write-only] 공유 object에 대한 클라이언트의 변경이 서버에 송신되는 회수 (1 초 쯤)를 지정합니다.
SharedObject
  objectEncoding : uint
이 공유 object의 encode (AMF 버젼)입니다.
SharedObject
 Inheritedprototype : Object
[static] 클래스 또는 함수 object의 prototype object에의 참조입니다.
Object
  size : uint
[read-only] 공유 object의 현재의 크기 (바이트수)입니다.
SharedObject
Public Methods
 Methods정의
 InheritedaddEventListener (type:String , listener:Function , useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
event listener objects를 EventDispatcher object에 등록해, listener가 이벤트의 통지를 받도록(듯이) 합니다.
EventDispatcher
  clear ():void
로컬 공유 object의 경우, 모든 데이터를 소거해, 공유 object를 디스크로부터 삭제합니다.
SharedObject
  close ():void
리모트 공유 object와 서버와의 사이의 접속을 닫습니다.
SharedObject
  connect (myConnection:NetConnection , params:String = null):void
지정된 접속을 개입시켜, 서버상의 리모트 공유 object에 접속합니다.
SharedObject
 InheriteddispatchEvent (event:Event ):Boolean
이벤트를 event 플로우(flow)에 dispatch합니다.
EventDispatcher
  flush (minDiskSpace:int = 0):String
로컬에 작성된 공유 object를 즉시 로컬 파일에 기입합니다.
SharedObject
  getLocal (name:String , localPath:String = null, secure:Boolean = false):SharedObject
[static] 현재의 클라이언트만을 이용할 수 있는 로컬 공유 object에의 참조를 돌려줍니다.
SharedObject
  getRemote (name:String , remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject
[static] 어떠한 서버 (Flash Media Server 등)에 의해 복수 클라이언트에서의 공유를 할 수 있는 object에의 참조를 돌려줍니다.
SharedObject
 InheritedhasEventListener (type:String ):Boolean
EventDispatcher object에, 특정의 event 타입에 대해서 등록된 listener가 있을지 어떨지를 확인합니다.
EventDispatcher
 InheritedhasOwnProperty (name:String ):Boolean
object로 지정된 property가 정의되고 있는지 어떤지를 나타냅니다.
Object
 InheritedisPrototypeOf (theClass:Object ):Boolean
Object 클래스의 인스턴스가, Parameters로서 지정된 object의 prototype 체인내에 있을지 어떨지를 나타냅니다.
Object
 InheritedpropertyIsEnumerable (name:String ):Boolean
지정된 property가 존재해, 열거 가능한가 어떤가를 나타냅니다.
Object
 InheritedremoveEventListener (type:String , listener:Function , useCapture:Boolean = false):void
EventDispatcher object로부터 listener를 삭제합니다.
EventDispatcher
  send (... arguments):void
지정된 리모트 공유 object에 접속하고 있는 모든 클라이언트 (메세지를 송신한 클라이언트도 포함한다)에, 메세지를 브로드캐스트 합니다.
SharedObject
  setDirty (propertyName:String ):void
공유 object의 property의 값 (data property로 정의)이 변경된 것을 서버에 통지합니다.
SharedObject
  setProperty (propertyName:String , value:Object = null):void
공유 object의 property의 값 (data property로 정의)을 갱신해, 서버에 property의 값이 변경된 것을 나타냅니다.
SharedObject
 InheritedsetPropertyIsEnumerable (name:String , isEnum:Boolean = true):void
루프 처리에 대한 다이나믹 property의 가용성을 설정합니다.
Object
 InheritedtoString ():String
지정된 object의 string 표현을 돌려줍니다.
Object
 InheritedvalueOf ():Object
지정된 object의 원시적치를 돌려줍니다.
Object
 InheritedwillTrigger (type:String ):Boolean
지정된 event 타입에 대해, 이 EventDispatcher object 또는 그 조상에게 event listener가 등록되어 있는지 어떤지를 확인합니다.
EventDispatcher
이벤트
 이벤트일람정의
  asyncError 비동기 형식에서, 즉 네이티브비동기 코드로부터 예외가 슬로우 되면 dispatch됩니다. SharedObject
  netStatus SharedObject 인스턴스가, 그 스테이터스 또는 에러의 상황을 리포트할 경우에 dispatch됩니다. SharedObject
  sync 리모트 공유 object (SharedObject)가 서버에 의해 갱신될 때 dispatch됩니다. SharedObject
property의 상세
clientproperty
client:Object   [read-write]

콜백 Methods가 불려 가는 object를 나타냅니다. 디폴트의 object는 this 입니다. Client property를 다른 object로 설정해, 콜백 Methods를 그 다른 object로 호출할 수가 있습니다.

Implements
    public function get client():Object
    public function set client(value:Object ):void

Throws
TypeError client property는, null 이외의 object로 설정할 필요가 있습니다.
dataproperty 
data:Object   [read-only]

object의 data property에 할당할 수 있었던 속성의 콜렉션입니다. 이러한 속성은 공유 및 보존할 수가 있습니다. 각각의 속성은, ActionScript 또는 JavaScript 타입의 object입니다. 예를 들어, Array, Number, Boolean, ByteArray, XML 등입니다. 다음의 코드에서는, 공유 object에 다양한 값을 할당하고 있습니다.

  var items_array:Array = new Array(101, 346, 483);
  var currentUserIsAdmin:Boolean = true;
  var currentUserName:String = "Ramona";
  
  var my_so:SharedObject = SharedObject.getLocal("superfoo");
  my_so.data.itemNumbers = items_array;
  my_so.data.adminPrivileges = currentUserIsAdmin;
  my_so.data.userName = currentUserName;
  
  for (var prop in my_so.data) {
    trace(prop+": "+my_so.data[prop]);
  }
  

영속적인 object의 경우는, 공유 object의 data property의 모든 속성이 보존됩니다. 또 공유 object에는 다음의 정보가 포함되어 있습니다.

  userName: Ramona
  adminPrivileges: true
  itemNumbers: 101,346,483
  

메모:so.data = someValue 와 같이, 공유 object의 data property에 값을 직접 할당하지 말아 주세요. 이러한 할당은 무시됩니다.

로컬 공유 object의 속성을 삭제하려면 ,delete so.data.attributeName 라고 하는 코드를 사용합니다. 로컬 공유 object의 속성을 null 또는 undefined 로 설정해도 속성은 삭제되지 않습니다.

공유 object의프라이빗치 (object의 사용중에 그 클라이언트 인스턴스에서만 이용할 수 있어 닫을 때 object와 함께 보존되지 않는 값)를 작성하려면 ,data 이외의 이름의 property를 작성해, 그 값을 보존합니다. 다음에 예를 나타냅니다.

  var my_so:SharedObject = SharedObject.getLocal("superfoo");
  my_so.favoriteColor = "blue";
  my_so.favoriteNightClub = "The Bluenote Tavern";
  my_so.favoriteSong = "My World is Blue";
  
  for (var prop in my_so) {
    trace(prop+": "+my_so[prop]);
  }
  

공유 object에는 다음의 데이터가 포함됩니다.

  favoriteSong: My World is Blue
  favoriteNightClub: The Bluenote Tavern
  favoriteColor: blue
  data: [object Object]
  
Implements
    public function get data():Object

See also

defaultObjectEncodingproperty 
defaultObjectEncoding:uint   [read-write]

SWF 파일로 작성된 모든 로컬 공유 object의 디폴트 object의 encode (AMF 버젼)입니다. 로컬 공유 object가 디스크에 기입해지면,SharedObject.defaultObjectEncoding property는, 사용할 필요가 있는 Action Message Format 버젼을 나타냅니다. ActionScript 3.0 포맷 (AMF3) 또는 ActionScript 1.0 또는 2.0 포맷 (AMF0)입니다.

로컬 공유 object와 리모트 공유 object의 encode의 차이를 포함한, object encode의 상세한 것에 대하여는,objectEncoding property의 설명을 참조해 주세요.

SharedObject.defaultObjectEncoding 의 디폴트치는, ActionScript 3.0 포맷, AMF3 를 사용하도록(듯이) 설정됩니다. ActionScript 2.0 또는 1.0 SWF 파일로 읽어들일 수 있는 로컬 공유 object의 기입이 필요한 경우는, 로컬 공유 object를 작성하기 전에, 스크립트의 선두 부분에서 ActionScript 1.0 또는 ActionScript 2.0 포맷 flash.net.ObjectEncoding.AMF0 를 사용하도록(듯이) SharedObject.defaultObjectEncoding 를 설정합니다. 그 이후에 작성되는 모든 로컬 공유 object로, AMF0 인코딩이 사용되어 낡은 컨텐츠와 교환할 수 있게 됩니다. 로컬 공유 object의 작성 후에,SharedObject.defaultObjectEncoding 를 설정해도, 기존의 로컬 공유 object의 objectEncoding 값는 변경할 수 없습니다.

SWF 로 작성한 모든 공유 object에 대해서는 아니고, object 마다 object의 인코딩을 설정하려면 , 로컬 공유 object의 objectEncoding property를 설정합니다.

Implements
    public static function get defaultObjectEncoding():uint
    public function set defaultObjectEncoding(value:uint ):void

See also

fpsproperty 
fps:Number   [write-only]

공유 object에 대한 클라이언트의 변경이 서버에 송신되는 회수 (1 초 쯤)를 지정합니다.

클라이언트와 서버간의 트래픽량을 제한하는 경우에, 이 Methods를 사용합니다. 예를 들어, 클라이언트와 서버간의 접속이 약간 늦은 경우는,fps 를 약간 작은 값으로 설정하면 좋을 것입니다. 반대로, 클라이언트가, 타이밍이 중요한 다중 사용자 어플리케이션에 접속하고 있는 경우는,fps 를 약간 큰 값으로 설정하면 좋을 것입니다.

갱신의 송신시에 수동으로 제어하는 경우, 변경을 서버에 보내는 경우는 fps 를 0 으로 설정합니다. 예를 들어, 유저가 서버에 코우신을 보내는 버튼을 누르도록(듯이) 하는 경우는, 버튼에 myRemoteSharedObject.fps(0) 를 추가합니다.

fps 에 건네주는 값에 관련되지 않고,sync

Implements
    public function set fps(value:Number ):void
objectEncodingproperty 
objectEncoding:uint   [read-write]

이 공유 object의 encode (AMF 버젼)입니다. 로컬 공유 object가 디스크에 기입해지면,objectEncoding property는, 사용할 필요가 있는 Action Message Format 버젼을 나타냅니다. ActionScript 3.0 포맷 (AMF3) 또는 ActionScript 1.0 또는 2.0 포맷 (AMF0)입니다.

object encode는, 공유 object가 로컬이나 리모트 등에 의해서, 처리 방법이 다릅니다.

Implements
    public function get objectEncoding():uint
    public function set objectEncoding(value:uint ):void

Throws
ReferenceError — 리모트 공유 object의 objectEncoding property의 값을 설정하려고 했습니다. 이 property의 값은, 관련지을 수 있었던 NetConnection 인스턴스에 의해 결정되기 (위해)때문에, 리모트 공유 object의 읽기 전용(read-only)입니다.

See also

sizeproperty 
size:uint   [read-only]

공유 object의 현재의 크기 (바이트수)입니다.

모든 데이터 property를 순서에 확인하는 것에 의해, 공유 object의 크기가 계산됩니다. object가 가지는 데이터 property가 많을 정도(수록), 크기의 계산에 시간이 걸립니다. object의 크기를 조사하는 처리는, 매우 시간이 걸리는 경우가 있어, 특히 필요가 없는 한, 이 Methods의 사용을 피할 수가 있습니다.

Implements
    public function get size():uint

See also


Example
다음의 코드에서는, ID "thehobbit" 를 사용해 ShareObject object를 작성합니다. username 라고 하는 property가, SharedObject object의 데이터 property에 추가됩니다. 다음에,size property가 트레이스 되어 표시한 값을 돌려줍니다.

import flash.net.SharedObject;

// if these get copied or not
var mySo:SharedObject = SharedObject.getLocal("thehobbit");
mySo.data.username = "bilbobaggins";
trace(mySo.size); // 55

Methods의 상세
clear()Methods
public function clear():void

로컬 공유 object의 경우, 모든 데이터를 소거해, 공유 object를 디스크로부터 삭제합니다. 공유 object에의 참조는 액티브한 그대로로, 그 데이터 property가 삭제됩니다.

리모트 공유 object의 경우, 이 Methods는, object를 절단 해, 모든 데이터를 소거합니다. 공유 object가 로컬에 영속화 되고 있는 경우, 이 Methods는 디스크로부터 공유 object도 삭제합니다. 공유 object에의 참조는 액티브한 그대로로, 그 데이터 property가 삭제됩니다.


Example
다음의 코드에서는, hostName 의 값과 ID 를 사용해, ShareObject object가 작성 (이후의 실행에서는 취득)됩니다. username 라고 하는 property 하지만 SharedObject object의 데이터 property에 추가됩니다. 마지막에 clear() Methods가 불려 가 데이터 object에 추가된 모든 정보 (이 경우는,username 라고 하는 단일의 property)가 일소 됩니다.

package {
    import flash.net.SharedObject;

    public class SharedObject_clear {
        private var hostName:String = "yourDomain";
        private var username:String = "yourUsername";

        public function SharedObject_clear() {
            var mySo:SharedObject = SharedObject.getLocal(hostName);
            if(mySo.data.username == null) {
                mySo.data.username = username;
                trace("set: " + mySo.data.username); // yourUsername
            }
            else {
                mySo.clear();
                trace("cleared: " + mySo.data.username); // undefined
            }
        }
    }
}

close()Methods 
public function close():void

리모트 공유 object와 서버와의 사이의 접속을 닫습니다. 리모트 공유 object가 로컬에 영속화 되고 있는 경우, 유저는 이 Methods의 호출 후에, object의 로컬 복사를 변경할 수 있습니다. 로컬 object의 변경은, 다음번에 유저가 리모트 공유 object에 접속했을 때에, 서버에 보내집니다.

connect()Methods 
public function connect(myConnection:NetConnection , params:String = null):void

지정된 접속을 개입시켜, 서버상의 리모트 공유 object에 접속합니다. 이 Methods는 SharedObject.getRemote() 의 발행 후에 사용합니다. 접속이 성공하면,sync 이벤트가 dispatch됩니다.

리모트 공유 object를 사용하기 전에, 우선 접속의 성공을 나타내는 true 의 반환값을 체크해,sync 이벤트가 dispatch될 때까지 대기합니다. 이것을 실시하지 않으면sync 이벤트가 dispatch되기 전에, 로컬로 간 object의 변경이 없어질 가능성이 있습니다.

메모:이 호출이 false 를 돌려주었을 경우,sync 이벤트는 dispatch되지 않습니다.

Parameters
myConnection:NetConnection — RTMP (Real-Time Messaging Protocol)를 사용하고 있는 NetConnection object (Flash Media Server 와의 통신에 사용되는 object 등)입니다.
 
params:String (default = null)

Throws
Error — Flash Player 는, 지정된 리모트 공유 object에 접속할 수 없습니다. NetConnection 인스턴스가 유효하고 접속되고 있는 것, 리모트 공유 object가 서버에 정상적으로 작성된 것을 확인합니다.

See also

flush()Methods 
public function flush(minDiskSpace:int = 0):String

로컬에 작성된 공유 object를 즉시 로컬 파일에 기입합니다. 이 Methods를 사용하지 않는 경우, 공유 object가 파일에 기입해지는 것은, 그 object의 세션이 종료한 시점됩니다. 즉, 그 SWF 파일이 닫는 시점인가, 그 공유 object에 대한 참조가 없어져 가베지 콜렉션 되는 시점, 또는 SharedObject.clear() 또는 SharedObject.close() 가 불려 간 시점의 머지않아인가입니다.

이 Methods가 SharedObjectFlushStatus.PENDING 를 돌려주었을 경우는, Flash Player 에서는, 이 도메인으로부터의 object를 보존하기 위한 디스크 area를 늘리도록(듯이) 요구하는 다이알로그 박스가 표시됩니다. 장래적으로 공유 object를 보존할 때에, area가 자동적으로 확장되도록(듯이) 하려면 (PENDING 가 돌려주어지지 않게 하기) ,minDiskSpace 에 값을 지정합니다. 파일에 object를 기입하려면 , 현재의 크기의 공유 object를 보존하기 위해서 충분한 area 만이 아니고,minDiskSpace 로 지정한 바이트수가 확인됩니다.

예를 들어, 공유 object가 처음은 작아도 나중에 최대로 500 바이트까지 증가한다고 예상되는 경우에는,minDiskSpace 에 500 을 지정합니다. 유저에 대해서 공유 object에의 디스크 area의 할당을 요구하려면 , 500 바이트의 area가 요구됩니다. 요구된 디스크 area를 유저가 할당했을 경우, 그 이후, object의 크기가 500 바이트를 넘지 않는 이상 object를 보존할 때에 추가의 디스크 area가 요구될 것은 없습니다.

유저가 이 다이알로그 박스에 응답한 후, 이 Methods가 한번 더 불려 가netStatus 이벤트가,SharedObject.Flush.Success 또는 SharedObject.Flush.Failedcode property를 사용해 dispatch됩니다.

Parameters
minDiskSpace:int (default = 0) — 이 object에 할당할 필요가 있는 최소 디스크 area (바이트 단위)입니다.

반환값
String — 다음의 몇개의 값이 됩니다.
  • SharedObjectFlushStatus.PENDING: 유저는 이 도메인으로부터의 object에 대해서 로컬 정보 기억역을 허가하고 있습니다만, 할당할 수 있었던 area가 object를 보존하는데 충분히이지 않습니다. Flash Player 는 유저에게 area를 늘리도록(듯이) 요구합니다.
  • SharedObjectFlushStatus.FLUSHED: 공유 object는 로컬 디스크상의 파일에 정상적으로 기입해졌습니다.

Throws
Error — Flash Player 는, 공유 object를 디스크에 기입할 수가 없습니다. 이 에러는, 유저가 이 도메인으로부터의 object에 대해서 영속적으로 로컬 정보 기억역을 허가되어 있지 않은 경우에 발생할 가능성이 있습니다.

메모: 디스크에의 써드파티의 공유 object의 기입을 허가하고 있지 않는 경우에서도, 로컬 컨텐츠에서는, 항상 써드파티 도메인 (현재의 브라우저의 주소 바에 있는 도메인 이외의 도메인)으로부터의 공유 object를 디스크에 기입할 수가 있습니다.

See also


Example
다음의 코드에서는, hostName 의 값과 ID 를 사용해, ShareObject object가 작성 (이후의 실행에서는 취득)됩니다. username 라고 하는 property 하지만 SharedObject object의 데이터 property에 추가됩니다. 다음에 flush() Methods가 불려 가 string pending 또는 불리언 값 true 또는 false 가 돌려주어졌는지 어떠했는지를 확인합니다. 모든 오픈 SharedObject 인스턴스는, Flash Player 의 현재의 인스턴스를 닫을 때마다 자동적으로 보존됩니다.
package {
    import flash.net.SharedObject;

    public class SharedObject_flush {
        private var hostName:String = "yourDomain";
        private var username:String = "yourUsername";

        public function SharedObject_flush() {
            var mySo:SharedObject = SharedObject.getLocal(hostName);
            mySo.data.username = username;
            var flushResult:Object = mySo.flush();
            trace("flushResult: " + flushResult);
            trace(mySo.data.username); // yourUsername
        }
    }
}

getLocal()Methods 
public static function getLocal(name:String , localPath:String = null, secure:Boolean = false):SharedObject

현재의 클라이언트만을 이용할 수 있는 로컬 공유 object에의 참조를 돌려줍니다. 공유 object가 아직 존재하지 않는 경우는, 이 Methods에 의해 작성됩니다. getLocal() 에게 건네진 값이 무효인 경우, 또는 호출해에 실패하는 경우는, Flash Player 는 예외를 슬로우 합니다.

다음의 코드에서는, 돌려주어진 공유 object의 참조의 변수에의 할당 방법을 나타냅니다.

var so:SharedObject = SharedObject.getLocal("savedData");

메모:유저가 이 도메인에 대해서 로컬 기억역을 허가하지 않는 경우는,localPath 가 지정되고 있어도, object는 로컬에 보존되지 않습니다. 다만, 로컬 컨텐츠는 예외입니다. 디스크에의 써드파티의 공유 object의 기입을 허가하고 있지 않는 경우에서도, 로컬 컨텐츠에서는, 항상 써드파티 도메인 (현재의 브라우저의 주소 바에 있는 도메인 이외의 도메인)으로부터의 공유 object를 디스크에 기입할 수가 있습니다.

이름의 충돌을 피하기 위해서(때문에), 공유 object를 작성한 SWF 파일의 위치가 고려됩니다. 예를 들어, www.myCompany.com/apps/stockwatcher.swf 에 있는 SWF 파일이 portfolio 라는 이름의 공유 object를 작성했을 경우, 이 공유 object는, www.yourCompany.com/photoshoot.swf 에 있는 SWF 파일이 작성한 portfolio 라고 하는 다른 object와는 경합 하지 않습니다. 이것은, 이 2 개의 SWF 파일이 다른 디렉토리에 놓여져 있기 때문입니다.

localPath Parameters는 옵션입니다만, 신중하게 사용할 필요가 있습니다. 특히, 다른 SWF 파일이 공유 object에 액세스 해야 하는 경우에는 주의해 주세요. 공유 object의 데이터가, 다른 장소에 이동되지 않는 1 개의 SWF 파일에 고유의 것인 경우는, 디폴트치를 사용하는 것을 추천합니다. 다른 SWF 파일이 공유 object에 액세스 할 필요가 있는 경우, 또는 공유 object를 작성하는 SWF 파일을 다음에 이동하는 경우에는, 이 Parameters의 값에 의해, 공유 object에의 액세스에 영향이 생깁니다. 예를 들어,localPath 를 SWF 파일에의 완전 패스의 디폴트치로 설정해, 공유 object를 작성하면, 다른 SWF 파일은 공유 object에 액세스 할 수 없습니다. 원의 SWF 파일을 다음에 다른 장소로 이동하면, 그 SWF 파일로부터도, 공유 object에 포함되고 있는 데이터에 액세스 할 수 없게 됩니다.

공유 object에의 액세스를 잘못해 제한해 버리는 것을 피하려면 ,localpath Parameters를 사용합니다. 가장 제한의 완만한 방법은,localPath/ (slash)로 설정하는 방법입니다. 도메인의 모든 SWF 파일이 공유 object를 이용할 수 있습니다만, 도메인내의 다른 공유 object와의 이름의 충돌이 일어나기 쉬워집니다. 보다 제한의 어려운 방법은,localPath 에 SFW 파일에의 완전 패스내의 폴더명을 부가하는 방법입니다. 예를 들어, www.myCompany.com/apps/stockwatcher.swf 에 있는 SWF 파일로 작성된 portfolio 공유 object의 경우는,localPath Parameters를 /,/apps, 또는 /apps/stockwatcher.swf 로 설정할 수 있습니다. 어플리케이션에 최적인 유연성을 제공할 수 있을 방법이 어떤 것인지를 판단할 필요가 있습니다.

이 Methods를 사용할 때는, Flash Player 시큐러티 모델을 고려해 주세요.

로컬 파일 (로컬에 설치(Install) 된 SWF 파일 또는 EXE 파일)로서 재생하는 SWF 파일 컨텐츠를 Publish 해, 복수의 로컬 SWF 파일로부터 특정의 공유 object에 액세스 할 필요가 있다고 합니다. 이 상황에서는, 로컬 파일에서는 공유 object의 보존에 2 개가 다른 장소가 사용되는 일이 있을테니 주의해 주세요. 사용되는 도메인은, 공유 object를 작성한 로컬 파일에 부여되는 시큐러티 허가에 의해 바뀝니다. 로컬 파일에는, 다음의 3 개가 다른 허가 레벨을 설정할 수 있습니다.

  1. 로컬 파일 시스템에만 대하는 액세스
  2. 네트워크에만 대하는 액세스
  3. 네트워크와 로컬 파일 시스템의 양쪽 모두에 대한 액세스

로컬 파일 시스템에의 액세스권을 가지는 로컬 파일 (레벨 1 또는 3)은, 공유 object를 1 개의 장소에 포함합니다. 로컬 파일 시스템에의 액세스권을 가지지 않는 로컬 파일 (레벨 2)은, 공유 object를 다른 장소에 포함합니다.

상세한 것에 대하여는, 다음의 주제를 참조해 주세요.

Parameters
name:String — object명입니다. 이름에는 slash (/)를 포함합니다. 예를 들어,work/addresses 는 유효한 이름입니다. 공유 object명에 스페이스, 및 이하의 캐릭터를 포함할 수 없습니다.
  ~ % & \ ; : " ' , < > ?  # 
  
 
localPath:String (default = null) — 공유 object를 작성한 SWF 파일의 완전 패스 또는 부분 패스입니다. 이것에 의해, 공유 object를 로컬에 보존하는 장소가 정해집니다. 이 Parameters를 지정하지 않는 경우는, 완전 패스가 사용됩니다.
 
secure:Boolean (default = false) — 이 공유 object에의 액세스가 HTTPS 접속 경유로 배포된 SWF 파일로 한정되고 있는지 어떤지를 판별합니다. SWF 파일이 HTTPS 접속 경유로 배포되고 있는 경우, 이 Parameters의 값에는, 다음의 effect가 있습니다.
  • 이 Parameters를 true 로 설정하면, Flash Player 는 새로운 시큐어인 공유 object를 작성하는지, 기존의 시큐어인 공유 object의 참조를 취득합니다. 이 시큐어인 공유 object는, HTTPS 경유로 전달되는 SWF 파일로부터로만 읽어내는지, 또는 이 SWF 파일에게만 기입할 수가 있어true 로 설정된 secure Parameters를 가지는 SharedObject.getLocal() 를 호출합니다.
  • 이 Parameters가 false 로 설정되어 있는 경우는, Flash Player 는 공유 object를 새롭게 작성하는지, 또는 HTTPS 이외의 접속으로 배포된 SWF 파일에 의해 읽어들여 또는 기입을 할 수 있는 기존의 공유 object에 대한 참조를 취득합니다.

SWF 파일이 HTTPS 이외의 접속 경유로 전달되는 경우, 이 Parameters를 true 로 설정하려고 하면, 새로운 공유 object의 작성 (또는 작성 끝난 시큐어인 공유 object에의 액세스)은 실패해,null 가 돌려주어집니다. 이 Parameters의 값에 관계없이, 작성된 공유 object는, 각 도메인에 할당할 수 있었던 총디스크 용량의 일부를 사용합니다.

다음의 그림에,secure Parameters의 사용 방법을 나타냅니다.

반환값
SharedObject — 로컬에 영속화 되어 현재의 클라이언트에서만 이용할 수 있는 공유 object에의 참조입니다. 공유 object를 작성할 수 없는 경우, 또는 공유 object가 발견되지 않는 경우 (localPath 로 지정한 디렉토리가 존재하지 않는 경우등)는, 이 Methods에 의해 예외가 슬로우 됩니다.

Throws
Error — Flash Player 는, 어떠한 이유로써 공유 object를 작성할 수 없습니다. 써드파티의 Flash 컨텐츠에 의한 영속 공유 object의 작성과 보존이 금지되고 있는 (로컬 컨텐츠에 적용되지 않는다) 경우, 이 에러가 발생하는 일이 있습니다. 유저는,http://www.adobe.com/support/documentation/en/flashplayer/help/settings_manager03.html 에 있는 설정 매니저의 [글로벌 스토리지 설정] 패널로 써드파티의 영속 공유 object를 금지할 수 있습니다.

See also

getRemote()Methods 
public static function getRemote(name:String , remotePath:String = null, persistence:Object = false, secure:Boolean = false):SharedObject

어떠한 서버 (Flash Media Server 등)에 의해 복수 클라이언트에서의 공유를 할 수 있는 object에의 참조를 돌려줍니다. 공유 object가 아직 존재하지 않는 경우는, 이 Methods에 의해 작성됩니다.

다음의 코드에서는, 돌려주어진 공유 object의 참조의 변수에의 할당 방법을 나타냅니다.

var myRemote_so:SharedObject = SharedObject.getRemote(name, remotePath, persistence);

현재의 클라이언트에서만 이용할 수 있는 공유 object를 작성하려면 ,SharedObject.getLocal() 를 사용합니다.

다음의 코드에 나타내도록(듯이), 이 Methods의 호출 후에 SharedObject.connect() 를 사용해, object를 어플리케이션 서버에 접속합니다.

     var myNC:NetConnection = new NetConnection();
     myNC.connect("rtmp://[yourDomain]. com/applicationName");
     var myRemoteSO:SharedObject = SharedObject.getRemote("mo", myNC.uri, false);
     myRemoteSO.connect(myNC);
     

공유 object의 로컬 및 리모트 복사를 동기 시키려면 ,sync 이벤트를 사용합니다.

이 object를 공유하는 모든 클라이언트는,name Parameters와 remotePath Parameters에 같은 값을 건네줄 필요가 있습니다. 리모트 공유 object의 상세한 것에 대하여는, Flash Media Server 의 메뉴얼의 SharedObject.getRemote() 를 참조해 주세요.

Parameters
name:String — object명입니다. 이름에는 slash (/)를 포함합니다. 예를 들어, work/addresses 는 유효한 이름입니다. 공유 object명에 스페이스, 및 이하의 캐릭터를 포함할 수 없습니다.
~ % & \ ; :  " ' , > ? ?  #
 
remotePath:String (default = null) — 공유 object가 보존되는 서버의 URI입니다. 이 URI 는,SharedObject.connect() Methods에게 건네진 NetConnection object의 URI 와 동일한 필요가 있습니다.
 
persistence:Object (default = false) — 공유 object의 데이터 property의 속성이, 어디서 영속적이 되어 있는지 (로컬, 리모트, 또는 그 양쪽 모두)를 지정합니다. 이 Parameters에서는, 공유 object를 로컬로 보존하는 경우의 장소도 지정할 수 있습니다. 유효한 값은 다음과 같습니다.
  • false 값는, 공유 object가 클라이언트 또는 서버로 영속적이 아닌 것을 지정합니다.
  • true 값는, 공유 object가 서버상만으로 영속적인 것을 지정합니다.
  • 공유 object에의 로컬의 완전 패스 또는 부분 패스는, 공유 object가 클라이언트와 서버상에서 영속적인 것을 나타냅니다. 클라이언트에서는, 공유 object는 지정된 패스에 보존됩니다. 서버상에서는, 어플리케이션 디렉토리내의 하위 디렉토리에 보존됩니다.

메모:유저가 이 도메인에 대해서 로컬 기억역을 허가하지 않는 경우는, 로컬 패스가 지정되고 있어도, object는 로컬에 보존되지 않습니다. 상세한 것에 대하여는, 클래스의 설명을 참조해 주세요.

 
secure:Boolean (default = false) — 이 공유 object에의 액세스가 HTTPS 접속 경유로 배포된 SWF 파일로 한정되고 있는지 어떤지를 판별합니다. 상세한 것에 대하여는,getLocal Methods 엔트리의 secure Parameters의 설명을 참조해 주세요.

반환값
SharedObject — 복수 클라이언트에서의 공유를 할 수 있는 object에의 참조입니다.

Throws
Error — Flash Player 는, 공유 object를 작성할 수 없습니다, 또는 찾아낼 수 없습니다. 이것은,remotePath Parameters와 persistence Parameters에 존재하지 않는 패스가 지정되고 있는 경우에 일어납니다.

See also

send()Methods 
public function send(... arguments):void

지정된 리모트 공유 object에 접속하고 있는 모든 클라이언트 (메세지를 송신한 클라이언트도 포함한다)에, 메세지를 브로드캐스트 합니다. 메세지를 처리해 응답하려면 , 공유 object에 송신하는 핸들러 함수를 작성합니다.

Parameters
... arguments — 복수의 인수 :메세지를 식별하는 string, 공유 object에 할당하는 복수의 핸들러 함수명, 및 임의의 데이터형을 지정할 수 있는 옵션의 Parameters입니다. 그것들은 직렬화 되어 접속을 개입시켜 송신됩니다. 수신측의 핸들러는 같은 차례로 그것들을 받습니다. Parameters가 순환 object (순환하는 링크 된 리스트등)인 경우, serializer는 참조를 올바르게 처리합니다.

메모:함수명에는 예약어(reserved word)를 사용하지 말아 주세요. 예를 들어,myRemoteSO.send("close") 는 실패합니다.

setDirty()Methods 
public function setDirty(propertyName:String ):void

공유 object의 property의 값 (data property로 정의)이 변경된 것을 서버에 통지합니다. 이 Methods는, property를 변경이 끝난 상태 (더티)로서 마크 해, 서버 사이드 ActionScript 로 사용합니다.

공유 object의 property를 작성하려면 ,SharedObject.data property를 사용하는지, 단순하게 SharedObject property라고 하는 일의의 이름을 붙인 새로운 property를 작성합니다. 이러한 2 개의 방법의 차이의 상세한 것에 대하여는,SharedObject.data property를 참조해 주세요.

SharedObject.setProperty() Methods에는,setDirty() Methods가 Implements되고 있습니다. 대부분의 경우, 예를 들어 property의 값이 string나 수치등의 원시적형의 경우 등은,setDirty() 는 아니고,setProperty() 를 사용합니다. 다만, property의 값이 독자적인 property를 가지는 object인 경우는,setDirty() 를 사용해 object내의 값이 변경된 일시를 나타냅니다.

Parameters
propertyName:String — 변경된 property의 이름입니다.

See also

setProperty()Methods 
public function setProperty(propertyName:String , value:Object = null):void

공유 object의 property의 값 (data property로 정의)을 갱신해, 서버에 property의 값이 변경된 것을 나타냅니다. setProperty() Methods는, property를 변경이 끝난 상태 (더티)로서 명시적으로 마크 해, 서버 사이드 ActionScript 로 사용합니다. Flash Media Server 등의 서버에는,setProperty() 를 명시적으로 호출해, 공유 object의 property가 변경된 일시를 나타낼 필요가 있는 것도 있습니다.

SharedObject.setProperty() 를 서버 사이드에서 호출했을 경우, 공유 object를 사용하고 있는 모든 Flash Player 클라이언트에 대해서, 클라이언트 사이드에서 sync 이벤트를 통해서 변경 통지가 불려 갑니다. 서버 사이드의 propertyName Parameters는, 클라이언트 사이드의 data property의 속성과 같습니다. 예를 들어, 다음의 코드행은 모두 같습니다. 최초의 2 행은 서버 사이드 ActionScript 로, 3, 4 행 째는 클라이언트 사이드 ActionScript 입니다.

  setProperty("nameVal", "foo");
  setDirty("nameVal");
  data["nameVal"] = "foo";
  data.nameVal = "foo";
  

Flash Media Server 의 유저는, 「 Flash Media Server Server-Side ActionScript Language Reference 」로, 서버 사이드 ActionScript 및 리모트 공유 object에 관한 상세를 참조할 수 있습니다.

메모:SharedObject.setProperty() Methods에는,setDirty() Methods가 Implements되고 있습니다. 대부분의 경우, 예를 들어 property의 값이 string나 수치등의 원시적형의 경우 등은,setDirty 는 아니고,setProperty() 를 사용합니다. 다만, property의 값이 독자적인 property를 가지는 object인 경우는,setDirty() 를 사용해 object내의 값이 변경된 일시를 나타냅니다. 일반적으로,setDirty() 는 아니고 setProperty() 를 호출하는 것을 추천합니다. 이것은,setDirty() 는 예약(subscribe) 하고 있는 모든 클라이언트에 대해서 강제적으로 동기 시킵니다만,setProperty() 는 값이 변경되었을 때만 property치를 갱신하기 (위해)때문에입니다.

Parameters
propertyName:String — 공유 object의 property의 이름입니다.
 
value:Object (default = null) — property의 값 (ActionScript object), 또는 property를 삭제하는 null 입니다.

See also

이벤트의 상세
asyncErrorevent 
Event object type: flash.events.AsyncErrorEvent
AsyncErrorEvent.type property = flash.events.AsyncErrorEvent.ASYNC_ERROR

비동기 형식에서, 즉 네이티브비동기 코드로부터 예외가 슬로우 되면 dispatch됩니다.

AsyncErrorEvent.ASYNC_ERROR 정수는,asyncError event object의 type property치를 정의합니다.

이 이벤트에는, 다음의 property가 있습니다.

PropertyValue
bubblesfalse
cancelablefalse 는, 캔슬하는 디폴트의 동작이 없는 것을 나타냅니다.
currentTargetevent listener로 Event object를 액티브하게 처리하고 있는 object입니다.
target네트워크 조작 에러가 발생한 object입니다.
error이벤트를 방아쇠 한 에러입니다.
netStatusevent  
Event object type: flash.events.NetStatusEvent
NetStatusEvent.type property = flash.events.NetStatusEvent.NET_STATUS

SharedObject 인스턴스가, 그 스테이터스 또는 에러의 상황을 리포트할 경우에 dispatch됩니다. netStatus 이벤트에는,info property가 포함됩니다. 이 property는, 접속 시행이 성공했는지 어떠했는지나 공유 object가 로컬 디스크에의 기입에 성공했는지 어떠했는지 등, 이벤트에 관한 특정의 정보를 포함한 정보 object입니다.

netStatus event object의 type property의 값을 정의합니다.

이 이벤트에는, 다음의 property가 있습니다.

PropertyValue
bubblesfalse
cancelablefalse 는, 캔슬하는 디폴트의 동작이 없는 것을 나타냅니다.
currentTargetevent listener로 Event object를 액티브하게 처리하고 있는 object입니다.
infoobject의 스테이터스 또는 에러 상태를 기술하는 property를 가지는 object입니다.
target그 스테이터스를 리포트하는 NetConnection 또는 NetStream object입니다.

See also

syncevent  
Event object type: flash.events.SyncEvent
SyncEvent.type property = flash.events.SyncEvent.SYNC

리모트 공유 object (SharedObject)가 서버에 의해 갱신될 때 dispatch됩니다.

sync event object의 type property의 값을 정의합니다.

이 이벤트에는, 다음의 property가 있습니다.

PropertyValue
bubblesfalse
cancelablefalse 는, 캔슬하는 디폴트의 동작이 없는 것을 나타냅니다.
currentTargetevent listener로 Event object를 액티브하게 처리하고 있는 object입니다.
changeList배열의 스테이터스를 기술하는 property를 가지는 배열입니다.
target서버에 의해 갱신된 SharedObject 인스턴스입니다.

See also

Examples

다음의 코드에서는, ID "application-name" 를 사용해, 공유 object가 작성 (이후의 실행에서는 취득)됩니다. [보존] 버튼을 클릭하면, saveValue() Methods는 savedValue 그렇다고 하는 property를 SharedObject object의 data property에 보존하려고 합니다. Flash Player 가 데이터를 보존하는 허가를 요구하는 경우, 유저가 허가를 주는지 거부하면,onFlushStatus() Methods가 불려 갑니다. [클리어] 버튼을 클릭하면,clearValue() Methods는 savedValue 에 보존되고 있는 값을 삭제합니다. 다음에 SWF 파일이 로드 될 때 취득되는 값은 undefined 입니다.
package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.events.NetStatusEvent;
    import flash.net.SharedObject;
    import flash.net.SharedObjectFlushStatus;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFieldType;
    
    public class SharedObjectExample extends Sprite {
        
        private var mySo:SharedObject;
        
        public function SharedObjectExample() {
            buildUI();
            saveBtn.addEventListener(MouseEvent.CLICK, saveValue);
            clearBtn.addEventListener(MouseEvent.CLICK, clearValue);
            
            mySo = SharedObject.getLocal("application-name");
            output.appendText("SharedObject loaded...\n");
            output.appendText("loaded value: " + mySo.data.savedValue + "\n\n");
        }

         private function saveValue(event:MouseEvent) :void {
            output.appendText("saving value...\n");
            mySo.data.savedValue = input.text;
            
            var flushStatus:String = null;
            try {
                flushStatus = mySo.flush(10000);
            } catch (error:Error) {
                output.appendText("Error...Could not write SharedObject to disk\n");
            }
            if (flushStatus ! = null) {
                switch (flushStatus) {
                    case SharedObjectFlushStatus.PENDING:
                        output.appendText("Requesting permission to save object...\n");
                        mySo.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
                        break;
                    case SharedObjectFlushStatus.FLUSHED:
                        output.appendText("Value flushed to disk. \n");
                        break;
                }
            }
            output.appendText("\n");
        }
        
        private function clearValue(event:MouseEvent) :void {
            output.appendText("Cleared saved value...Reload SWF and the value should be \"undefined\". \n\n");
            delete mySo.data.savedValue;
        }
        
        private function onFlushStatus(event:NetStatusEvent) :void {
            output.appendText("User closed permission dialog...\n");
            switch (event.info.code) {
                case "SharedObject.Flush.Success":
                    output.appendText("User granted permission -- value saved. \n");
                    break;
                case "SharedObject.Flush.Failed":
                    output.appendText("User denied permission -- value not saved. \n");
                    break;
            }
            output.appendText("\n");

            mySo.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);
        }
        
        // UI elements
        private var inputLbl:TextField;
        private var input:TextField;
        private var output:TextField;
        private var saveBtn:Sprite;
        private var clearBtn:Sprite;
    
        private function buildUI() :void {
            // input label
            inputLbl = new TextField();
            addChild(inputLbl);
            inputLbl.x = 10;
            inputLbl.y = 10;
            inputLbl.text = "Value to save:";
            
            // input TextField
            input = new TextField();
            addChild(input);
            input.x = 80;
            input.y = 10;
            input.width = 100;
            input.height = 20;
            input.border = true;
            input.background = true;
            input.type = TextFieldType.INPUT;
            
            // output TextField
            output = new TextField();
            addChild(output);
            output.x = 10;
            output.y = 35;
            output.width = 250;
            output.height = 250;
            output.multiline = true;
            output.wordWrap = true;
            output.border = true;
            output.background = true;
            
            // Save button
            saveBtn = new Sprite();
            addChild(saveBtn);
            saveBtn.x = 190;
            saveBtn.y = 10;
            saveBtn.useHandCursor = true;
            saveBtn.graphics.lineStyle(1);
            saveBtn.graphics.beginFill(0xcccccc);
            saveBtn.graphics.drawRoundRect(0, 0, 30, 20, 5, 5);
            var saveLbl:TextField = new TextField();
            saveBtn.addChild(saveLbl);
            saveLbl.text = "Save";
            saveLbl.selectable = false;
            
            // Clear button
            clearBtn = new Sprite();
            addChild(clearBtn);
            clearBtn.x = 230;
            clearBtn.y = 10;
            clearBtn.useHandCursor = true;
            clearBtn.graphics.lineStyle(1);
            clearBtn.graphics.beginFill(0xcccccc);
            clearBtn.graphics.drawRoundRect(0, 0, 30, 20, 5, 5);
            var clearLbl:TextField = new TextField();
            clearBtn.addChild(clearLbl);
            clearLbl.text = "Clear";
            clearLbl.selectable = false;
        }
    }
}






 

코멘트가 추가되었을 경우, 메일로 받기. | 코멘트 리포트

현재의 페이지: http://flexdocs.kr/docs/flex2/langref/flash/net/SharedObject.html