/as3/bentbit-connector-client/src/org/bentbit/http/HttpServiceQue.as
ActionScript | 566 lines | 448 code | 95 blank | 23 comment | 45 complexity | 533fb068636dc938a331567dcb5993d9 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1
- package org.bentbit.http
- {
- //#####Define Imports.
- import flash.events.ProgressEvent;
- import flash.utils.clearTimeout;
- import flash.utils.setTimeout;
-
- import mx.collections.ArrayCollection;
- import mx.collections.XMLListCollection;
- import mx.rpc.events.FaultEvent;
- import mx.rpc.events.ResultEvent;
- import mx.rpc.http.HTTPService;
- import mx.utils.Base64Encoder;
-
- [Event(name="complete", type="flash.events.Event")]
- [Event(name="cancel", type="flash.events.Event")]
- [Event(name="progress", type="flash.events.ProgressEvent")]
-
- public class HttpServiceQue
- {
-
- //#####Private Variables.
- [Bindable] private var _oHttp:HTTPService = new HTTPService();
- [Bindable] private var _aHttpQue:ArrayCollection = new ArrayCollection();
- [Bindable] private var _iHttpQue:Number = 0;
- [Bindable] private var _bCancel:Boolean = false;
- [Bindable] private var _bProcessing:Boolean = false;
- [Bindable] private var _nTimeout:Number;
- [Bindable] private var _sTempMethod:String = "POST";
- [Bindable] private var _sTempResultFormat:String = "e4x";
-
- //#####Public Variables.
- [Bindable] public var serializeResult:Boolean = false;
- [Bindable] public var queueDelay:Number = 1;
-
- //#####Getter / Setter Functions.
- [Inspectable(defaultValue="undefined", category="General")]
- public function get headers():Object
- {
- return _oHttp.headers;
- }
- public function set headers(r:Object):void
- {
- _oHttp.headers = r;
- }
-
- [Inspectable(enumeration="GET,get,POST,post,HEAD,head,OPTIONS,options,PUT,put,TRACE,trace,DELETE,delete", defaultValue="POST", category="General")]
- public function get method():String
- {
- return _oHttp.method;
- }
- public function set method(m:String):void
- {
- _oHttp.method = m;
- }
-
- [Inspectable(enumeration="object,array,xml,flashvars,text,e4x", defaultValue="e4x", category="General")]
- public function get resultFormat():String
- {
- return _oHttp.resultFormat;
- }
- public function set resultFormat(rf:String):void
- {
- _oHttp.resultFormat = rf;
- }
-
- [Inspectable(defaultValue="false", category="General")]
- public function get showBusyCursor():Boolean
- {
- return _oHttp.showBusyCursor;
- }
-
- public function set showBusyCursor(sbc:Boolean):void
- {
- _oHttp.showBusyCursor = sbc;
- }
-
- public function get url():String
- {
- return _oHttp.url;
- }
- public function set url(url:String):void
- {
- _oHttp.url = url;
- }
-
- //#####Init Function.
- public function HttpServiceQue()
- {
- try
- {
- _oHttp.headers = headers;
- _oHttp.method = "POST";
- _oHttp.resultFormat = "e4x";
- _oHttp.showBusyCursor = showBusyCursor;
- configureListeners(_oHttp);
- }
- catch(E:Error){}
- }
-
- //#####Public Functions.
- public function add(oParameters:Object = null, oFunctionResult:Function = null, oFunctionFault:Function = null, sUrl:String = null, bCache:Boolean = true):void
- {
- try
- {
- if (bCache == false) sUrl = getCacheUrl(sUrl);
- _aHttpQue.addItem({Parameters:oParameters, FunctionResult:oFunctionResult, FunctionFault:oFunctionFault, Url:sUrl, Cache:bCache, Command:false});
- }
- catch(E:Error){}
- }
-
- public function command(sName:String, oParameters:Object = null, oFunctionResult:Function = null, oFunctionFault:Function = null, sUrl:String = null, bCache:Boolean = false):void
- {
- try
- {
- if (oParameters == null) oParameters = new Object;
- oParameters._COMMAND = sName;
- }
- catch(E:Error){}
-
- try
- {
- if (bCache == false) sUrl = getCacheUrl(sUrl);
- _aHttpQue.addItem({Parameters:oParameters, FunctionResult:oFunctionResult, FunctionFault:oFunctionFault, Url:sUrl, Cache:bCache, Command:true});
- }
- catch(E:Error){}
- }
-
- public function send():void
- {
- try
- {
- doSend();
- }
- catch(E:Error){}
- }
-
- public function cancel():void
- {
- try
- {
- doCancel();
- }
- catch(E:Error){}
- }
-
- public function clear():void
- {
- try
- {
- doClear();
- }
- catch(E:Error){}
- }
-
- public function setCredentials(sUsername:String, sPassword:String):void
- {
- var oEncoder:Base64Encoder = new Base64Encoder();
- oEncoder.insertNewLines = false;
- oEncoder.encode(sUsername + ":" + sPassword);
-
- _oHttp.method = "POST";
- _oHttp.headers = {Authorization:"Basic " + oEncoder.toString()};
-
- //_oHttp.setCredentials(sUsername, sPassword); // This method doesn't work
- }
-
- //#####Private Functions.
- public function getCacheUrl(sUrl:String):String
- {
- var rtnVal:String = sUrl;
-
- try
- {
- var dDate:Date = new Date;
-
- if (sUrl.indexOf("?") > 0)
- {
- rtnVal = rtnVal + "&"
- }
- else
- {
- rtnVal = rtnVal + "?"
- }
-
- rtnVal = rtnVal + "___CacheGuidTimestamp=" + String(dDate.fullYearUTC) + String(dDate.monthUTC) + String(dDate.dayUTC) + String(dDate.dateUTC) + String(dDate.hoursUTC) + String(dDate.minutesUTC) + String(dDate.secondsUTC) + String(dDate.minutesUTC)
-
- }
- catch(E:Error)
- {
- rtnVal = sUrl;
- }
-
- return rtnVal;
- }
-
- //doSend: main send function
- private function doSend():void
- {
- try
- {
- if (_bProcessing == false)
- {
- if(_bCancel == true) doCancel2();
-
- _bProcessing = true;
- _bCancel = false;
-
- _iHttpQue = 0;
-
- doProgress();
- doSend2();
- }
- }
- catch(E:Error){}
- }
-
- //doSend2: item send function
- private function doSend2():void
- {
- try
- {
- try{clearTimeout(_nTimeout)}catch(E:Event){}
- if(_bCancel == true) doCancel2();
-
- if(_iHttpQue < _aHttpQue.length)
- {
- //set the proper result format
- if (_aHttpQue.getItemAt(_iHttpQue)["Command"] == true)
- {
- _sTempResultFormat = _oHttp.resultFormat;
- _oHttp.resultFormat = "e4x";
- }
- else
- {
- _oHttp.resultFormat = _sTempResultFormat;
- }
-
- //set the proper method
- if (_aHttpQue.getItemAt(_iHttpQue)["Cache"] == false)
- {
- _sTempMethod = _oHttp.method;
- _oHttp.method = "POST";
- }
- else
- {
- _oHttp.method = _sTempMethod;
- }
-
- //set the url
- if (_aHttpQue.getItemAt(_iHttpQue)["Url"] != null) _oHttp.url = _aHttpQue.getItemAt(_iHttpQue)["Url"];
-
- //send the command
- _oHttp.send(_aHttpQue.getItemAt(_iHttpQue)["Parameters"]);
-
- //increment the command
- _iHttpQue = _iHttpQue + 1;
- }
- else
- {
- doClear();
- _bCancel = false;
- _bProcessing = false;
- var doEvent:Event = new Event("complete",false,false);
- dispatchEvent(doEvent);
- }
- }
- catch(E:Error){}
- }
-
- //doCancel: main cancel function (cancel happens after current item is processed)
- private function doCancel():void
- {
- try
- {
- _bCancel = true;
- }
- catch(E:Error){}
- }
-
- //doCancel2: complete the cancel function
- private function doCancel2():void
- {
- try
- {
- _bCancel = false;
- _bProcessing = false;
-
- doClear();
-
- var doEvent:Event = new Event("cancel",false,false);
- dispatchEvent(doEvent);
- }
- catch(E:Error){}
- }
-
- //doClear: clear the que and reset vars
- private function doClear():void
- {
- try
- {
- _iHttpQue = 0;
- _aHttpQue.removeAll();
- }
- catch(E:Error){}
- }
-
- //doProgress: Notify of progress
- private function doProgress():void
- {
- try
- {
- var doEvent:ProgressEvent = new ProgressEvent("progress",false,false,_iHttpQue,_aHttpQue.length);
- dispatchEvent(doEvent);
- }
- catch(E:Error){}
- }
-
- //#####Handlers.
- private function configureListeners(dispatcher:IEventDispatcher):void
- {
- try
- {
- dispatcher.addEventListener(ResultEvent.RESULT, resultHandler);
- dispatcher.addEventListener(FaultEvent.FAULT, faultHandler);
- dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
- }
- catch(E:Error){}
- }
-
- private function resultHandler(event:ResultEvent):void
- {
- try
- {
- var oFunction:Function = _aHttpQue.getItemAt(_iHttpQue-1)["FunctionResult"];
- if (oFunction != null && serializeResult == true) oFunction.call(null, event, serializeResultData(event));
- if (oFunction != null && serializeResult != true) oFunction.call(null, event);
-
- doProgress();
- _nTimeout = setTimeout(doSend2, queueDelay);
- }
- catch(E:Error){}
- }
-
- private function faultHandler(event:FaultEvent):void
- {
- try
- {
- var oFunction:Function = _aHttpQue.getItemAt(_iHttpQue-1)["FunctionFault"];
- if (oFunction != null) oFunction.call(null, event);
-
- doProgress();
- }
- catch(E:Error){}
- }
-
- private function progressHandler(event:ProgressEvent):void
- {
- try
- {
- var nLoaded:Number;
- var nTotal:Number;
-
- nLoaded = (_iHttpQue * ((event.bytesLoaded / event.bytesTotal) * 100));
- nTotal = (_aHttpQue.length * 100);
-
- if (nLoaded < 0) nLoaded = 0;
- if (nTotal <= 0) nTotal = 1;
-
- var doEvent:ProgressEvent = new ProgressEvent("progress",false,false,nLoaded,nTotal);
- dispatchEvent(doEvent);
- }
- catch(E:Error){}
- }
-
- private function serializeResultData(event:ResultEvent):* //currently only supports xml in bentbit-connector format
- {
- var rtnVal:*;
-
- try
- {
- rtnVal = serializeData(event.result.Body.data);
- }
- catch(E:Error)
- {
- rtnVal = null;
- }
- return rtnVal;
- }
-
- private function serializeData(oValue:*, sType:String = null):* //currently only supports xml in bentbit-connector format
- {
- var rtnVal:*;
-
- try
- {
- if (sType == null) sType = oValue.@type.toString();
-
- switch(sType)
- {
- case "Null":
-
- rtnVal = null;
-
- break;
- case "Number":
-
- rtnVal = Number(oValue);
-
- break;
- case "Date":
-
- var sValue:String = String(oValue);
-
- if (sValue != "")
- {
- sValue = sValue.replace(/-/g, "/");
- sValue = sValue.replace("T", " ");
- sValue = sValue.replace("Z", " GMT-0000");
-
- rtnVal = new Date(Date.parse(sValue))
- }
- else
- {
- sValue = null;
- }
-
- break;
- case "String":
-
- rtnVal = String(oValue);
-
- break;
- case "Object":
- case "Binary":
-
- rtnVal = oValue;
-
- break;
- case "Boolean":
-
- if (String(oValue).toLowerCase() == "true")
- {
- rtnVal = true;
- }
- else
- {
- rtnVal = false;
- }
-
- break;
- case "Array":
- case "ArraySingle":
-
- var oData:XMLList = oValue.data as XMLList;
- var oArray:ArrayCollection = new ArrayCollection;
-
- for each (var oItem:Object in oData)
- {
- try
- {
- oArray.addItem(serializeData(oItem));
- }
- catch(E:Error){}
- }
-
- rtnVal = oArray;
-
- break;
- case "ArrayMulti":
-
- var oData:XMLList = oValue.row as XMLList;
- var oDataHeader:XMLList = oValue.header as XMLList;
- var oArrayCollection:ArrayCollection = new ArrayCollection;
-
- for each (var oItem:Object in oData)
- {
- try
- {
- var oNewItem:Object = new Object;
-
- for (var oProperty:Object in oItem.children())
- {
- var sPropertyName:String = oItem.children()[oProperty].name();
- var oPropertyValue:Object = oItem.children()[oProperty];
-
- oNewItem[sPropertyName] = serializeData(oPropertyValue);
- }
- }
- catch(E:Error){}
- oArrayCollection.addItem(oNewItem);
- }
-
- rtnVal = oArrayCollection;
- //rtnVal = oValue.row as XMLList;
-
- break;
- case "Recordset":
-
- var oData:XMLList = oValue.row as XMLList;
- var oDataHeader:XMLList = oValue.header as XMLList;
- var oArrayCollection:ArrayCollection = new ArrayCollection;
-
- for each (var oItem:Object in oData)
- {
- try
- {
- var oNewItem:Object = new Object;
-
- for (var oProperty:Object in oItem.children())
- {
- var sPropertyName:String = oItem.children()[oProperty].name();
- var oPropertyValue:Object = oItem.children()[oProperty];
-
- oNewItem[sPropertyName] = serializeData(oPropertyValue, String(oDataHeader[0][sPropertyName].@type));
- }
- }
- catch(E:Error){}
- oArrayCollection.addItem(oNewItem);
- }
-
- rtnVal = oArrayCollection;
- //rtnVal = oValue.row as XMLList;
-
- break;
- case "Dictionary":
-
- var oData:XMLList = oValue.row as XMLList;
- var oDataHeader:XMLList = oValue.header as XMLList;
- var oNewItem:Object = new Object;
-
- for each (var oItem:Object in oData)
- {
- try
- {
-
- for (var oProperty:Object in oItem.children())
- {
- var sPropertyName:String = oItem.children()[oProperty].name();
- var oPropertyValue:Object = oItem.children()[oProperty];
-
- oNewItem[sPropertyName] = serializeData(oPropertyValue, String(oDataHeader[0][sPropertyName].@type));
- }
- }
- catch(E:Error){}
- }
-
- rtnVal = oNewItem;
- //rtnVal = oValue.row as XMLList;
-
- break;
- default:
-
- rtnVal = null;
-
- break;
- }
- }
- catch(E:Error)
- {
- rtnVal = null;
- }
- return rtnVal;
- }
- }
- }