![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Цитата:
Цитата:
Недавно наводил порядки там и выпилил немного костыльного функционала, в том числе и криво написанный хттп-коннектор, в итоге там остался реализован только сокет(хттп уже давно не использовал, так я и не переживал). Но я планировал добавить туда и хттп-коннектор. Возможно как раз будет повод. Я честно вот сегодня пытался на костылях нечто собрать чтоб сюда скинуть, но костыли мне не понравились. Сделаю адекватно, расширю функционал своего пакета. Можно за репозиторием следить. Добавлено через 4 минуты Костыли частично показать могу: Абстрактная команда. Ее расширяют наши остальные конкретные команды. 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"); } } } 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); } } } 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); } } } package connector.commands.data { public class BattleTurnDto { public var battle_id:String; public var unit_id:String; } } Эта часть сравнительно не костыльная получилась и надеюсь идею передал. А вот по части менеджмента этих команд уже есть варианты. И с этими вариантами начались костыли на решение которых я уже не захотел тратить больше времени чем планировал. Добавлено через 11 минут Вот пример использования костыльного манагера, который я показывать не хочу ![]()
__________________
Кто к нам с чем для чего - тот у нас того от того. Последний раз редактировалось Dukobpa3; 11.01.2014 в 16:04. |
![]() |
Часовой пояс GMT +4, время: 05:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|