|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Как правильно реализовать CallBack ?
Собственно возникла необходимость при передаче ОДИНАКОВЫХ команд в сокет, далее обрабатывать разные функции, в зависимости от того, откуда эта команда в сокет отдана.
В случае c MКЛ все тривиально - my_movieClip_loader( что_грузить, куда_грузить, что_делать_далее ) Лоадеры плодятся в цикле в неограниченных количествах и каждый инстанс лоадера "знает" что ему делать по окончании загрузки. Организовать такую структуру с инстансами для сокета мне не хватило ума. Использую вот такую портянку, с хранением адреса CALLBACK-а в переменной REDIRECT. Как легко можно видеть, никаких множественных запросов без организации очередей команд тут уже не сделаешь, да и вообще выглядит коряво. И кажетсы мне, что это можно реализовать правильнее и эстетичнее. Соотв. вопрос - вот что есть, и как это улучшить? var REDIRECT // Адрес CALLBACK-а var socket:XMLSocket = new XMLSocket() socket.connect( socketName, socketPort ) socket.onConnect = function( stat:Boolean ):Void{ if ( stat ) socket.send( initLogin )} socket.onData = function ( rez:String ):Void{ switch ( rez ) { case "CMD1": REDIRECT() REDIRECT = null break; case "CMD2": break; ... case "CMDX": break; } } function F1(){ REDIRECT = FUN1 socket.send( "CMD1" ) } function F2(){ REDIRECT = FUN2 socket.send( "CMD1" ) } function F3(){ REDIRECT = FUN3 socket.send( "CMD1" ) } function FUN1(){ A = A + 10 } function FUN2(){ B = A - 20 } function FUN3(){ C = D*2 } Суть моего мозгового затыка в том, что лоадеры я создаю новые и удаляю, а сокет он статичный... Последний раз редактировалось dark256; 21.04.2011 в 12:19. |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
Цитата:
Реализовать задачу можно лучше, если написать собственный класс-наследник XMLSocket-а и класс XMLSocketTask, например.
__________________
hauts.ru |
|
|||||
Про лоадеры - это применительно к очередности загрузок и отображения прогресс-лоадеров, как я понял.
Если на это забить - то будет как я сказал Я зеленый чайник с отломанной ручкой и носиком, в ООП. Можно примерчик? |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
Ох. Прямо сейчас не накидаю, думаю.
Но а вообще я думаю что-то типа такого должно получиться: import ru.hauts.as2.sockets.* var connector = new SocketConnector("192.168.1.1", 1024) connector.onConnect = function(){ // start here } // SocketConnector.sendCommand( command:String , arg_1, arg_2,...) но лучше, наверное, вот так: // SocketConnector.sendCommand( command:String , commandArguments:Object) , где все команды джэйсоном кодируются. connector.sendCommand( SocketConnectorCommands.RESTART) connector.sendCommand( SocketConnectorCommands.KILLSERVER, {delay:10, deleteUsers: true}) // SocketConnector.addCallback( command:String , callback:Function, priority:Number = 0, skipSelf:Boolen = true) connector.addCallback( SocketConnectorCommands.RESTART , onRestart) connector.addCallback( SocketConnectorCommands.KILLSERVER, onKillServer) function onRestart( commandArguments: Object ){ // callback? :) } function onKillServer( commandArguments: Object ){ // callback? :) trace("onKillServer:"); trace("\tdelay = "+commandArguments.delay); trace("\tdeleteUsers = "+commandArguments.deleteUsers); } Вы ведь это имели в виду, верно? Добавлено через 1 минуту Цитата:
__________________
hauts.ru Последний раз редактировалось Hauts; 21.04.2011 в 13:48. |
|
|||||
Спасибо за пример, буду усваивать!
А то блин, смех сказать, до сих пор не знаю - какой ногой в какие берега )) Лоадеры: а. ну да, когда ВСЕ загрузилось - понятно. |
Часовой пояс GMT +4, время: 12:16. |
|
« Предыдущая тема | Следующая тема » |
|
|