Exemplo n.º 1
0
        /// <summary>
        /// On our own thread, make  the synchronous texture request from the asset server
        /// </summary>
        /// <param name="qInstance"></param>
        /// <param name="obinID"></param>
        /// <returns></returns>
        private bool ThrottleTextureMakeRequest(DoLaterBase qInstance, Object obinID)
        {
            OMV.UUID binID = (OMV.UUID)obinID;

            Uri            assetPath = new Uri(m_baseUri.ToString() + "?texture_id=" + binID.ToString());
            HttpWebRequest request   = (HttpWebRequest)WebRequest.Create(assetPath);

            request.MaximumAutomaticRedirections = 4;
            request.MaximumResponseHeadersLength = 4;
            request.Timeout = 30000; // 30 second timeout
            if (m_proxyPath != null)
            {
                // configure proxy if necessary
                WebProxy myProxy = new WebProxy();
                myProxy.Address = new Uri(m_proxyPath);
                request.Proxy   = myProxy;
            }
            try {
                m_log.Log(LogLevel.DCOMMDETAIL, "ThrottleTextureMakeRequest: requesting '{0}'", assetPath);
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
                    m_log.Log(LogLevel.DCOMMDETAIL, "ThrottleTextureMakeRequest: request returned. resp={0}, l={1}",
                              response.StatusCode, response.ContentLength);
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        using (Stream receiveStream = response.GetResponseStream()) {
                            OMV.Assets.AssetTexture at;
                            if (m_dataFetch)
                            {
                                // we're getting raw binary data
                                byte[] textureBuff = new byte[response.ContentLength];
                                receiveStream.Read(textureBuff, 0, (int)response.ContentLength);
                                at = new OMV.Assets.AssetTexture(binID, textureBuff);
                            }
                            else
                            {
                                // receiving a serialized package
                                XmlSerializer xserial             = new XmlSerializer(typeof(OpenSim.Framework.AssetBase));
                                OpenSim.Framework.AssetBase abase = (OpenSim.Framework.AssetBase)xserial.Deserialize(receiveStream);
                                at = new OMV.Assets.AssetTexture(binID, abase.Data);
                            }
                            ProcessDownloadFinished(OMV.TextureRequestState.Finished, at);
                        }
                    }
                    else
                    {
                        m_log.Log(LogLevel.DCOMMDETAIL, "ThrottleTextureMakeRequest: Non-OK status code");
                        OMV.Assets.AssetTexture at = new OMV.Assets.AssetTexture(binID, new byte[0]);
                        ProcessDownloadFinished(OMV.TextureRequestState.NotFound, at);
                    }
                }
            }
            catch (Exception e) {
                m_log.Log(LogLevel.DBADERROR, "Error fetching asset: {0}", e);
                OMV.Assets.AssetTexture at = new OMV.Assets.AssetTexture(binID, new byte[0]);
                ProcessDownloadFinished(OMV.TextureRequestState.NotFound, at);
            }
            return(true);
        }
 private void OnImageReceived(OMV.ImageDownload cntl, OMV.Assets.AssetTexture textureID)
 {
 }
        /// <summary>
        /// On our own thread, make  the synchronous texture request from the asset server
        /// </summary>
        /// <param name="qInstance"></param>
        /// <param name="obinID"></param>
        /// <returns></returns>
        private bool ThrottleTextureMakeRequest(DoLaterBase qInstance, Object obinID)
        {
            OMV.UUID binID = (OMV.UUID)obinID;

            Uri assetPath = new Uri(m_basePath + "/assets/" + binID.ToString() + (m_dataFetch ? "/data" : ""));
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(assetPath);
            request.MaximumAutomaticRedirections = 4;
            request.MaximumResponseHeadersLength = 4;
            request.Timeout = 30000;    // 30 second timeout
            if (m_proxyPath != null) {
            // configure proxy if necessary
            WebProxy myProxy = new WebProxy();
            myProxy.Address = new Uri(m_proxyPath);
            request.Proxy = myProxy;
            }
            try {
            m_log.Log(LogLevel.DCOMMDETAIL, "ThrottleTextureMakeRequest: requesting '{0}'", assetPath);
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
                m_log.Log(LogLevel.DCOMMDETAIL, "ThrottleTextureMakeRequest: request returned. resp={0}, l={1}",
                            response.StatusCode, response.ContentLength);
                if (response.StatusCode == HttpStatusCode.OK) {
                    using (Stream receiveStream = response.GetResponseStream()) {
                        OMV.Assets.AssetTexture at;
                        if (m_dataFetch) {
                            // we're getting raw binary data
                            byte[] textureBuff = new byte[response.ContentLength];
                            receiveStream.Read(textureBuff, 0, (int)response.ContentLength);
                            at = new OMV.Assets.AssetTexture(binID, textureBuff);
                        }
                        else {
                            // receiving a serialized package
                            XmlSerializer xserial = new XmlSerializer(typeof(OpenSim.Framework.AssetBase));
                            OpenSim.Framework.AssetBase abase = (OpenSim.Framework.AssetBase)xserial.Deserialize(receiveStream);
                            at = new OMV.Assets.AssetTexture(binID, abase.Data);
                        }
                        ProcessDownloadFinished(OMV.TextureRequestState.Finished, at);
                    }
                }
                else {
                    OMV.Assets.AssetTexture at = new OMV.Assets.AssetTexture(binID, new byte[0]);
                    ProcessDownloadFinished(OMV.TextureRequestState.NotFound, at);
                }
            }
            }
            catch (Exception e) {
            m_log.Log(LogLevel.DBADERROR, "Error fetching asset: {0}", e);
            OMV.Assets.AssetTexture at = new OMV.Assets.AssetTexture(binID, new byte[0]);
            ProcessDownloadFinished(OMV.TextureRequestState.NotFound, at);
            }
            return true;
        }
 // Used for texture pipeline
 // returns flag = true if texture was sucessfully downloaded
 private void OnACDownloadFinished(OMV.TextureRequestState state, OMV.Assets.AssetTexture assetTexture)
 {
     ProcessDownloadFinished(state, assetTexture);
 }