home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / messaging / channels / DirectHTTPChannel.as next >
Encoding:
Text File  |  2010-06-23  |  10.6 KB  |  292 lines

  1. package mx.messaging.channels
  2. {
  3.    import flash.events.ErrorEvent;
  4.    import flash.events.Event;
  5.    import flash.events.HTTPStatusEvent;
  6.    import flash.events.IOErrorEvent;
  7.    import flash.events.SecurityErrorEvent;
  8.    import flash.events.TimerEvent;
  9.    import flash.net.URLLoader;
  10.    import flash.net.URLRequest;
  11.    import flash.net.URLRequestHeader;
  12.    import flash.net.URLVariables;
  13.    import mx.core.mx_internal;
  14.    import mx.messaging.Channel;
  15.    import mx.messaging.MessageAgent;
  16.    import mx.messaging.MessageResponder;
  17.    import mx.messaging.config.LoaderConfig;
  18.    import mx.messaging.errors.ChannelError;
  19.    import mx.messaging.errors.InvalidChannelError;
  20.    import mx.messaging.errors.MessageSerializationError;
  21.    import mx.messaging.messages.HTTPRequestMessage;
  22.    import mx.messaging.messages.IMessage;
  23.    import mx.netmon.NetworkMonitor;
  24.    import mx.resources.IResourceManager;
  25.    import mx.resources.ResourceManager;
  26.    
  27.    use namespace mx_internal;
  28.    
  29.    public class DirectHTTPChannel extends Channel
  30.    {
  31.       private static var clientCounter:uint;
  32.       
  33.       mx_internal var clientId:String;
  34.       
  35.       private var resourceManager:IResourceManager;
  36.       
  37.       public function DirectHTTPChannel(param1:String, param2:String = "")
  38.       {
  39.          var _loc3_:String = null;
  40.          resourceManager = ResourceManager.getInstance();
  41.          super(param1,param2);
  42.          if(param2.length > 0)
  43.          {
  44.             _loc3_ = resourceManager.getString("messaging","noURIAllowed");
  45.             throw new InvalidChannelError(_loc3_);
  46.          }
  47.          mx_internal::clientId = "DirectHTTPChannel" + clientCounter++;
  48.       }
  49.       
  50.       override public function setCredentials(param1:String, param2:MessageAgent = null, param3:String = null) : void
  51.       {
  52.          var _loc4_:String = resourceManager.getString("messaging","authenticationNotSupported");
  53.          throw new ChannelError(_loc4_);
  54.       }
  55.       
  56.       override protected function internalSend(param1:MessageResponder) : void
  57.       {
  58.          var urlLoader:URLLoader;
  59.          var httpMsgResp:DirectHTTPMessageResponder = null;
  60.          var urlRequest:URLRequest = null;
  61.          var msgResp:MessageResponder = param1;
  62.          httpMsgResp = DirectHTTPMessageResponder(msgResp);
  63.          try
  64.          {
  65.             urlRequest = mx_internal::createURLRequest(httpMsgResp.message);
  66.          }
  67.          catch(e:MessageSerializationError)
  68.          {
  69.             httpMsgResp.agent.fault(e.fault,httpMsgResp.message);
  70.             return;
  71.          }
  72.          urlLoader = httpMsgResp.urlLoader;
  73.          urlLoader.addEventListener(ErrorEvent.ERROR,httpMsgResp.errorHandler);
  74.          urlLoader.addEventListener(IOErrorEvent.IO_ERROR,httpMsgResp.errorHandler);
  75.          urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,httpMsgResp.securityErrorHandler);
  76.          urlLoader.addEventListener(Event.COMPLETE,httpMsgResp.completeHandler);
  77.          urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS,httpMsgResp.httpStatusHandler);
  78.          urlLoader.load(urlRequest);
  79.       }
  80.       
  81.       override public function get connected() : Boolean
  82.       {
  83.          return true;
  84.       }
  85.       
  86.       override mx_internal function get realtime() : Boolean
  87.       {
  88.          return false;
  89.       }
  90.       
  91.       override protected function internalConnect() : void
  92.       {
  93.          connectSuccess();
  94.       }
  95.       
  96.       override protected function getMessageResponder(param1:MessageAgent, param2:IMessage) : MessageResponder
  97.       {
  98.          return new DirectHTTPMessageResponder(param1,param2,this,new URLLoader());
  99.       }
  100.       
  101.       override public function get protocol() : String
  102.       {
  103.          return "http";
  104.       }
  105.       
  106.       override protected function connectTimeoutHandler(param1:TimerEvent) : void
  107.       {
  108.       }
  109.       
  110.       mx_internal function createURLRequest(param1:IMessage) : URLRequest
  111.       {
  112.          var _loc8_:Array = null;
  113.          var _loc9_:URLRequestHeader = null;
  114.          var _loc10_:String = null;
  115.          var _loc11_:URLVariables = null;
  116.          var _loc12_:Object = null;
  117.          var _loc13_:String = null;
  118.          var _loc2_:HTTPRequestMessage = HTTPRequestMessage(param1);
  119.          var _loc3_:URLRequest = new URLRequest();
  120.          var _loc4_:String = _loc2_.url;
  121.          var _loc5_:String = null;
  122.          _loc3_.contentType = _loc2_.contentType;
  123.          var _loc6_:Boolean = _loc3_.contentType == HTTPRequestMessage.CONTENT_TYPE_XML || _loc3_.contentType == HTTPRequestMessage.CONTENT_TYPE_SOAP_XML;
  124.          var _loc7_:Object = _loc2_.httpHeaders;
  125.          if(_loc7_)
  126.          {
  127.             _loc8_ = [];
  128.             for(_loc10_ in _loc7_)
  129.             {
  130.                _loc9_ = new URLRequestHeader(_loc10_,_loc7_[_loc10_]);
  131.                _loc8_.push(_loc9_);
  132.             }
  133.             _loc3_.requestHeaders = _loc8_;
  134.          }
  135.          if(!_loc6_)
  136.          {
  137.             _loc11_ = new URLVariables();
  138.             _loc12_ = _loc2_.body;
  139.             for(_loc13_ in _loc12_)
  140.             {
  141.                _loc11_[_loc13_] = _loc2_.body[_loc13_];
  142.             }
  143.             _loc5_ = _loc11_.toString();
  144.          }
  145.          if(_loc2_.method == HTTPRequestMessage.POST_METHOD || _loc6_)
  146.          {
  147.             _loc3_.method = "POST";
  148.             if(_loc3_.contentType == HTTPRequestMessage.CONTENT_TYPE_FORM)
  149.             {
  150.                _loc3_.data = _loc5_;
  151.             }
  152.             else if(_loc2_.body != null && _loc2_.body is XML)
  153.             {
  154.                _loc3_.data = XML(_loc2_.body).toXMLString();
  155.             }
  156.             else
  157.             {
  158.                _loc3_.data = _loc2_.body;
  159.             }
  160.          }
  161.          else if(Boolean(_loc5_) && _loc5_ != "")
  162.          {
  163.             _loc4_ += _loc4_.indexOf("?") > -1 ? "&" : "?";
  164.             _loc4_ = _loc4_ + _loc5_;
  165.          }
  166.          _loc3_.url = _loc4_;
  167.          if(NetworkMonitor.isMonitoring())
  168.          {
  169.             NetworkMonitor.adjustURLRequest(_loc3_,LoaderConfig.url,param1.messageId);
  170.          }
  171.          return _loc3_;
  172.       }
  173.    }
  174. }
  175.  
  176. import flash.events.ErrorEvent;
  177. import flash.events.Event;
  178. import flash.events.HTTPStatusEvent;
  179. import flash.events.IOErrorEvent;
  180. import flash.events.SecurityErrorEvent;
  181. import flash.net.URLLoader;
  182. import mx.core.mx_internal;
  183. import mx.messaging.MessageAgent;
  184. import mx.messaging.MessageResponder;
  185. import mx.messaging.messages.AbstractMessage;
  186. import mx.messaging.messages.AcknowledgeMessage;
  187. import mx.messaging.messages.ErrorMessage;
  188. import mx.messaging.messages.HTTPRequestMessage;
  189. import mx.messaging.messages.IMessage;
  190. import mx.resources.IResourceManager;
  191. import mx.resources.ResourceManager;
  192.  
  193. use namespace mx_internal;
  194.  
  195. class DirectHTTPMessageResponder extends MessageResponder
  196. {
  197.    private var clientId:String;
  198.    
  199.    private var lastStatus:int;
  200.    
  201.    public var urlLoader:URLLoader;
  202.    
  203.    private var resourceManager:IResourceManager = ResourceManager.getInstance();
  204.    
  205.    public function DirectHTTPMessageResponder(param1:MessageAgent, param2:IMessage, param3:DirectHTTPChannel, param4:URLLoader)
  206.    {
  207.       super(param1,param2,param3);
  208.       this.urlLoader = param4;
  209.       clientId = param3.mx_internal::clientId;
  210.    }
  211.    
  212.    public function securityErrorHandler(param1:Event) : void
  213.    {
  214.       var _loc2_:AcknowledgeMessage = null;
  215.       status(null);
  216.       _loc2_ = new AcknowledgeMessage();
  217.       _loc2_.clientId = clientId;
  218.       _loc2_.correlationId = message.messageId;
  219.       _loc2_.headers[AcknowledgeMessage.ERROR_HINT_HEADER] = true;
  220.       agent.acknowledge(_loc2_,message);
  221.       var _loc3_:ErrorMessage = new ErrorMessage();
  222.       _loc3_.clientId = clientId;
  223.       _loc3_.correlationId = message.messageId;
  224.       _loc3_.faultCode = "Channel.Security.Error";
  225.       _loc3_.faultString = resourceManager.getString("messaging","securityError");
  226.       _loc3_.faultDetail = resourceManager.getString("messaging","securityError.details",[message.destination]);
  227.       _loc3_.rootCause = param1;
  228.       _loc3_.body = URLLoader(param1.target).data;
  229.       _loc3_.headers[AbstractMessage.STATUS_CODE_HEADER] = lastStatus;
  230.       agent.fault(_loc3_,message);
  231.    }
  232.    
  233.    override protected function requestTimedOut() : void
  234.    {
  235.       urlLoader.removeEventListener(ErrorEvent.ERROR,errorHandler);
  236.       urlLoader.removeEventListener(IOErrorEvent.IO_ERROR,errorHandler);
  237.       urlLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);
  238.       urlLoader.removeEventListener(Event.COMPLETE,completeHandler);
  239.       urlLoader.removeEventListener(HTTPStatusEvent.HTTP_STATUS,httpStatusHandler);
  240.       urlLoader.close();
  241.       status(null);
  242.       var _loc1_:AcknowledgeMessage = new AcknowledgeMessage();
  243.       _loc1_.clientId = clientId;
  244.       _loc1_.correlationId = message.messageId;
  245.       _loc1_.headers[AcknowledgeMessage.ERROR_HINT_HEADER] = true;
  246.       agent.acknowledge(_loc1_,message);
  247.       agent.fault(createRequestTimeoutErrorMessage(),message);
  248.    }
  249.    
  250.    public function errorHandler(param1:Event) : void
  251.    {
  252.       status(null);
  253.       var _loc2_:AcknowledgeMessage = new AcknowledgeMessage();
  254.       _loc2_.clientId = clientId;
  255.       _loc2_.correlationId = message.messageId;
  256.       _loc2_.headers[AcknowledgeMessage.ERROR_HINT_HEADER] = true;
  257.       agent.acknowledge(_loc2_,message);
  258.       var _loc3_:ErrorMessage = new ErrorMessage();
  259.       _loc3_.clientId = clientId;
  260.       _loc3_.correlationId = message.messageId;
  261.       _loc3_.faultCode = "Server.Error.Request";
  262.       _loc3_.faultString = resourceManager.getString("messaging","httpRequestError");
  263.       var _loc4_:* = param1.toString();
  264.       if(message is HTTPRequestMessage)
  265.       {
  266.          _loc4_ += ". URL: ";
  267.          _loc4_ = _loc4_ + HTTPRequestMessage(message).url;
  268.       }
  269.       _loc3_.faultDetail = resourceManager.getString("messaging","httpRequestError.details",[_loc4_]);
  270.       _loc3_.rootCause = param1;
  271.       _loc3_.body = URLLoader(param1.target).data;
  272.       _loc3_.headers[AbstractMessage.STATUS_CODE_HEADER] = lastStatus;
  273.       agent.fault(_loc3_,message);
  274.    }
  275.    
  276.    public function httpStatusHandler(param1:HTTPStatusEvent) : void
  277.    {
  278.       lastStatus = param1.status;
  279.    }
  280.    
  281.    public function completeHandler(param1:Event) : void
  282.    {
  283.       result(null);
  284.       var _loc2_:AcknowledgeMessage = new AcknowledgeMessage();
  285.       _loc2_.clientId = clientId;
  286.       _loc2_.correlationId = message.messageId;
  287.       _loc2_.body = URLLoader(param1.target).data;
  288.       _loc2_.headers[AbstractMessage.STATUS_CODE_HEADER] = lastStatus;
  289.       agent.acknowledge(_loc2_,message);
  290.    }
  291. }
  292.