2013-05-09 43 views
0

在使用共享object.send()的Adobe文檔中似乎存在錯誤。我正在嘗試執行所有客戶端的發送方法。共享對象發送方法()

我從Adobe複製客戶端和服務器端代碼,我無法調用該函數。 這是我的編譯錯誤輸出

Line 31 1119: Access of possibly undefined property doSomething through a reference with static type flash.net:SharedObject. 

任何建議,我怎麼能解決這個問題,以AS3新手。請任何人都可以幫我嗎?

var nc:NetConnection = new NetConnection(); 

nc.connect("rtmfp://localhost/submitSend"); 

nc.addEventListener(NetStatusEvent.NET_STATUS, netHandler); 

function netHandler(event:NetStatusEvent):void{ 
    switch(event.info.code){ 
     case "NetConnection.Connect.Sucess": 
     trace("Connecting..."); 
     break; 

     case "NetConnection.Connect.Failed": 
     trace("Unable to connect up"); 
     break; 

     case "NetConnection.Connect.Rejected": 
     trace("Whoops"); 
     break; 
    } 
} 

var so:SharedObject = SharedObject.getRemote("mySo", nc.uri, true); 

so.connect(nc); 

so.doSomething = function(str) { 
    // Process the str object. 
}; 

服務器端:

var so = SharedObject.get("mySo", true); 
so.send("doSomething", "This is a test"); 
+1

你能提供一個鏈接到你把這個代碼的頁面? – duTr 2013-05-10 00:31:28

+0

此外,只有在連接到服務器後,才應連接共享對象 – duTr 2013-05-10 00:32:10

回答

0

正如我在以前的評論說,你指的該文檔的鏈接將受到歡迎,以幫助人們幫助你...

這裏已經有幾點值得一提:

  • 您應該在任何致電之前添加您的事件偵聽器。
  • 您應該連接你的共享對象只有在您收到NetConnection.Connect.Success事件(順便說一下,你對這個名字的樣品中的錯字)
  • ,則應該設置你的類實例爲您的共享對象的客戶端。

我不知道這一切將解決您的問題,但你可以試試這個:

var nc:NetConnection = new NetConnection(); 

private function netHandler(event:NetStatusEvent):void 
{ 
    switch(event.info.code) 
    { 
     case "NetConnection.Connect.Success": 
     { 
      trace("Connecting..."); 
      connectSharedObject(); 
      break; 
     } 
     case "NetConnection.Connect.Failed": 
     { 
      trace("Unable to connect up"); 
      break; 
     } 
     case "NetConnection.Connect.Rejected": 
     { 
      trace("Whoops"); 
      break; 
     } 
    } 
} 

private function connectSharedObject():void 
{ 
    var so:SharedObject = SharedObject.getRemote("mySo", nc.uri, true); 
    so.client = this; 
    so.connect(nc); 
} 

public function doSomething(str:String):void 
{ 
    // Process the str object. 
} 

nc.addEventListener(NetStatusEvent.NET_STATUS, netHandler); 
nc.connect("rtmfp://localhost/submitSend"); 
+0

謝謝duTr。感謝幫助和評論。對不起,這裏的鏈接http://livedocs.adobe.com/flashmediaserver/3.0/hpdocs/help.html?content=00000371.html我測試了代碼並連接到服務器就好了。這可能聽起來像一個愚蠢的問題。但是,我是否應該在輸出或管理控制檯的實時日誌中收到有關字符串消息的任何通知或響應?因爲我不確定我發送的字符串消息是成功還是失敗..謝謝 – marcus 2013-05-10 12:35:45

+0

我現在無法檢查,但我認爲你的服務器端調用了'so.send(「doSomething」,「這是一個測試」) ;如果客戶端方法已被調用,則應返回「true」;否則返回「false」。 – duTr 2013-05-10 23:57:54

+0

對不起,這是一個麻煩..但我稍微改變了我的服務器端代碼,它現在看起來像這樣application.onConnect = function(client){trace(「InConnect」); application.acceptConnection(客戶端); so = sharedObject.get(「foo」,true); so.send(「doSomething」,「這是一個測試」);它似乎沒有顯示服務器正在調用sharedobject.send(),因此該方法未被調用給連接客戶端。在客戶端,我添加了onSync處理程序來嘗試調用到共享對象的連接來調用so.send,但是這不成功。我總有一天會找到方法!它不是火箭科學大聲笑 – marcus 2013-05-13 13:40:09