Ссылка на текстовое поле на этапе выпуска - PullRequest
0 голосов
/ 27 сентября 2011

Я использую этот пример кода, взятый из документов: весь код содержится внутри SocketExample.as, то есть тоже DocumentClass.

package {
    import flash.display.Sprite;

    public class SocketExample extends Sprite {

        public function SocketExample() {
            var socket:CustomSocket = new CustomSocket("127.0.0.1", 5000);
        }
    }
}

import flash.errors.*;
import flash.events.*;
import flash.net.Socket;

class CustomSocket extends Socket {
    private var response:String;
    public var txt:TextField; 

    public function CustomSocket(host:String = null, port:uint = 0) {
        super();
        configureListeners();
        if (host && port)  {
            super.connect(host, port);
        }
    }

    private function configureListeners():void {
        addEventListener(Event.CLOSE, closeHandler);
        addEventListener(Event.CONNECT, connectHandler);
        addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
    }

    private function writeln(str:String):void {
        str += "\n";
        try {
            writeUTFBytes(str);
        }
        catch(e:IOError) {
            trace(e);
        }
    }

    private function sendRequest():void {
        trace("sendRequest");
        response = "";
        writeln("GET /");
        flush();
    }

    private function readResponse():void {
        var str:String = readUTFBytes(bytesAvailable);
        response += str;
    }

    private function closeHandler(event:Event):void {
        trace("closeHandler: " + event);
        trace(response.toString());
    }

    private function connectHandler(event:Event):void {
        trace("connectHandler: " + event);
        sendRequest();
    }

    private function ioErrorHandler(event:IOErrorEvent):void {
        trace("ioErrorHandler: " + event);
    }

    private function securityErrorHandler(event:SecurityErrorEvent):void {
        trace("securityErrorHandler: " + event);
    }

    private function socketDataHandler(event:ProgressEvent):void {
        trace("socketDataHandler: " + event);
        readResponse();
    }
    public function returnResponse(){
        return response.toString();
    }
}

При закрытии сокета вызывается closeHandler. Как я могу записать значение ответа в текстовое поле на сцене? Я попытался отправить пользовательское событие из CustomSocket closeHandler, но, даже если я правильно добавил слушатель в конструктор SocketExample, я не получил никакого события. Что я могу сделать?

1 Ответ

0 голосов
/ 27 сентября 2011

Похоже, вы уже добавили публичное поле txt для хранения ссылки на текстовое поле. Как насчет того, чтобы создать текстовое поле в классе SocketExample, добавить его на сцену, а затем установить socket.txt = yourTextField. Тогда вы можете просто использовать txt непосредственно в closeHandler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...