2012-11-02 43 views
0

假設我們有一個函數和一個在其中聲明的套接字。我們稱它爲connect。現在我們打電話addEventListener進行連接。AS3套接字事件偵聽器是否需要函數作用域定義爲結束?

理論上我們可以設置提供給eventDispatcher的函數來改變一個類變量,而原來叫做addEventListener的函數可以鎖定在那個變量上(類似於while(!class_instancce.is_connected))。

我的問題是:將函數傳遞給addEventListener被稱爲flash運行時會等待一個「等待」的函數結束嗎?

+0

或者之後'socket.connect'如果一切正常,我們得到'socked.connected ==內同樣的功能範圍TRUE'? – myWallJSON

+0

應該沒有時間。最終只能有一個(便宜的漢蘭達插頭)。它應該是監聽連接...然後做東西。雖然很適合inline .. ie如果你在一個onData事件,你正在聽更多的套接字信息..但連接不適用 –

回答

0

傳遞給addEventListener的函數將在您正在偵聽的任何事件發生時立即運行(如果有多個偵聽器,則這將基於事件優先級)

像你想嘗試的套接字連接同步發生這聽起來我,你不能做到這一點與插座,雖然有在AS some things,你可以強制是同步的。

老實說,你應該儘早熟悉事件驅動架構,因爲它可以爲您提供各種面向對象的可用性。

如果你被綁定和確定,你可以使用匿名函數。你可以自己研究它。我認爲這是一個不好的習慣,除非你真的知道你在做和怎麼樣避免內存泄漏等

+0

啊...所以有點多信息:有新版本的Alchemy/Flascc並且它目前沒有開箱即用的unix插槽支持。因此,爲了支持舊的C/C++代碼庫,我需要圍繞AS3套接字創建同步包裝。我想知道兩件事情:AS3套接字可以同步方式用於開箱即用,或者如果不是如何爲它們創建同步連接方法。 – myWallJSON

+0

考慮使用類似於此處描述的未來值模式http://web.archive.org/web/20070403033325/http://johnwilger.com/ –

0

這裏是插座在AS3中是如何工作的:

首先創建套接字,並添加監聽器:

_socket = new Socket(); 
// or if secure 
_socket = new TLSSocket(); 
_socket.addEventListener(Event.CONNECT, onConnect); 
_socket.addEventListener(ProgressEvent.SOCKET_DATA, onData); 
// also add listeners for errors, close etc 
_socket.connect(myURL, myPORT); 

private function onConnect(event:Event):void{ 
    //connection is live now so do whatever like send something 
    var request:String = "create a request here"; 
    _socket.writeUTFBytes(request); 
    _socket.flush(); 
} 

private function onData(event:ProgressEvent):void{ 
    //this gets called EVERY time new data comes over the socket 
    // the socket will stay connected until you close it (or an error makes it drop) 
    // here is how you read what came over the socket 
    while(_socket.bytesAvailable){ 
     theData = _socket.readUTFBytes(_socket.bytesAvailable); 
    } 
    // now do something with the data 
} 

希望幫助你讓你的插座設置