AS3/amphp - Singleton Remote Data Request Manager
This is a remote connection data request class used for requesting data in Flex (AS3), using static function calls to a amfphp gateway.
This is free and you can use it the way you want. So I won’t provide a example for using; this will be your work for deserving it.
Put this in the package you want (this is currently in wm.managers). ad name the file RemoteDatamanager.as
Don’t forget to set the server side php session id so you have the same sesion data when you’re doing file uploads for example.
package wm.managers { import mx.collections.ArrayCollection; import wm.objects.IProcess; public class RemoteDataManager { private static var _instance:SingletonRemoteDataManager; public function RemoteDataManager() { throw(new Error('RemoteDataManager: You can\'t instatiate a singleton class')); } private static function instance():* { if (_instance) { } else { _instance = new SingletonRemoteDataManager(); } return _instance; } // PUBLIC INTERFACE FUCNTIONS public static function requestAmfphp(request:String , data:*, callback:Function, listeners:String = null, process:IProcess = null, service:String = ''):void { instance().requestAmfphp(request,data,callback, listeners, process,service); } public static function setSessionId(sessionid:String):void { instance().setSessionId(sessionid); } public static function getSessionId():String { return instance().getSessionId(); } public static function dispatchListener(listener:String):void { instance().dispatchListener(listener); } public static function set gatewayRequestPath(value:String):void { instance().gatewayRequestPath = value; } } } import mx.collections.ArrayCollection; import flash.utils.Dictionary; import wm.managers.LoggingManager; import wm.utils.RemotingConnection; import flash.net.Responder; import flash.profiler.showRedrawRegions; import mx.managers.CursorManager; import mx.controls.Alert; import flash.events.NetStatusEvent; import wm.objects.IProcess; import wm.structures.ProcessMessage; import mx.core.Application; import wm.managers.RemoteDataManager; internal class RemoteAmfRequest { private var _request:String; private var _data:*; private var _callback:Function; private var _service:String; private var _remoteUrl:String; private var _process:IProcess = null; public function RemoteAmfRequest(request:String , data:*, callback:Function, service:String, process:IProcess, remoteConnectionUrl:String) { _request = request; _callback = callback; _service = service; _remoteUrl = remoteConnectionUrl; _data = data; _process = process; executeRequest() } public function get request():String { return _request; } public function get data():* { return _data; } public function get callback():Function { return _callback; } public function get service():String { return _service; } public function get remoteUrl():String { return _remoteUrl; } public function get process():IProcess { return _process; } private function setBusyProcess():void { if (_process) _process.sendMessage(new ProcessMessage(ProcessMessage.MODAL_LOCK, {mode:true})); } private function removeBusyProcess():void { if (_process) _process.sendMessage(new ProcessMessage(ProcessMessage.MODAL_LOCK, {mode:false})); } public function executeRequest():void { var gateway:RemotingConnection = new RemotingConnection( _remoteUrl ); gateway.addEventListener(NetStatusEvent.NET_STATUS,net_status_callback) gateway.call( _service, new Responder(onResult, onFault),_request, _data); CursorManager.setBusyCursor(); setBusyProcess() } private function net_status_callback(ev:NetStatusEvent):void { Alert.show("Net status error has occoured:") CursorManager.removeBusyCursor(); removeBusyProcess(); } private function onResult(output:*):void { removeBusyProcess(); output['errors'] = false; output['messages'] = false; // Searching for alerts to be made from request callback output if (output['alerts']) { var item:*; if (output['alerts']['messages']) { for each (item in output['alerts']['messages']) { Alert.show(item.message,item.title); output['messages'] = true; } } if (output['alerts']['errors']) { for each (item in output['alerts']['errors']) { output['errors'] = true; Alert.show(item.message,item.title); } } } if (output['__sessid']) { RemoteDataManager.setSessionId(output['__sessid']); } if (this['_callback']) _callback(output); CursorManager.removeBusyCursor(); } private function onFault( fault:String ):void { LoggingManager.addLog("RemoteAmfRequest","Amf fault: '" + fault + "'. Details(Request: `"+_request+"`, Service: `"+_service+"`);"); CursorManager.removeBusyCursor(); } } internal class SingletonRemoteDataManager { private var _requestStack:Dictionary = new Dictionary(); private var _listenersStack:ArrayCollection = new ArrayCollection(); private var remoteConnectionUrl:String = ""; private var defaultService:String = "system.request"; private var sessionId:String = ''; /** */ public function requestAmfphp(request:String , data:*, callback:Function = null, listeners:String = null, process:IProcess = null, service:String = ''):void { // Send also the session id //data.__sessid = sessionId; var _remoteAmfRequest:RemoteAmfRequest = new RemoteAmfRequest( request, data, callback, service.length ? service : defaultService, process, remoteConnectionUrl ); if (listeners) if (listeners.length) { // HERE I SEARCH IF A SIMILAR LISTENER FOR AN IDENTICALL REQUEST WAS ALREADY ADDDED TO STACK for each (var item:* in _listenersStack) { if ( (item.listenersString==listeners) && (item.reference.callback == callback) && (item.reference.request == request) ) { _listenersStack.removeItemAt(_listenersStack.getItemIndex(item)); } } _listenersStack.addItem({listeners:listeners.split(','), listenersString:listeners, reference:_remoteAmfRequest}); } } public function set gatewayRequestPath(value:String):void { remoteConnectionUrl = value; } public function setSessionId(sessionid:String):void { this.sessionId = sessionid; } public function getSessionId():String { return this.sessionId; } public function dispatchListener(listener:String):void { for each (var item:* in _listenersStack) { for each (var listenerString:String in item.listeners) { if (listenerString == listener) { item.reference.executeRequest(); break; } } } } } |





