우선 AS3에서 제공하는 SharedObject의 deletage를 만든 다음 생성자 없이 getLocal()를 통해
데이터를 만들거나 읽기를 한다.

이후 객체에 데이터를 설정하기 위해서는 SharedObject.data를 통해 이름과 값을 설정한다.
단 getLocal("이름")의 이름과 data에 저장하는 변수의 이름이 같으면 안된다.

[ 공유객체 생성/로드 ]
var so:SharedObject = SharedObject.getLocal("jys");

[ 공유객체의 data를 통해 데이터를 설정 ]
so.data.userName = "jeong youn soo";
so.data.text = "공유객체에 이 내용을 저장한다.";
so.data.ary = ["a" , "b" , "c"];
so.data.date = new Date();
so.data.obj = {key1:"예시" , key2:-20 , key3:null }

위처럼 공유객체에서 지원하는 data라는 속성을 사용하여 데이터를 선언하여야 한다. 선언할 수 있는 데이터 타입은 문자,숫자,Date,오브젝트등 AS3에서 제공하는 대부분의 데이터 타입을 저장 할 수 있으면 심지어 인스턴스 클래스까지 저장 할 수 있다.

단 아래처럼 공유객체에 직접 데이터를 설정하면 에러를 발생한다.
so.text = "이것은 컴파일 에러를 발생한다.";

위에서 처럼 SharedObject에 데이터를 설정하면 자동으로 클라이언트 Pc에 기록된다.
그러나 기본 100kb를 넘어서거나 사용자가 저장 용량을 저장할 데이터 보다 적게 선언하였을 때는
저장 하지를 못한다.
이때 이를 체크할 수 있도록 SharedObjectFlushStatus저장 성공/실패 여부를 반환한다.
이를 체크하기 위해서는 SharedObject의 상태를 확인할 수 있는 flush()라는 메서드를 사용한다.

[ 저장상태를 체크 ]
var flushResult:String = so.flush();
저장이 성공하면 flush()메서드는 "flushed"를 반환하며 저장이 실패하면 "pending"을 넘겨준다.
이들은 SharedObjectFlushStatus에 상수로 설정되어있다.
if( flushResult == SharedObjectFlushStatus.FLUSHED ) {
    저장 성공 액션
}else if( flushResult == SharedObjectFlushStatus.PENDING ){
    저장 실패 액션
}


만약 저장에 실패하였을 경우에는 사용자에게 저장 여부를 확인하여야 한다.
따라서 Security.showSettings( SecurityPanel.LOCAL_STORAGE )try~catch문에 삽입하여
에러가 발생하면 SecurityPanel창을 띄워 저장 공간을 늘리게하거나 저장 허용하도록 한다.
이때 넘어오는 이벤트가 NetStatusEvent이벤트이다.

저장 실패시 이러한 이벤트를 SharedObject에 리스너를 등록하고 사용자가 승인또는 비승인을 체크하여
프로세스를 이어가야 한다.
SecurityPanel에서 승인이 발생하면 SharedObject.Flush.Success를 건네주고
그렇지 않으면 SharedObject.Flush.Failed를 건네준다.





Posted by 버터백통