使用Adobe AIR 2的Native Process调用Curl命令

转载 2012年03月31日 14:09:44

使用Adobe AIR 2的Native Process调用Curl命令

运行平台:Adobe AIR 2+
语言:ActionScript 3.0
使用到的软件:Adobe Flash Builder 4.5
提要:
本篇主要介绍了如何使用Adobe AIR 2的Native Process调用Curl命令,包括在mac和windows两个系统分别实现此特性。本篇写作的时候应用还在开发过程中,部分内容还有待完善补充。
相关文章:

AIR 2已经出来有段时日了,最近公司内部有个需求,需要通过AIR调用Curl命令,才用上了这个AIR 2的特性Native Process。查了不少文章,比较少能完完整整使用的,要么只是hellow world的级别要么就是转载翻译Adobe官方的文章。我在自己使用完之后,才感觉真的是一个强大实用的特性,值得我们去学习使用。使用NativeProcess可以和系统原生应用进行通行,将系统的一些原生特性打包到AIR应用中。为了实用这个特性,我们需要将AIR应用发布成系统原生安装格式,例如Windows需要发布成exe,Mac需要发布成dmg。如果是Mac系统,curl环境是已有的,而对于windows系统就需要将curl打包到air应用中去。

Native Process定义:

NativeProcess 类提供命令行整合和通常的发送功能。NativeProcess 类让AIR 程序在主机操作系统上执行本地流程。AIR 程序能监控流程的标准输入(stdin )和标准输出(stdout )流,及流程的标准错误(stderr )流。

关于Curl:

curl是利用URL语法在命令行方式下工作的文件传输工具。关于curl可以参考:
http://curl.haxx.se/
http://baike.baidu.com/view/1326315.htm

本案例使用到的命令是:
curl –output /dev/null –write-out “resolve: %{time_namelookup},connect: %{time_connect},pretransfer: %{time_pretransfer},starttransfer: %{time_starttransfer},total time: %{time_total}\n” –silent
主要是检测网络链接各个步骤的几个时间值,使用mac系统的Terminal调用,查看http://www.weibo.com
打开Terminal,输入命令:curl –output /dev/null –write-out “resolve: %{time_namelookup},connect: %{time_connect},pretransfer: %{time_pretransfer},starttransfer: %{time_starttransfer},total time: %{time_total}\n” –silent http://www.weibo.com

得到的结果:

可以看到最终的结果是:resolve: 1.115,connect: 1.157,pretransfer: 1.157,starttransfer: 1.217,total time: 1.217

接下来我们就要把这个功能集成到Adobe AIR应用中去。并将获得的数据显示成图表。最终结果如下:
案例中使用到了微博图表组件,微博图表的代码暂时还未开源,所以下面只是介绍主要的一些代码,或得到数据后,无论使用什么形式展示都是没问题的。

Step1:创建AIR工程

创建一个Flash Builder的AIR工程

Step2:创建界面记本结构

使用MXML创建界面基本结构:

<mx:VBox left="10" right="10" top="10" bottom="10"
    horizontalAlign="left">
  <mx:Label text="URL:" textAlign="left"/>
  <mx:TextInput id="textToSend" width="100%"
      text="http://www.weibo.com"/>
  <mx:Button id="submitBtn" label="Submit" click="writeData()"/>
  <mx:Spacer/>
  <s:HGroup verticalAlign="middle">
    <mx:Label fontSize="14" text="Log:" textAlign="left"/>
    <s:Spacer width="85" />
    <s:Button label="clear" id="btnClearLog"
       click="btnClearLog_clickHandler(event)"/>
  </s:HGroup>
    <s:HGroup width="100%" height="100%">
    <s:TextArea id="textReceived" width="200" height="100%"/>
    <s:Spacer width="10" />
    <s:SpriteVisualElement width="370" height="100%" id="chartCont"/>
  </s:HGroup>
</mx:VBox>

基本上就是一个输入框,可输入需要检测的url,一个Submit按钮,一个日志显示的文本区域。

Step3:检测是否支持NativeProcess

在应用applicationComplete的时候调用初始化函数,使用NativeProcess.isSupported来检测当前运行环境是否支持NativeProcess

if (NativeProcess.isSupported){
    launchCurl();
}else{
    textReceived.text = "NativeProcess not supported.";
}

Step4:启动Curl

根据操作系统启动Curl,并侦听相关的一些事件

public function launchCurl():void
{
  var file:File = File.applicationDirectory;
  if (Capabilities.os.toLowerCase().indexOf("win") > -1){
    //windows需要集成curl,暂未处理
  }else if (Capabilities.os.toLowerCase().indexOf("mac") > -1){
    file = file.resolvePath("/bin/bash");
  }

  var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
  nativeProcessStartupInfo.executable = file;
  nativeProcessStartupInfo.arguments = args;

  process = new NativeProcess();
  process.start(nativeProcessStartupInfo);
  process.addEventListener(NativeProcessExitEvent.EXIT, onExit);
  process.addEventListener(Event.STANDARD_OUTPUT_CLOSE, onOutputClose);

  process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
  process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, errorDataHandler);

  process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError);
  process.addEventListener(ProgressEvent.STANDARD_INPUT_PROGRESS, inputProgressListener);
  process.addEventListener(Event.STANDARD_INPUT_CLOSE, onStandardInputClose);
  process.addEventListener(IOErrorEvent.STANDARD_INPUT_IO_ERROR, onStandInputIOError);
}

Step5:使用standardInput写入命令

使用process的standardInput向curl写入命令

public function writeData():void
{
  submitBtn.enabled = false;
  var cmd:String = 'curl --output /dev/null --write-out "resolve: %{time_namelookup},connect: %{time_connect},pretransfer: %{time_pretransfer},starttransfer: %{time_starttransfer},total time: %{time_total}\n" --silent ';
  cmd += textToSend.text;
  cmd += " \n";
  process.standardInput.writeUTFBytes(cmd);
}

Step6:读取通过standardOutput输出的数据

通过捕捉ProgressEvent.STANDARD_OUTPUT_DATA,读取process的standardOutput获得命令调用后输出的数据

public function onOutputData(event:ProgressEvent):void
{
  var str:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);
  textReceived.appendText(str);
  textReceived.appendText("\n");
}

只许对这个读取到的字符串进行解析,就能获得你要的数据了。


文章出处:http://www.flashache.com/2011/12/10/adobe-air2-native-process-curl/

Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)

本章主要总结数据库的插入,删除,修改,以及语句参数的使用 0.SQLStatement类介绍 SQLStatement实例用于针对通过 SQLConnection 实例打开的本地 SQL 数据库执...
  • etdeng
  • etdeng
  • 2011年11月15日 08:34
  • 566

Updating Adobe AIR applications packaged with a native installer

With the release of Adobe AIR SDK 2 developers have the ability to package their applications into n...

Adobe AIR3,Android本机扩展[Native Extensions]详细示例

到目前为止,我只做过Android上的本机扩展,windows, ios 上的还没有实践过 具体流程,和相关网址如下。 1. Android开发环境 参考网址:http://hi.baidu.c...

Developing native extensions for Adobe AIR

原文:http://www.adobe.com/devnet/air/articles/developing-native-extensions-air.html 以下为摘译 Note: Adob...
  • zz962
  • zz962
  • 2011年10月13日 16:08
  • 2961

Exploring the new file capabilities in Adobe AIR 2

One of the biggest advantages of running an AIR desktop application over a browser-based web applica...

使用的BlackBerry® Tablet OS SDK for Adobe® AIR®开发应用(一)

议程 •Playbook是什么? •设置您的开发环境 •创建“hello world” Adobe AIR应用 •为BlackBerry Playbook打包Adobe AIR应用 •部署和...

使用的BlackBerry® Tablet OS SDK for Adobe® AIR®开发应用(二)

将内存设置为1 GB

Adobe AIR 代码签名证书使用指南

Symantec,Thawte,GlobalSign 签发的代码签名证书都可以签名AIR文件。如果您还没有代码签名证书,请联系易维信(EVTrust)购买Adobe AIR 代码签名证书。 1.签名...

Adobe AIR移动App的互相调用实现方式

转载:http://www.cnblogs.com/njflash/articles/3380155.html 在使用Adobe AIR进行移动应用开发的时候,我们或许会有这样的需求...

在windows环境下使用adobe air 的本机扩展ane的一些心得

下文是我对如何在windows环境下使用adobe air的本机扩展(ane)的一些心得。 本文针对flashcs5.5,cs6中对ane的支持已经有很大的提高。 一、官方帮助 http...
  • dj0379
  • dj0379
  • 2012年08月10日 14:45
  • 7741
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Adobe AIR 2的Native Process调用Curl命令
举报原因:
原因补充:

(最多只允许输入30个字)