SharedObject(이하 SO)는 크게 두가지로 구분하여 사용할 수 있습니다.


첫째, 로컬에서만 사용할 경우. 여러가지 상황에서 쓰일 수 있겠으나, 저같은 경우는 Flex로 모바일 앱 개발할 때 세션을 유지하는 방법으로 사용하였습니다.

[참고] Flex모바일 개발시 Session유지  


두번째, 미디어 서버를 통해 SO에 연결(connect)된 모든 Client들에게 Data를 공유하는 방법입니다.


1. SharedObject에 연결된 다른 클라이언트의 함수 호출해 보기 


   SharedObject.send()함수를 통해 SO에 연결된 모든 Client들의 함수를 호출하는 예제입니다. 서버측 코딩은 필요없고, [Install-dir]/applications/Tutorial3 폴더만 생성해 주시면 됩니다.  브라우져를 여러개 띄워두신다음 테스트 해보시면 됩니다. 이해를 위해 최소한의 코드만으로 만든 예제입니다. so=SharedObject.getRemote("soName", nc.uri, false); 의 'soName'은 SO를 구분짓는 이름이며, 이 이름에 묶여있는 SO에 연결된 클라이언트의 함수는 호출됩니다.  그리고 호출된 함수의 접근제한자는 public 이어야 합니다. 


* Client측 소스

 ...

 so=SharedObject.getRemote("soName", nc.uri, false);

 so.client=this;

 so.connect(nc);


 ...


 // SharedObject에 연결된 모든 Client의 'receiveMessage' 함수를 호출함.

 so.send("receiveMessage", "This is my message");


 ...

 // 접근제한자는 public이어야함.

 publicfunction receiveMessage(msg:String):void

 {

     Cc.log(msg);

 }

 ...

                           


Tutorial3.fxp




2. SharedObject에 연결된 다른 클라이언트의 함수 여러개 만들어 보기


  호출될 수 있는 함수를 여러개 만들어 보는 예제입니다. Object객체를 하나 만들어 주고, 그 객체의 속성에 함수를 넣어주고 SO의 client를 Object로 지정해주시면 됩니다. 이 예제또한 서버코딩이 필요없고, 예제 실행을 위해서는 [Install-dir]/applications/Tutorial4 폴더를 생성해 주어야 합니다.


* Client측 소스

 ...

 var obj:Object=new Object();

        

 obj.sayHi=function(msg:String):void

 {

     Cc.log(msg);

 };

                          

 obj.sayHello=function(msg:String):void

 {

     Cc.log(msg);

 };

 

 so.client=obj;

 ...

                           


Tutorial4.fxp


3. SharedObject를 이용해서 서버시간 구하기


   SharedObject를 이용해서 서버측에서 시간을 구한 후, SharedObject에 연결된 모든 클라이언트들에게 현재 시간을 알려주는 예제입니다. 서버사이드에서의 SO객체생성이 필요하며, setProperty() 함수를 이용해서 Data를 동기화 합니다. SO객체에 SyncEvent를 리스닝 하고있다, 동기화가 일어나면 SyncEvent가 송출되어 서버의 시간을 뿌려줍니다. 예제실행을 위해 서버측 모듈설정이 필요합니다.


* Server측 소스

 ...

 private ISharedObject _so;

       

 public void getServerTime(IClient client, RequestFunction function, AMFDataList params) {

     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

     Date DateNow = new Date();

     _so.setProperty("currentTime", dateFormat.format(DateNow));

     getLogger().info(DateNow.getTime());

 }

 

 public void onAppStart(IApplicationInstance appInstance) {

      ISharedObjects sharedObjects = appInstance.getSharedObjects();

      _so = sharedObjects.getOrCreate("testSO");

      _so.acquire();

 }

 ...

   

* Client측 소스

 ...

 so.addEventListener(SyncEvent.SYNC, onSync);

 ...                 

 privatefunction onSync(event:SyncEvent):void

 {

      Cc.log("currentTime : " + so.data.currentTime);

 }        

 ...                 

 

Tutorial5.fxp

Tutorial5.java


[참고] Working with Shared Objects with Wowza and Flex

[참고] How to track users using a SharedObject


AND