⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 updatemanager.as

📁 coldfusion服务器 air程序的更新源代码
💻 AS
字号:
package net.davidtucker.air.update {
	
	import com.adobe.serialization.json.JSONDecoder;
	
	import flash.desktop.NativeApplication;
	import flash.desktop.Updater;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.HTTPStatusEvent;
	import flash.events.IOErrorEvent;
	import flash.events.SecurityErrorEvent;
	import flash.filesystem.File;
	import flash.filesystem.FileMode;
	import flash.filesystem.FileStream;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLStream;
	import flash.net.URLVariables;
	import flash.utils.ByteArray;
	
	import net.davidtucker.air.update.events.*;
	
	[Event(name="updateAvailable", type="net.davidtucker.air.events.UpdateManagerResultEvent")]
	[Event(name="applicationCurrent", type="net.davidtucker.air.events.UpdateManagerResultEvent")]
	[Event(name="updateFault", type="net.davidtucker.air.events.UpdateManagerFaultEvent")]
	[Event(name="applicationNotFound", type="net.davidtucker.air.events.UpdateManagerFaultEvent")]

	public class UpdateManager extends EventDispatcher {
		
		public static const UPDATE_AVAILABLE:uint = 1;
		public static const APPLICATION_NOT_FOUND:uint = 2;
		public static const APPLICATION_CURRENT:uint = 3;
		
		private var _updateServer:String;
		private var _applicationID:String;
		private var _applicationName:String;
		private var _applicationVersion:String;		
		private var _update:AIRUpdate;

		private var loader:URLLoader;
		private var urlStream:URLStream;
		private var updateFileData:ByteArray;
		private var updateFile:File;
		
		private var _autoCheck:Boolean;
		
		public function set autoCheck(val:Boolean):void {
			_autoCheck = val;
		}
		
		public function get autoCheck():Boolean {
			return _autoCheck;
		}
		
		public function UpdateManager(server:String,autoCheck:Boolean=false):void {
			
			// Set Server
			_updateServer = server;
			
			// Set Autocheck
			_autoCheck = autoCheck;
			
			// Get Application Information
			var appXML:XML = NativeApplication.nativeApplication.applicationDescriptor;
			
			// Set AIR Namespace
			var air:Namespace = appXML.namespaceDeclarations()[0];
			
			// Set the Application Information Values
			_applicationID = appXML.air::id;
			_applicationVersion = appXML.air::version;
			_applicationName = appXML.air::name;
						
			super();
			
			// Check if autoCheck
			if(_autoCheck) {
				check();
			}
			
		}
		
		public function check():void {
			
			loader = new URLLoader();
			loader.addEventListener(Event.COMPLETE,onResult);
			loader.addEventListener(IOErrorEvent.IO_ERROR,onFault);
			loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurityError);
			loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,onHTTPStatus);
			var request:URLRequest = new URLRequest(_updateServer);
			var params:URLVariables = new URLVariables();
			params.method = "getUpdateJSON";
			params.applicationID = _applicationID;
			params.currentVersion = _applicationVersion;
			request.data = params;
			request.method = "GET";
			
			loader.load(request);
			
		}
		
		private function onHTTPStatus(e:HTTPStatusEvent):void {
			
			if(e.status != 200) {
				this.dispatchEvent( new UpdateManagerFaultEvent(UpdateManagerFaultEvent.UPDATE_FAULT,'HTTP Status Error: ' + e.status) );
			}
			
		}
		
		private function onSecurityError(e:SecurityErrorEvent):void {
			
			this.dispatchEvent( new UpdateManagerFaultEvent(UpdateManagerFaultEvent.UPDATE_FAULT,'Security Error: ' + e.errorID) );
			
		}
		
		private function onFault(e:IOErrorEvent):void {
			
			this.dispatchEvent( new UpdateManagerFaultEvent(UpdateManagerFaultEvent.UPDATE_FAULT,'IOError: ' + e.errorID) );
			
		}
		
		private function onResult(e:Event):void {
			
			if(e.target.data) {
				
				var result:Object = new JSONDecoder(e.target.data).getValue();
				switch(result.UPDATECODE) {
					
					case UpdateManager.UPDATE_AVAILABLE:
						_update = new AIRUpdate(result.UPDATEINFO);
						dispatchEvent( new UpdateManagerResultEvent(UpdateManagerResultEvent.UPDATE_AVAILABLE,_update) );
						break;
						
					case UpdateManager.APPLICATION_NOT_FOUND:
						dispatchEvent( new UpdateManagerFaultEvent(UpdateManagerFaultEvent.APPLICATION_NOT_FOUND,"Application Not in Database") );
						break;
						
					case UpdateManager.APPLICATION_CURRENT:
						dispatchEvent( new UpdateManagerResultEvent(UpdateManagerResultEvent.APPLICATION_CURRENT) );
						break;
					
				}
			
			}
			
		}
		
		public function update():void {
			
			if(this._update.updateURL != null) {			
				var request:URLRequest = new URLRequest(_update.updateURL);
				urlStream = new URLStream();
				updateFileData = new ByteArray();
				urlStream.addEventListener(Event.COMPLETE, onStreamComplete);
				urlStream.load(request);
			} else {
				trace("No Update Available");
			}
			
		}

		private function onStreamComplete(event:Event):void {
			
			urlStream.readBytes(updateFileData, 0, urlStream.bytesAvailable);
			writeUpdateFile();
			
		}

		private function writeUpdateFile():void {
			
			updateFile = File.applicationStorageDirectory.resolvePath("Update.air");
			var fileStream:FileStream = new FileStream();
			fileStream.addEventListener(Event.CLOSE, performUpdate);
			fileStream.openAsync(updateFile, FileMode.WRITE);
			fileStream.writeBytes(updateFileData, 0, updateFileData.length);
			fileStream.close();
			
		}
	
		private function performUpdate(event:Event):void {
			
			var updater:Updater = new Updater();
			updater.update(updateFile,_update.updateVersion);
			
		}
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -