ActionScript2011.05.11 10:23
웹서버 예제

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       title="Test AIR Web Server"
                       applicationComplete="init()" viewSourceURL="srcview/index.html">
    <s:layout>
        <s:VerticalLayout paddingTop="8" paddingLeft="8" paddingRight="8" paddingBottom="8" />
    </s:layout>
    
    <fx:Script>
        <![CDATA[
            import flash.events.Event;
            import flash.events.ProgressEvent;
            import flash.events.ServerSocketConnectEvent;
            import flash.net.ServerSocket;
            import flash.net.Socket;
            import flash.utils.ByteArray;
            
            import mx.controls.Alert;
            
            private var serverSocket:ServerSocket;
            private var mimeTypes:Object = new Object();
            
            private function init():void {
                mimeTypes[".css"] = "text/css";
                mimeTypes[".gif"] = "image/gif";
                mimeTypes[".htm"] = "text/html";
                mimeTypes[".html"] = "text/html";
                mimeTypes[".ico"] = "image/x-icon";
                mimeTypes[".jpg"] = "image/jpeg";
                mimeTypes[".js"] = "application/x-javascript";
                mimeTypes[".png"] = "image/png";
                
                var webroot:File = File.applicationStorageDirectory.resolvePath("webroot");
                if (!webroot.exists) {
                    File.applicationDirectory.resolvePath("webroot").copyTo(webroot);
                }
            }
            
            private function listen():void {
                try {
                    serverSocket = new ServerSocket();
                    serverSocket.addEventListener(Event.CONNECT, socketConnectHandler);
                    serverSocket.bind(Number(port.text));
                    serverSocket.listen();
                    log.text += "Listening on port " + port.text + "...\n";
                }
                catch (error:Error) {
                    Alert.show("Port " + port.text +
                        " may be in use. Enter another port number and try again.\n(" +
                        error.message +")", "Error");
                }
            }
            
            private function socketConnectHandler(event:ServerSocketConnectEvent):void {
                var socket:Socket = event.socket;
                socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
            }
            
            private function socketDataHandler(event:ProgressEvent):void {
                try {
                    var socket:Socket = event.target as Socket;
                    var bytes:ByteArray = new ByteArray();
                    socket.readBytes(bytes);
                    var request:String = "" + bytes;
                    log.text += request;
                    var filePath:String = request.substring(4, request.indexOf("HTTP/") - 1);
                    var file:File = File.applicationStorageDirectory.resolvePath("webroot" + filePath);
                    if (file.exists && !file.isDirectory) {
                        var stream:FileStream = new FileStream();
                        stream.open(file, FileMode.READ);
                        var content:ByteArray = new ByteArray();
                        stream.readBytes(content);
                        socket.writeUTFBytes("HTTP/1.1 200 OK\n");
                        socket.writeUTFBytes("Content-Type: " + getMimeType(filePath) + "\n\n");
                        socket.writeBytes(content);
                    }
                    else {
                        socket.writeUTFBytes("HTTP/1.1 404 Not Found\n");
                        socket.writeUTFBytes("Content-Type: text/html\n\n");
                        socket.writeUTFBytes("<html><body><h2>Page Not Found</h2></body></html>");
                    }
                    socket.flush();
                    socket.close();
                }
                catch (error:Error) {
                    Alert.show(error.message, "Error");
                }
            }
            
            private function getMimeType(path:String):String {
                var mimeType:String;
                var index:int = path.lastIndexOf(".");
                if (index > -1) {
                    mimeType = mimeTypes[path.substring(index)];
                }
                return mimeType == null ? "text/html" : mimeType;
            }
        ]]>
    </fx:Script>
    
    <s:HGroup verticalAlign="middle">
        <s:Label text="Port:"/>
        <s:TextInput id="port" text="8888" width="50"/>
        <s:Button label="Listen" click="listen()"/>
    </s:HGroup>
    
    <s:TextArea id="log" width="100%" height="100%" />

</s:WindowedApplication>


Window OS 의 경우
C:\Users\USERNAME\AppData\Roaming\APP_NAME\Local Store\webroot
디렉토리가 생성된다.

이 디렉토리 안에 웹서버에 실행시 보여줄 html 파일을 만들어 넣어두면 된다.
신고

'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011.05.11
자신의 IP 외부에서 알아오기  (0) 2011.05.09
랜카드에 할당된 IP 알아내기  (0) 2011.05.09
자동 업데이트  (0) 2011.05.09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011.03.15
DockIcon Click 이벤트 처리  (0) 2011.03.04
Posted by sanghwa
ActionScript2011.05.09 16:46
자신의 IP 외부에서 알아오기 함수

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import mx.utils.StringUtil;

private var _ip:String = "127.0.0.1";
private var ipPattern:RegExp = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/;
private var externalIpSites:Array =  ["http://xxx.xxx.xxx/findMyIP.php", "http://www.whatismyip.com/automation/n09230945.asp"];

private function getExternalIp():void {
    var loader:URLLoader = new URLLoader();
    configureListeners(loader);
    var request:URLRequest = new URLRequest(externalIpSites.shift());
    try {
        loader.load(request);
    }
    catch (e:Error) {
        trace("IpAddress getExternalIp :", e);
    }
}

private function configureListeners(dispatcher:IEventDispatcher):void {
    dispatcher.addEventListener(Event.COMPLETE, completeHandler);
    dispatcher.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
        
private function completeHandler(e:Event):void {
    var loader:URLLoader = URLLoader(e.target);
    var tmpIP:String = StringUtil.trim(loader.data);
    var ipCheck:int = -1;
    ipCheck = tmpIP.search(Config.ipPattern);
    if (ipCheck == 0) {
        _ip = tmpIP;
    }
}
        
private function errorHandler(e:IOErrorEvent):void {
    if (externalIpSites.length <= 0) {
        trace("IpAddress errorHandler :", e);
    }
    else {
        getExternalIp();
    }
}


신고

'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011.05.11
자신의 IP 외부에서 알아오기  (0) 2011.05.09
랜카드에 할당된 IP 알아내기  (0) 2011.05.09
자동 업데이트  (0) 2011.05.09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011.03.15
DockIcon Click 이벤트 처리  (0) 2011.03.04
Posted by sanghwa
ActionScript2011.05.09 14:25
랜카드에 할당된 IP 알아내기 함수

import flash.net.InterfaceAddress;
import flash.net.NetworkInterface;

private var _ip:String = "127.0.0.1";
private var ipPattern:RegExp = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/;

private function getLanCardIp():void {
    var interfaces:Vector.<NetworkInterface> = new Vector.<NetworkInterface>();
    interfaces = NetworkInfo.networkInfo.findInterfaces();
    
    var ipCheck:int = -1;

    for each (var netf:NetworkInterface in interfaces) {
        var addresses:Vector.<InterfaceAddress> = netf.addresses;
        for each (var interfaceAddress:InterfaceAddress in addresses) {
            ipCheck = interfaceAddress.address.search(ipPattern);
            if (ipCheck == 0) {
                if (interfaceAddress.address.indexOf("169.254.") != 0 && interfaceAddress.address.indexOf("127.0") != 0) {
                    _ip = interfaceAddress.address;
                    break;
                }
            }
        }
    }
}


신고

'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011.05.11
자신의 IP 외부에서 알아오기  (0) 2011.05.09
랜카드에 할당된 IP 알아내기  (0) 2011.05.09
자동 업데이트  (0) 2011.05.09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011.03.15
DockIcon Click 이벤트 처리  (0) 2011.03.04
Posted by sanghwa
ActionScript2011.05.09 12:09
프로그램이 완전히 뜨면 자동 업데이트를 하도록 설정 해야 한다.

메인.mxml 파일
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    width="200"
    height="70"
    creationComplete="checkForUpdate()">

    <mx:Script>
    <![CDATA[
        import flash.events.ErrorEvent;
        import air.update.ApplicationUpdaterUI;
        import air.update.events.UpdateEvent;
        import mx.controls.Alert;
      
        private var updateInit:Boolean = false;
        private var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();
  
        private function checkForUpdate():void {
            NativeApplication.nativeApplication.addEventListener( Event.EXITING,
                function (e:Event):void {
                    var opened:Array = NativeApplication.nativeApplication.openedWindows;
                    for (var i:int = 0; i < opened.length; i ++) {
                        opened[i].close();
                    }
            });  
  
            appUpdater.updateURL = "http://xxx.xxx.xxx.xxx/updatesample/update.xml";
            appUpdater.isCheckForUpdateVisible = false;
            appUpdater.addEventListener(UpdateEvent.INITIALIZED, onUpdate);
            appUpdater.addEventListener(ErrorEvent.ERROR, onError);
            appUpdater.initialize();

            if (자동업데이트여부 == 1) {
              onInit();
            }
        }

        private function onInit():void {
            if (updateInit == false) {
               appUpdater.initialize();
               upateInit = true;
            }
            else {
               appUpdater.isCheckForUpdateVisible = true;
               onUpdate();
            }
        }

        private function onError(event:ErrorEvent):void {
            Alert.show(event.toString());
        }
      
        private function onUpdate(event:UpdateEvent):void {
            appUpdater.checkNow(); // Go check for an update now
        }
  
    ]]>
    </mx:Script>
    ~~~~~~
</mx:WindowedApplication>

update.xml 파일 (Server-side XML file)
<?xml version="1.0" encoding="utf-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
  <version>v1.1</version>
  <url>http://yourserver/updatesample/UpdateSample.air</url>
  <description><![CDATA[
v1.1
  * These notes are displayed to the user in the update dialog
  * Typically, this is used to summarize what's new in the release
  ]]></description>
</update>


신고

'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011.05.11
자신의 IP 외부에서 알아오기  (0) 2011.05.09
랜카드에 할당된 IP 알아내기  (0) 2011.05.09
자동 업데이트  (0) 2011.05.09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011.03.15
DockIcon Click 이벤트 처리  (0) 2011.03.04
Posted by sanghwa
ActionScript2011.03.15 10:24

File.applicationStorageDirectory가 가리키는 실제 디렉토리는 OS마다 틀리다.

  • Windows XP: c:\Documents and Settings\USERNAME\Application Data\APP_NAME
  • Win Vista/7: c:\users\USERNAME\appdata\roaming\APP_NAME
  • OSX: /Users/USERNAME/Library/Preferences/APP_NAME
  • Linux (ubuntu): /Users/USERNAME/.appdata/
신고

'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011.05.11
자신의 IP 외부에서 알아오기  (0) 2011.05.09
랜카드에 할당된 IP 알아내기  (0) 2011.05.09
자동 업데이트  (0) 2011.05.09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011.03.15
DockIcon Click 이벤트 처리  (0) 2011.03.04
Posted by 얌노트
ActionScript2011.03.04 18:13
Air 프로그램을 Tray에 등록하는 작업을 할 때 윈도우에서 사용되는 SystemTrayIcon은 마우스의 Click 이벤트를 잡아낼 수 있지만 맥에서 사용되는 DockIcon은 마우스 이벤트를 잡아낼수가 없다.
하지만 NativeApplication 에서 invoke 이벤트를 이용하면 똑같은 효과를 볼 수 있다.


if (NativeApplication.supportsDockIcon) {
    var dockIcon:DockIcon = NativeApplication.nativeApplication.icon as DockIcon;
    NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, undock);
    dockIcon.menu = createIconMenu();
} else if (NativeApplication.supportsSystemTrayIcon) {
    var sysTrayIcon:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
    sysTrayIcon.tooltip = "Stopwatch";
    sysTrayIcon.addEventListener(MouseEvent.CLICK,undock);
    sysTrayIcon.menu = createIconMenu();
}
신고

'ActionScript' 카테고리의 다른 글

웹서버  (0) 2011.05.11
자신의 IP 외부에서 알아오기  (0) 2011.05.09
랜카드에 할당된 IP 알아내기  (0) 2011.05.09
자동 업데이트  (0) 2011.05.09
AIR의 OS별 File.applicationStorageDirectory Paths  (0) 2011.03.15
DockIcon Click 이벤트 처리  (0) 2011.03.04
Posted by 얌노트

티스토리 툴바