![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Sep 2011
Адрес: Russia, Ryazan
Сообщений: 8
|
Всем привет. Извиняюсь за не очень внятное название темы. В AS я совсем новичок, так что не пинаем
![]() Имеется следующая проблема. Имеется флешка и имеется сервер. Во флешке есть некий класс отвечающий за удаленную работу с устройством , у него есть следующий метод геттер для свойства: FState - некое свойство, отвечающее за состояние устройства. Все вроде бы хорошо, но! В GetState() я через Socket посылаю запрос о состоянии на сервак, так как сокет асинхронный, то ответ ко мне придет не очень даже понятно когда. Ответ приходит по событию сокета SOCKET_DATA. А свойство FState вернется из функции State сразу после того как функция GetState() закончит свое выполнение. Вешать флешку(графику) нельзя. А значение FState устанавливается только в самом обработчике события SOCKET_DATA, когда приходит ответ от сервера. Вот и вопрос: как сделать такое ожидание, чтобы return FState происходило только тогда когда придет ответ от сервера? Спасибо. ЗЫ: гуглить пытался, но не получается нормально подобрать запрос. |
|
|||||
|
Создать событие состояния или воспользоваться стандартными. Подписаться у "некоего" класса на это событие. При изменение состояния посылать из "некоего" класса событие о изменении состояния.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Цитата:
Когда придёт запрос от сервера - может вызываться какая-то функция, которая вернёт FState.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
private var FState:String; addEventListener(StateEvent.CHANGE,stateChangeHandler); public function get state():String { return FState; } public function doSomething():void { // do something with socket etc... } protected function stateChangeHandler(event:StateEvent):void { FState=event.messageData.data; dispatchEvent(new Event(Event.CHANGE)); } package { import flash.events.Event; public class StateEvent extends Event { public var messageData:Object; public static const CHANGE:String="stateChange"; public function StateEvent(type:String, data:Object=null) { super(type, data); var messObj:Object=new Object(); messObj.data=data; this.messageData=messObj; } } } Последний раз редактировалось djyamato; 19.09.2011 в 10:42. |
|
|||||
|
Регистрация: Sep 2011
Адрес: Russia, Ryazan
Сообщений: 8
|
Спасибо.
Пока сделал вот таким вот образом: Есть класс№1, который собственно вызывает функцию GetState: public class class1 { ... private var FDevice: DeviceClass; ... public function DeviceState() { FDevice.GetState(); } } public function GetState() { var X: XML = <request> <device cmd="state"/> </request>; Send(X, 'Device GetState'); this.addEventListener(StateEvent.CHANGE, onStateReceived); } private function onSocketData(event: Event) { ... FState = eX.device[0].@state; dispatchEvent(new Event(StateEvent.CHANGE)); } private function onStateReceived(event: Event): void { FClass1.DeviceStateChanged(); this.removeEventListener(StateEvent.CHANGE, onStateReceived); } В принципе такое поведение вроде как устраивает. Вопрос в том, нельзя ли как то обойтись без функции DeviceStateChanged в Class1, чтобы State возвращалось в метод Class1.DeviceState после вызова FDevice.GetState()? Мне почему-то кажется что вряд ли такое возможно, но если бы такое поведение получилось создать было бы, наверное, не плохо ![]() Спасибо. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|