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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.01.2014, 18:40
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 31  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Правильно. Контроллеры общаются друг с другом посредством диспатчей, а обрабатывают события в хэндлерах, где и передают данные сервис<-> вид, либо сервис<->логика(модель).


Последний раз редактировалось Babylon; 10.01.2014 в 19:03.
Старый 10.01.2014, 18:53
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 32  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
подсмеивались из-за "ядра"
Смеялись не из-за ядра, а из-за хмл-мвц
Да и мне до сих пор система не понятна, а пример бы посмотрел. Теоретически должно адекватно смотреться в связке с флексом.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 10.01.2014, 19:00
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 33  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Я учёл пожелания. Теперь у меня по другому сделано. Есть дикт из коллекций MVC которые имеют свойства INodeIn и INodeOut c интерфейсом INode, где INode может быть либо XML, либо JSON. Пока еще не допилено...


Последний раз редактировалось Babylon; 10.01.2014 в 19:20.
Старый 10.01.2014, 19:52
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 34  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Цитата:
Сообщение от in4core
Dukobpa3 - так покажи как надо!
Цитата:
Сообщение от Isfet
выложите свой кусок , чтобы было понятно как надо..,
У меня есть вот такой вот пакетик. Пользуюсь уже несколько лет.
Недавно наводил порядки там и выпилил немного костыльного функционала, в том числе и криво написанный хттп-коннектор, в итоге там остался реализован только сокет(хттп уже давно не использовал, так я и не переживал).
Но я планировал добавить туда и хттп-коннектор. Возможно как раз будет повод.
Я честно вот сегодня пытался на костылях нечто собрать чтоб сюда скинуть, но костыли мне не понравились. Сделаю адекватно, расширю функционал своего пакета. Можно за репозиторием следить.

Добавлено через 4 минуты
Костыли частично показать могу:

Абстрактная команда. Ее расширяют наши остальные конкретные команды.
Код AS3:
package connector.commands
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	import project.model.SomeModel;
 
 
	internal class Command extends EventDispatcher
	{
		protected static const SERVER_URL:String = "http://your.server.url/";
 
		protected var _urlLoader:URLLoader  = new URLLoader();
		protected var _urlRequest:URLRequest = new URLRequest();
 
		// Каким-то образом ссылка на модель должна попасть в команду.
		// не хочу об этом думать. new SomeModel точно не конает, потмоу что она должна быть одна у всех.
		// Но это как вариант, и абсолютно не факт что ссылка на модель будет в базовой команде.
		// так как каждая команда скорее всего будет работать с другой моделью.
		protected var _model:SomeModel = new SomeModel();
 
		final public function execute(data:Object):void
		{
			prepareLoader(data);
 
			_urlLoader.addEventListener(Event.COMPLETE, onRequestComplete);
			_urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
 
			_urlLoader.load(_urlRequest);
		}
 
		protected function prepareLoader(data:Object):void
		{
			throw new Error("Should be overriden by sub classes");
		}
 
		protected function processData(data:Object):void
		{
			throw new Error("Should be overriden by sub classes");
		}
 
		private function onRequestComplete(e:Event):void
		{
			_urlLoader.removeEventListener(Event.COMPLETE, onRequestComplete);
			_urlLoader.removeEventListener(IOErrorEvent.IO_ERROR, onError);
 
			processData(_urlLoader.data);
		}
 
		private function onError(event:IOErrorEvent):void
		{
			trace("error");
		}
 
	}
}
Команда авторизации:
Код AS3:
package connector.commands
{
	import project.model.data.AuthResponceDo;
 
 
	internal class AuthCommand extends Command
	{
		private static const SERVICE_URL:String = "auth.php";
 
		override protected function prepareLoader(data:Object):void
		{
			// Эта команда простенькая, ниче настраивать не надо кроме урла.
			_urlRequest.url = Command.SERVER_URL + SERVICE_URL;
		}
 
		override protected function processData(data:Object):void
		{
			// парсинг будет совсем не такой, так как понятно что с сервера прилетит не этот тип Если у нас не амф.
			// для примера покатит.
			var parcedData:AuthResponceDo = data as AuthResponceDo;
 
			// Здесь просто вызывается метод модели. Но может быть любой другой набор действий.
			_model.auth(parcedData);
		}
	}
}
Команда хода в бою:
Код AS3:
package connector.commands
{
	import connector.commands.data.BattleTurnDto;
 
	import flash.net.URLRequestMethod;
	import flash.net.URLVariables;
 
	import project.model.data.TurnResponceDo;
 
 
	internal class BattleTurnCommand extends Command
	{
		private static const SERVICE_URL:String = "battle_turn.php";
 
		override protected function prepareLoader(data:Object):void
		{
			// тут команда посложнее, и она шлет во флешварах данные.
			var dto:BattleTurnDto = data as BattleTurnDto;
			if (!dto) throw new Error("а нифига, надо передать BattleTurnDto");
 
			_urlRequest.url = Command.SERVER_URL + SERVICE_URL;
 
			var variables:URLVariables = new URLVariables();
			variables.battle_id = dto.battle_id;
			variables.unit_id = dto.unit_id;
 
			_urlRequest.data = variables;
			_urlRequest.method = URLRequestMethod.GET;
		}
 
		override protected function processData(data:Object):void
		{
			// см. авторизацию. Суть та же. Это фейк.
			var parcedData:TurnResponceDo = data as TurnResponceDo;
			_model.turn(parcedData);
		}
	}
}
Вспомогательный класс структурка для команды хода:
Код AS3:
package connector.commands.data
{
	public class BattleTurnDto
	{
		public var battle_id:String;
		public var unit_id:String;
	}
}
Суть в том что на каждый месадж создаем отдельный класс который умеет слать запрос на сервер и обрабатывать ответ на него.
Эта часть сравнительно не костыльная получилась и надеюсь идею передал.

А вот по части менеджмента этих команд уже есть варианты. И с этими вариантами начались костыли на решение которых я уже не захотел тратить больше времени чем планировал.

Добавлено через 11 минут
Вот пример использования костыльного манагера, который я показывать не хочу
Код AS3:
			CommandManager.init();
 
			CommandManager.executeCommand(CommandList.COMMAND_AUTH);
 
			var turnDto:BattleTurnDto = new BattleTurnDto();
			turnDto.battle_id = "1";
			turnDto.unit_id = "10";
			CommandManager.executeCommand(CommandList.COMMAND_BATTLE_TURN, turnDto);
__________________
Кто к нам с чем для чего - тот у нас того от того.


Последний раз редактировалось Dukobpa3; 11.01.2014 в 16:04.
Старый 16.01.2014, 00:44
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 35  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Цитата:
Вот пример использования костыльного манагера, который я показывать не хочу
По хорошему, пользовательский код может вполне себе положить на манагер и работать исключительно с командами. То есть, вшить все эти связки с CommandManager в саму команду и сократить код примерно так:
Код AS3:
new BattleTurnDto().executeCommand().addCompleteListener(completeHandler);
Такой подход ты считаешь костыльным?

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
I hate JQuery

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

Добавлено через 3 часа 11 минут
И, кстати, чем вот это:
Код AS3:
new BattleTurnDto().executeCommand().addCompleteListener(completeHandler);
Отличается от вот этого.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 16.01.2014, 11:38
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 37  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Это не JQuery, а method chaining

Можешь набросать примерно, как с точки зрения пользовательского кода выглядит хорошая на твой взгляд система?

Старый 16.01.2014, 14:39
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 38  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Я думаю не сможет.
Тут сам по себе подход сервера убог, а значит сделать под него хорошую систему уже не получится.
Как мне кажется не стоит выдумывать какие то велосипеды на клиенте, когда сервер-сайд хренов. Надо менять сервер.
В момем случае стояла задача сделать БЫСТРО, и чтобы работало. 3-5 дней на реализацию подкладки. Понятное дело, если бы сроки были приемлимые, можно было бы сделать нормальтной эко систему, но тут пришлось безоговорочно работать с тем, что написано уже давно.
__________________
Марк Tween

Старый 16.01.2014, 14:50
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 39  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Тут сам по себе подход сервера убог, а значит сделать под него хорошую систему уже не получится.
Какой-то вы странный. Вы делаете запрос, вам приходит ответ. Чем подход убог? Не оправдал надежд? Или поломал ваш "универсальный" движок? Велосипеды стоит выдумывать или брать готовые, главное, чтобы задача была выполнена. Перфекционизм хорош в малых дозах, в больших количествах он заставляет писать гневные посты на форумах.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 16.01.2014, 15:01
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 40  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
GBee - если ты работаешь с медиа серверами например, у тебя есть серверные методы и сообщения. Там все понятно. Если ты работаешь с серверами типа пхп - то тут сложнее, и требуется удобная организация сервера - когда ты делаешь запрос, в ответе ты должен получать command:What_the_fox_say - чтобы значть на какую конкретно команду пришел ответ. Это не странность - это нормальность. Я же не несу фигни типа - ну а почему на сервере переменную назвали коряво? Это не мое дело. Мое дело получить ответ, который будет понятен и читабелен.
Потрачено.
__________________
Марк Tween

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

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

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


 


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


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