Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.03.2016, 17:58
cazzo вне форума Посмотреть профиль Отправить личное сообщение для cazzo Найти все сообщения от cazzo
  № 1  
Ответить с цитированием
cazzo

Регистрация: Mar 2016
Сообщений: 1
По умолчанию Данные от сервера (Client/Server)

Здравствуйте,
Есть два класса: Main и CustomSocket. В классе Main создается кнопка, нажав на которую отсылается запрос к серверу и получаются от него данные. Как мне эти данные заполучить в классе Main, чтобы их можно было обработать или изменить.

CustomSocket.as
Код AS3:
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();
	}
}
}
Main.as
Код AS3:
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();
 
		}
 
	}
}
Спасибо.

Старый 23.03.2016, 19:51
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 2  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
У меня есть замечания к Вашему коду.

Первое:
Я бы использовал композицию, а не наследование. То есть CustomSocket должен иметь в себе ссылку на обычный флешовый Socket, а не наследоваться от него. Как правило, композиция позволяет решать те же задачи проще.

Второе:
CustomSocket никак не уведомляет никого о том, что получил данные. Попробуйте отправлять из него событие о получении данных (например, из метода readResponse).Ну и, соответственно, в Main нужно на это событие подписаться

Третье:
Сделайте приватную переменную в Main и записывайте в нее ссылку на CustomSocket после его создания. Не создавайте новый CustomSocket при каждом клике, не думаю что Вам это на самом деле нужно.

Четвертое:
Негоже осуществлять соединение с сервером в конструкторе CustomSocket. Вынесите это в отдельный публичный метод и вызывайте из Main. Так в Main у Вас будет больше контроля над происходящим.

Ну и последнее:
Вы вызываете flush(), однако нигде в приведенном коде я не вижу отправки (write) чего либо в сокет. Скорее всего, сервер ожидает каких-то данных, чтобы ответить клиенту, а клиент этих данных не шлет.
__________________
...вселенская грусть

Старый 26.03.2016, 01:01
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 3  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Я бы использовал композицию, а не наследование. То есть CustomSocket должен иметь в себе ссылку на обычный флешовый Socket, а не наследоваться от него.
А мне понравилось. Не каждый новичок начинает сразу экстендить нативные классы.
Но в данном случае нет прямых показаний на наследование.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:33.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.