|
|
|
|||||
Регистрация: Mar 2016
Сообщений: 1
|
Данные от сервера (Client/Server)
Здравствуйте,
Есть два класса: Main и CustomSocket. В классе Main создается кнопка, нажав на которую отсылается запрос к серверу и получаются от него данные. Как мне эти данные заполучить в классе Main, чтобы их можно было обработать или изменить. CustomSocket.as package { import flash.errors.*; import flash.events.*; import flash.net.Socket; public class CustomSocket extends Socket { public var response:String; public function CustomSocket(host:String = null, port:uint = 0) { super(); configureListeners(); if (host && port) { super.connect(host, port); } } private function configureListeners():void { addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); } public function readResponse():String { var str:String = readUTFBytes(bytesAvailable); response += str; return response; } 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(); } } } package { import flash.display.SimpleButton; import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.ProgressEvent; public class Main extends Sprite { private var socket:CustomSocket; private var d:String; public function Main() { var up:Sprite = new Sprite(); up.graphics.lineStyle(1, 0x000000); up.graphics.beginFill(0xCCFF00); up.graphics.drawRect(0,0,50,20); var over:Sprite = new Sprite(); over.graphics.lineStyle(1, 0x000000); over.graphics.beginFill(0x00CCFF); over.graphics.drawRect(0,0,50,20); //create button var button:SimpleButton = new SimpleButton(up,over,over,up); addChild(button); button.addEventListener(MouseEvent.CLICK, sata); } private function sata(event:MouseEvent):void { socket = new CustomSocket("127.0.0.1", 9999); socket.flush(); } } } |
|
|||||
У меня есть замечания к Вашему коду.
Первое: Я бы использовал композицию, а не наследование. То есть CustomSocket должен иметь в себе ссылку на обычный флешовый Socket, а не наследоваться от него. Как правило, композиция позволяет решать те же задачи проще. Второе: CustomSocket никак не уведомляет никого о том, что получил данные. Попробуйте отправлять из него событие о получении данных (например, из метода readResponse).Ну и, соответственно, в Main нужно на это событие подписаться Третье: Сделайте приватную переменную в Main и записывайте в нее ссылку на CustomSocket после его создания. Не создавайте новый CustomSocket при каждом клике, не думаю что Вам это на самом деле нужно. Четвертое: Негоже осуществлять соединение с сервером в конструкторе CustomSocket. Вынесите это в отдельный публичный метод и вызывайте из Main. Так в Main у Вас будет больше контроля над происходящим. Ну и последнее: Вы вызываете flush(), однако нигде в приведенном коде я не вижу отправки (write) чего либо в сокет. Скорее всего, сервер ожидает каких-то данных, чтобы ответить клиенту, а клиент этих данных не шлет.
__________________
...вселенская грусть |
|
|||||
.
|
Цитата:
Но в данном случае нет прямых показаний на наследование. |
Часовой пояс GMT +4, время: 20:38. |
|
« Предыдущая тема | Следующая тема » |
|
|