Feeds:
文章
留言

Archive for 四月 23rd, 2008

我想要寫一個 Flex 3 程式,能夠與 Red5 內付的 SimpleChat 程式交換資料。

我原以為只要將 Flash 程式片段經過 Flex 3 稍微改成 AS3 的語法即可,可是一直卡在可讀取 SimpleChat 資料卻無法寫入。

網路上有許多這類的程式片段,不過大部分都是 Flash 不然就只針對 LSO 進行解說。即便是 Adobe 官方文件對 RSO 也沒有太多的著墨。

也因為這樣,居然花了我一個工作天的才測出這個簡單程式。

這個問題主要發生在 Flex 3 要讓 Server 同步 SharedObject 資料,必須使用 SharedObject.setProperty("name", value); 而不能直接使用 SharedObject.data["name"] = value;

以下就是我簡化後的測試程式

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="343">
    <mx:Script>
        <![CDATA[
        import com.live.spaces.chuiwenchiu.net.MyNetConnection;
        public var conn:MyNetConnection = new MyNetConnection();
        public var so:SharedObject = null;
        private  function btnStart_click():void{

            conn.addEventListener(NetStatusEvent.NET_STATUS, function onStatus(e:NetStatusEvent):void{
                if (e.info[‘code’] == "NetConnection.Connect.Success"){
                    so = SharedObject.getRemote("SampleChat", conn.uri, false);
                    so.addEventListener(AsyncErrorEvent.ASYNC_ERROR, function(e:AsyncErrorEvent):void{
                        var msg:String = e.error.message;
                    });
                   so.addEventListener(SyncEvent.SYNC, function(e:SyncEvent):void{
                        if (so.data["SampleChat"] == undefined){
                            return;
                        }                       
                        txtData.text += so.data["SampleChat"] + ‘n’;

                    });
                     so.connect(conn);   
                    btnSend.enabled = true;                                
                }else{
                    trace(e.info[‘code’]);
                }           
            });               
            conn.connect("rtmp://localhost/SOSample");   
        }       
        private function btnSend_click():void{
            if (txtMsg.text.length == 0){
                return;
            }
            so.setProperty("SampleChat", txtMsg.text);
        }           
        ]]>
    </mx:Script>
    <mx:Button x="23" y="10" label="Connect" click="btnStart_click()" />
    <mx:Button id = "btnSend" x="218" y="229" label="Send" enabled="false" click="btnSend_click()"/>
    <mx:TextArea x="23" y="40" id="txtData" width="187" height="181"/>
    <mx:TextInput x="23" y="229" width="187" id=’txtMsg’/>
</mx:Application>

執行結果

 20080423

Read Full Post »