www.pudn.com > Tustena_CRM_OS_3.0.2_Stable.zip > precompile.cs


/// TUSTENA PUBLIC LICENSE v1.0 
///  
/// Portions Copyright (c) 2003-2005 Digita S.r.l. All Rights Reserved. 
/// 
/// Tustena CRM is a trademark of: 
/// Digita S.r.l. 
/// Viale Enrico Fermi 14/z 
/// 31011 Asolo (Italy) 
/// Tel. +39-0423-951251 
/// Mail. info@digita.it 
/// 
/// This file contains Original Code and/or Modifications of Original Code 
/// as defined in and that are subject to the Tustena Public Source License 
/// Version 1.0 (the 'License'). You may not use this file except in 
/// compliance with the License. Please obtain a copy of the License at 
/// http://www.tustena.com/TPL/ and read it before using this 
// file. 
/// 
/// The Original Code and all software distributed under the License are 
/// distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
/// EXPRESS OR IMPLIED, AND DIGITA S.R.L. HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
/// INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
/// FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
/// Please see the License for the specific language governing rights and 
/// limitations under the License. 
/// 
/// YOU MAY NOT REMOVE OR ALTER THIS COPYRIGHT NOTICE! 
///  
 
using System; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Threading; 
using System.Web; 
using System.Web.UI; 
 
namespace Digita.Tustena 
{ 
	public class Precompile : HttpApplication 
	{ 
		private static bool needsCompile = true; 
		private static string applicationPath = String.Empty; 
		private static string physicalPath = String.Empty; 
		private static string applicationURL = String.Empty; 
 
		private static Thread thread = null; 
 
		protected virtual string SkipFiles 
		{ 
			get { return @""; } 
		} 
 
		protected virtual string SkipFolders 
		{ 
			get { return @"template;components"; } 
		} 
 
		public override void Init() 
		{ 
			if (Precompile.needsCompile) 
			{ 
				Precompile.needsCompile = false; 
 
				applicationPath = HttpContext.Current.Request.ApplicationPath; 
				if (!applicationPath.EndsWith("/")) { applicationPath += "/";	} 
 
				string server = HttpContext.Current.Request.ServerVariables["SERVER_NAME"]; 
				bool https = HttpContext.Current.Request.ServerVariables["HTTPS"] != "off"; 
				applicationURL = (https ? "https://" : "http://") + server + applicationPath; 
 
				physicalPath = HttpContext.Current.Request.PhysicalApplicationPath; 
				thread = new Thread(new ThreadStart(CompileApp)); 
				thread.Start(); 
			} 
		} 
 
		private void CompileApp() 
		{ 
			CompileFolder(physicalPath); 
		} 
 
		private void CompileFolder(string folder) 
		{ 
			foreach (string file in Directory.GetFiles(folder, "*.as?x")) 
			{ 
				CompileFile(file); 
			} 
 
			foreach (string subFolder in Directory.GetDirectories(folder)) 
			{ 
				bool skipFolder = false; 
				foreach (string item in this.SkipFolders.Split(';')) 
				{ 
					if ((item != null && item.Length != 0) && subFolder.ToUpper().EndsWith(item.ToUpper())) 
					{ 
						skipFolder = true; 
						break; 
					} 
				} 
				if (!skipFolder) 
				{ 
					CompileFolder(subFolder); 
				} 
			} 
		} 
 
		private void CompileFile(string file) 
		{ 
			bool skipFile = false; 
			foreach (string item in this.SkipFiles.Split(';')) 
			{ 
				if ((item != null && item.Length != 0) && file.ToUpper().EndsWith(item.ToUpper())) 
				{ 
					skipFile = true; 
					break; 
				} 
			} 
 
			if (!skipFile) 
			{ 
				string path = file.Remove(0, physicalPath.Length); 
				if (file.ToLower().EndsWith(".ascx")) 
				{ 
					string virtualPath = applicationPath + path.Replace(@"\", "/"); 
					Page controlLoader = new Page(); 
					try 
					{ 
						controlLoader.LoadControl(virtualPath); 
					} 
					finally 
					{ 
						Debug.WriteLine(virtualPath, "Control"); 
					} 
				} 
				else if (!file.ToLower().EndsWith(".asax")) 
				{ 
					string url = applicationURL + path.Replace(@"\", "/"); 
					using (HttpWebRequest.Create(url).GetResponse()) {} 
					Debug.WriteLine(url, "Page"); 
				} 
			} 
		} 
	} 
}