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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.02.2012, 16:38
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 21  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

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

Старый 12.02.2012, 16:50
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 22  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Только подписаться отовсюду. Меня просто мучал вопрос, если делать не синглтон и не статику, а обычный экземплер созданный например в мейне. То как потом в других точках подписываться
Подписаться одно. А данные ты как брать будешь? Тут либо в эвенте передавать, либо в самом провайдере поля делать.
Значит, если данные выдавать на полях провайдера - нужно его самого передавать всем заинтересованным, а там уж пусть подписываются и читают.
(сам ли провайдер работает с сервером, или он просто модель, которую меняет класс, работающий с сервером - это другой вопрос, т.е. по логике не обязательно класс для работы с сервером тягать - лучше тягать только модель, которую он меняет)

Т.е.: создал вюшку "морковь". Ты же ее не из ничего создал - была модель, которую создал контроллер, когда получил данные от сервера.
Скорее всего была главная вюшка, которая услышала собырие ADDED_ITEM(с полем "модель моркови"), которая создала вьюшку МОРКОВЬ, куда передала при создании модель моркови. И в следующий раз, когда сервер пришлет изменение степени зрелости этой моркови - контроллер найдет по айдишнику модель моркови в главной модели и поменяет параметр "зрелость", продиспетчится событие, которое услышит вьюшка и которая отобразит изменения. Т.е. вьюшка получила модель(провайдер изменений и данных) в момент создания. При этом контроллер серверный ничего и не знал о вьюшке.

Если данные об _изменении_ передавать в событии - есть некоторые проблемы - если вьюшка появилась после загрузки данных - она их не получит, поэтому этот случай не рассматриваю. Или именно так у тебя дела и обстоят?


Последний раз редактировалось expl; 12.02.2012 в 17:03.
Старый 12.02.2012, 16:50
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 23  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Передавать детям.

Добавлено через 4 минуты
Мне вообще непонятно о чем речь. Один большой класс, который работает с серваком и хранит все полученные данные и раздает их по запросу, посылая перед этим событие апдейта данных? Бррр.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

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

Старый 12.02.2012, 16:59
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 25  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Мне вообще непонятно о чем речь. Один большой класс, который работает с серваком и хранит все полученные данные и раздает их по запросу, посылая перед этим событие апдейта данных? Бррр.
Скорее набор контроллеров, посылающих запросы серверу и разбирающих ответы. А данные хранятся не в контроллере а в древовидной модели, поэтому отдельные классы не такие уж и большие.

Но вообще да, тема куда-то уходит и начинает дублировать статью про "правильный MVC"

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

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
На самом деле мне интересно тоже кто как взаимодействие с сервером организовывает?
Как выглядит одно сообщение?
Как оно обрабатывается клиентом?
Кем оно обрабатывается?
Что делать дальше с полученной от сервера информацией?

И в таком духе. Делитесь своими изобретениями и догадками.
Я про свое рассказал.
- Есть коннектор - внутри сокет-сервер, хттп-сервер, конфиги обрабатывает, может работать с разного рода серверами и выдавать не зависимо от этого сообщения в едином формате. Может принимать джейсон, может принимать АМФ, сейчас вот протобуф тестирую. Это всё здесь.
- Есть ДатаКонтроллер - получает отформатированное сообщение от коннектора, смотрит что пришло. Ну и ему глобально пофиг что там и с кем общается коннектор. Урлов он не знает, портов тоже, даже по какому протолу общение происходит тоже не вкурсе, ему пофигу хттп или сокет. Его задача только отправлять и получать сообщения во внутреннем формате в коннектор. Коннектор там разберется уже.
- А дальше в разных проектах по разному. В одном проекте вот как я выше написал - одна большая модель, которая подключена к ДатаКонтроллеру, датаКонтроллер напрямую меняет модель при получении сообщения. На ветки этой модели подписаны вьюшки, вьюшки не курсе о существовании большой модели, видят только свои маленькие которые внутри этой большой. В другом проекте есть обсервер, датаКонтроллер получает сообщение, спамит обсерверу оповещение мол так и так такие то данные изменились. Сами данные записывает в синглтон БД игры. К этому синглтону имеют доступ все кому не лень.

Как-то так. А как это выглядит у вас?
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ЧТобы не быть голословным вот более понятная архитектура , чтобы ясно было о чем речь ВСЕМ.

Код AS3:
private static const _nc		:NetConnection 	= new NetConnection();
		private static const _sender	:Object    		= new Object();
		private static var _listener	:EventDispatcher;
 
		public static function connect(address:String , listener:EventDispatcher ):void {
 
			_nc.connect(address);
			_nc.client = _sender;
			_listener = listener;
			_sender.onSomeBack = onSomeBack;
 
			_nc.addEventListener(NetStatusEvent.NET_STATUS, connectionStatus);
		}
 
		static private function onSomeBack(vars:*):void {
 
			_listener.dispatchEvent( new C2SEvents(C2SEvents.SOME_EVENT , vars)); 
		}
 
		public static function disconnect():void {
			_nc.close();
		}
 
		private static function connectionStatus(e:NetStatusEvent) :void {
 
			const info : String = "NetConnection.Connect.Success" ;
 
			if (e.info.code == info ) _listener.dispatchEvent( new C2SEvents(C2SEvents.CONNECT));	
			else _listener.dispatchEvent( new C2SEvents(C2SEvents.DISCONNECT));
 
		}
 
		public static function callSomeMethod(var1:int, var2:int ):void {
 
                   _nc.call('serverMethod', new Responder(clinetMethod), var1, var2);
 
		}
Постарался именно архитектуру показать, поэтому заменил все слова.
Тоесть вот таких onSomeBack(vars:*) или callSomeMethod очень много соотв. Тоесть получили мы определенную пачку данных продиспатчили об этом нужным евентом. Почему встает такой вопрос, ну допустим :
1. Main тут мы создали и подключаемся, если подключение к серверу не прошло, просто не грузим библиотеки кликента и графику... ну нет смысла например )
2. Если соединение прошло, открываем некий ClassFrameWork где подписываемся на сообщения типа ( если это игра ) игра началась, игра закончилась и т.п.
3. Внутри же ClassFrameWork создается некий класс GameFrameWork где уже подписываемся на конкретные события игры - типа перс появился, перс умер и т.п.
П.с. конечно эти 3 пункта набросаны от башки и никто иак не делает, но я просто доношу смысл
__________________
Марк Tween

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
На самом деле мне интересно тоже кто как взаимодействие с сервером организовывает?
Меня один коллега подсадил на одну схему с которой я слезть не могу. И портирую, немного изменяя, от проекта к проекту.

Есть класс BaseOperation обертка над урллоадером со всеми обработчиками. В качестве параметра принимает урл, и два колбека (для результата и для ошибки). Шлет запрос, принимает ответ, если все хорошо - отдает в результатколбек ответ (хмл и джейсон) , плохо - ошибку в ошибкуколбек :о).

Если совсем плохо (невалидный хмл) падает :о)), но в отлаженном проекте такого нет.

Ну и дальше расширяющих классов пачка. Для каждого запроса.
GetUserListOperation
EditUserOperation
CreateProjectOperation

Каждый принимает как минимум два колбека + дополнительные парметры. В ответ отдает десериализированный объект или массив объектов. То есть в любой точке программы, могу получить нужную инфу от сервера. Если надо, то каждая операция может в статике кешить результаты и по запросу отдавать кеш. Короче мне нравится и удобно.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 12.02.2012, 18:43
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 29  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
2 in4core:
Насколько понял, статический класс, который ты привел в качестве примера - это не "провайдер данных", как я думал, а просто класс, реализующий запросы к серверу.
Если отбросить инициализацию, забыть что класс статический и загнать диспетчер внутрь (вроде нет смысла передавать его снаружи) интерфейс бы выглядел так:
Код AS3:
/*
Диспетчит события
C2SEvents.CONNECT,
C2SEvents.DISCONNECT,
C2SEvents.SOME_EVENT
*/
public interface ServerAPI extends IEventDispatcher
{
    function callSomeMethod(var1:int, var2:int):void;
}
И ты обращаешься к этому классу в каких-то частях приложения, подписываешься на событие C2SEvents.SOME_EVENТ и вызываешь callMethod?
Можно еще раз объяснить "что не нравится" (просто я могу много чего рассказать, что мне не нравится в вашем примере со статикой, но это будет долго, а главное будет очень зависеть от контекста)?
Всмысле вот есть этот статический класс, что там мешает на него подписываться, или тебя раздражает, что он статический, или если бы он был не статический у тебя возникают другие проблемы, короче хочется услышать то же, что и в первом посте, только конкретнее.


Последний раз редактировалось expl; 12.02.2012 в 18:52.
Старый 12.02.2012, 21:14
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 30  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
function callSomeMethod(var1:int, var2:int):void;
Это только заголовок, тоесьт таких методов сотни, и все их описать в интерфейсе бредово мне кажется.
Да раздражает фича Static.addEventListener , хотелось бы из любого места _dynamicClass.addEventListener
__________________
Марк Tween

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

Теги
single , static

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

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


 


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


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