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