Как получить данные из события в другом классе во Flash as3? - PullRequest
0 голосов
/ 02 января 2011


У меня есть класс с именем socket.as, который отвечает за подключение к сокету и т. Д. Он имеет прослушиватель событий onSocketData, который вызывается при получении данных.В моем основном классе, Main.as, я создал объект класса сокетов.

Как я могу получить данные из класса сокетов?Нужно ли создавать в Main.as пользовательское событие, которое должно запускаться классом сокета?Спасибо.

ниже - прослушиватель событий из класса сокетов:
</p> <pre>private function onSocketData(event:ProgressEvent):void <br> { //string sent over serial port. var data:String = _socket.readUTFBytes( _socket.bytesAvailable ); var direction:int = 0; buffer += data; while((index = buffer.indexOf(EOL_DELIMITER)) > -1) { msg = buffer.substring(0, index-1); len = (buffer.indexOf(EOL_DELIMITER)) - 1; //remove the message from the buffer buffer = buffer.substring(index + 1); if ( msg != "off" ) { button = parseInt(msg.substr(6, (len-8))); trace("Socket Data: " + msg + ", Button: " + button); } } }

Ответы [ 2 ]

1 голос
/ 02 января 2011

Что ж, если вы просто хотите получить данные, вы можете сохранить их в массиве вашего класса, а затем иметь метод, который их извлекает.

Если вместо этого вы хотите отправить событие в Main.as, вам нужно будет создать пользовательское событие.

Самый простой способ сделать это - извлечь ваш класс из EventDispatcher.

Затем, когда вы хотите запустить событие, вы просто вызываете super.dispatchEvent(new CustomEvent(payload)), где CustomEvent - ваш класс, производный от Event.

Общая схема будет выглядеть так:

Создайте пользовательское событие ... если существующий класс событий не имеет смысла ... затем просто используйте что-то еще.

public class SocketEvent extends Event {
    public var payload:String;
    public function SocketEvent(payload:String, bubbles:Boolean=false, cancelable:Boolean=false) {
        super(Socket.EVENT_NAME, bubbles, cancelable);
        this.payload = payload;
    }
}

Тогда класс, который запускает событие, выглядит следующим образом:

public class Socket extends EventDispatcher {
    public static const EVENT_NAME:String = "EVENT_NAME";

    private function fireTheEvent(payload:String):void {
        dispatchEvent(new SocketEvent(payload));
    }
}

Наконец, чтобы использовать его в Main.as, вы должны сделать это:

private var socket:Socket = new Socket();
socket.addEventListener(Socket.EVENT_NAME, actionHandler);

Обратите внимание, что это НЕ единственный способ вызвать событие. Другим способом было бы реализовать IEventDispatcher в терминах статических методов EventDispatcher ... но это другой пример.

1 голос
/ 02 января 2011

Как вы упомянули, вы можете создать CustomEvent, который будет запускаться классом Socket, или вы можете отправлять событие из класса Socket, когда доступны данные, и использовать метод получения для получения переменной.

Я ответил на аналогичный вопрос здесь: AS3 Передача данных между объектами / классами

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