ResourceLoader.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Speech / Src / Internal / ResourceLoader.cs / 1 / ResourceLoader.cs

                            //------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------- 

using System; 
using System.IO; 
using System.Net;
 
using System.Speech.Synthesis;

#if SPEECHSERVER || PROMPT_ENGINE
using System.Speech.Synthesis.TtsEngine; 
#endif
 
namespace System.Speech.Internal 
{
 
    //*******************************************************************
    //
    // Public Types
    // 
    //*******************************************************************
 
    internal class ResourceLoader 
    {
        //******************************************************************** 
        //
        // Internal Methods
        //
        //******************************************************************* 

        #region Internal Methods 
 
        /// 
        /// Load a file either from a local network or from the Internet. 
        /// 
        /// 
        /// 
        ///  
        /// 
        internal Stream LoadFile (Uri uri, out string mimeType, out Uri baseUri, out string localPath) 
        { 
            localPath = null;
 
#if SPEECHSERVER || PROMPT_ENGINE
            if (_resourceLoader != null)
            {
                localPath = _resourceLoader.GetLocalCopy (uri, out mimeType, out baseUri); 
                return new FileStream (localPath, FileMode.Open, FileAccess.Read, FileShare.Read);
            } 
            else 
#endif
            { 
                Stream stream = null;

                // Check for a local file
                if (!uri.IsAbsoluteUri || uri.IsFile) 
                {
 
                    // Local file 
                    string file = uri.IsAbsoluteUri ? uri.LocalPath : uri.OriginalString;
                    try 
                    {
                        stream = new FileStream (file, FileMode.Open, FileAccess.Read, FileShare.Read);
                    }
                    catch 
                    {
                        if (Directory.Exists (file)) 
                        { 
                            throw new InvalidOperationException (SR.Get (SRID.CannotReadFromDirectory, file));
                        } 
                        throw;
                    }
                    baseUri = null;
                } 
                else
                { 
                    try 
                    {
                        // `http:// Load the data from the web 
                        stream = DownloadData (uri, out baseUri);
                    }
                    catch (WebException e)
                    { 
                        throw new IOException (e.Message, e);
                    } 
                } 
                mimeType = null;
                return stream; 
            }
        }

        ///  
        /// Release a file from a cache if any
        ///  
        ///  
        internal void UnloadFile (string localPath)
        { 
#if SPEECHSERVER || PROMPT_ENGINE
            if (_resourceLoader != null)
            {
                _resourceLoader.ReleaseLocalCopy (localPath); 
            }
#endif 
        } 

        internal Stream LoadFile (Uri uri, out string localPath, out Uri redirectedUri) 
        {
            string mediaTypeUnused;
            return LoadFile (uri, out mediaTypeUnused, out redirectedUri, out localPath);
        } 

#if SPEECHSERVER || PROMPT_ENGINE 
 
        /// 
        /// Only one instance of the resource loader 
        /// 
        /// 
        internal void SetResourceLoader (ISpeechResourceLoader resourceLoader)
        { 
            // Changing the ResourceLoader
            if (_resourceLoader != null && resourceLoader != _resourceLoader) 
            { 
                throw new InvalidOperationException ();
            } 
            _resourceLoader = resourceLoader;
        }

#endif 

        #endregion 
 
        //********************************************************************
        // 
        // Private Methods
        //
        //********************************************************************
 
        #region Private Methods
 
        ///  
        /// Dowload data from the web.
        /// Set the redirectUri as the location of the file could be redirected in ASP pages. 
        /// 
        /// 
        /// 
        ///  
        private static Stream DownloadData (Uri uri, out Uri redirectedUri)
        { 
            // Create a request for the URL. 
            WebRequest request = WebRequest.Create (uri);
 
            // If required by the server, set the credentials.
            request.Credentials = CredentialCache.DefaultCredentials;

            // Get the response. 
            using (HttpWebResponse response = (HttpWebResponse) request.GetResponse ())
            { 
                // Get the stream containing content returned by the server. 
                using (Stream dataStream = response.GetResponseStream ())
                { 
                    redirectedUri = response.ResponseUri;

                    // `http:// Load the data from the web
                    using (WebClient client = new WebClient ()) 
                    {
                        client.UseDefaultCredentials = true; 
                        return new MemoryStream (client.DownloadData (redirectedUri)); 
                    }
                } 
            }
        }

        #endregion 

        //******************************************************************* 
        // 
        // Private Fields
        // 
        //********************************************************************

        #region Private Fields
 
#if SPEECHSERVER || PROMPT_ENGINE
 
        ISpeechResourceLoader _resourceLoader; 

#endif 

        #endregion
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK