0

関数とソケットが宣言されているとします。私たちはそれを呼びconnectました。今、私たちはaddEventListener接続するよう呼びかけました。

理論的には、eventDispatcher に提供された関数を設定してクラス変数を変更し、最初に呼び出された関数をaddEventListenerその変数でロックすることができます (alike while(!class_instancce.is_connected))。

私の質問は次のとおりです。addEventListenerフラッシュ実行時に呼び出されるように渡された関数は、「待機中」の関数が終了するのを待ちますか?

4

2 に答える 2

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
}

ソケットのセットアップに役立つことを願っています

于 2012-11-03T15:15:43.867 に答える
0

addEventListener に渡される関数は、リッスンしているインスタンスによってリッスンしているイベントがディスパッチされるとすぐに実行されます (複数のリスナーがある場合、これはイベントの優先度に基づきます。

ソケット接続を同期させようとしているように思えます。AS には同期を強制できるものがありますが、ソケットではこれを行うことはできません。

正直なところ、イベント駆動型のアーキテクチャにすぐに慣れる必要があります。これにより、あらゆる種類の OOP の魅力が可能になるからです。

縛られて決心している場合は、無名関数を使用できます。あなたはそれを自分で研究することができます。自分が何をしているのか、メモリリークを回避する方法などを本当に理解していない限り、それは悪い習慣だと思います.

于 2012-11-03T03:52:11.687 に答える