作成日

7 December 2009

必要条件

この記事に必要な予備知識

FlexベースのAIRプログラミングの知識が必要です。ただし、FlashおよびAjaxベースのAIR開発者も十分理解できる内容です。

ユーザーレベル

初級

その他の要件

Adobe AIR2 SDK
Adobe Flash Builder4

重要: このサンプルアプリケーションは、AIR 2 betaの機能を体験するために作成されています。お試しになる場合は、AIR 2 beta ランタイムを先にインストールする必要があります。なお、既にAIR 1.xのランタイムがOSにインストールされている場合は、上書きされてしまいますのでご注意ください。元に戻す場合は、AIR 2 beta ランタイムをアンインストールし、AIR 1.5.2 ランタイムをインストールします。詳細はリリースノート(英語) をご覧ください。

 

はじめに

AIR 2.0で追加されるAPIにより、これまでよりも一層拡張性があるアプリケーションの作成ができます。

その能力を活用してAIRアプリケーションどうしでデータの送受信やチャットを可能にするコミュニケーションアプリがairPortです。

今回は、このairPortをサンプルとして新しいAIR APIの使用方法をご紹介します。
対象とする読者は次のような方です。

  • AIRプログラマー、プロジェクトマネージャの方
  • Flexプログラマー、プロジェクトマネージャのの方
  • Visual Basic、Visual C#、Visual C++、Delphiなどのデスクトップアプリケーション開発者で、新しいAIRアプリケーション開発に関心がある方
  • FlashやDreamweaverでサイト構築をしている方で新しいAIRアプリケーション開発に関心がある方

学習できること

AIR2.0で拡張された次のAPI の使用手順と方法

  • flash.net.NetworkInfo
  • flash.net.DatagramSocket
  • flash.filesystem.File.openWithDefaultApplication()

1.コミュニケーションアプリairPort の機能紹介

今回作成した、AIRの新しいAPIを活用するコミュニケーションアプリ「airPort」の概要ご紹介します。

Ⅰ.基本機能

airPortユーザどうしでファイルの送受信やリアルタイムのチャットなどを行う機能を提供します。

  1. 自分のプロフィールです。画像や名前を登録可能です。
  2. 同じネットワーク上にいるほかのユーザのリストです。
  3. 送信する文章を編集するボックスです。
  4. 受信した文章を表示するボックスです。
  5. トピックごとにコミュニケーションを行えます。
  6. 受信したファイルがリスト表示されます。選択して開いたり、名前を付けて保存できます。

Ⅱ. 今回作成に使用したアプリケーションは次のとおりです。

Adobe AIR SDK2.0 Beta1
Adobe Flash Builder 4 Beta2
Adobe Illustrator CS4
Adobe Flash Catalyst Beta2

2.新しいAIR APIの使用方法

airPortのコアはネットワークAPIによるデータ転送で提供されます。その基本機能を実現するAPIをサンプルを交えてご紹介します。

Ⅰ.ネットワーク情報の取得

flash.net.NetworkInfoクラスとflash.net.NetworkInterface クラスにより、ネットワークインタフェースの情報を取得できます。

OS上のネットワークインタフェースについて以下の情報を取得できます。

  • インタフェースがアクティブかどうか
  • アサインされているアドレスのリスト
  • ネットワークインタフェースの表示名
  • MACアドレス
  • MTUサイズ
  • ネットワークインタフェースの名称
  • サブインタフェースの親インタフェースであるか
  • サブインタフェースのリスト(親である場合)

次の手順により、ネットワーク情報を取得できます。

  1. NetworkInfoオブジェクトでネットワークインタフェースのリストを取得
  2. NetworkInterfaceオブジェクトで各インタフェースの情報を取得

flash.net.NetworkInfo クラス

システムのネットワークインタフェース情報を取得するためのメソッドを提供します。
findInterfaces()メソッドは NetworkInterfaceオブジェクトが格納されたベクターオブジェクトを返します。ベクターに格納された各NetworkInterfaceオブジェクトが1つのネットワークインタフェース情報を提供します。

flash.net.NetworkInterface クラス

ネットワークインタフェース個別の情報を格納するオブジェクトとして次のプロパティを提供します。

情報 プロパティ名
アクティブ active true
アドレスのリスト addresses  
表示名 sidplayName  
MACアドレス hardwareAddress 00-22-15-68-BC-61
MTUサイズ mtu 1500
インタフェース名称 name {A7BDF3D2-6A85-11DB-B5AE-806E6F6E6963}
デフォルト networkInterfaceDefault false

flash.net.interfaceAddressクラス

NetworkInterface.addressesプロパティで参照できるflash.net.interfaceAddressオブジェクトでインタフェースが持つアドレスを調べることができます。オブジェクトはVectorに格納されます。

次のコードを実行すると、実行環境のネットワークインタフェース情報がすべて出力されます。

networkInfo = NetworkInfo.networkInfo; trace( "The network interfaces Information:" ); var interfaces:Vector.<NetworkInterface> = networkInfo.findInterfaces(); for each(var networkInterface:NetworkInterface in interfaces) { trace( "Active:" + networkInterface.active ); trace( "Display Name:" + networkInterface.displayName ); trace( "Hardware Address:" + networkInterface.hardwareAddress ); trace( "MTU:" + networkInterface.mtu ); trace( "Name:" + networkInterface.name ); var addresses:Vector.<InterfaceAddress> = networkInterface.addresses; for each(var interfaceAddress:InterfaceAddress in addresses) { trace( " Address:" + interfaceAddress.address ); trace( " Broadcast:" + interfaceAddress.broadcast ); trace( " Prefix Length:" + interfaceAddress.prefixLength ); } }

Ⅱ.ソケットによるデータ送受信

flash.net.Socket やflash.net.DatagramSocket クラスにより、TCP/IPによるデータ送受信がおこなえます。airPortでは、効率の良いテキストデータ転送のためにDatagramSocketを使用しています。ここではDatagramSocketの使用方法についてご紹介します。

次の手順により、DatagramSocketによるデータ送受信を行うことができます。

  1. DatagramSocketオブジェクトでネットワークアドレスとポートにバインドする
  2. DatagramSocketオブジェクトにリスナーを設定する
  3. データを送信する
  4. 受信があると、設定したリスナーが起動されてデータが取得できる

flash.net.DatagramSocket クラス

Universal Datagram Protocol (UDP) によるパケットの送受信を可能にします。UDPはTCPに比べて信頼性は保証されませんが、スピードが要求されるデータ転送に使用されます。たとえばDomain Name Systemサーバへの参照にはUDPが使用されます。

次のサンプルコードでは、init()ファンクションでソケットのバインドを行い、受信用リスナーの登録も行います。writeStr()ファンクションでデータを送信できます。

private var socket:DatagramSocket; public function init( port:int, address:String ):void { socket.addEventListener(DatagramSocketDataEvent.DATA, socketDataHandler); try { socket.bind( port, address ); socket.receive(); } catch ( event:ArgumentError ) { trace("ArgumentError: " + event); } catch ( event:SecurityError ) { trace("SecurityError: " + event); } catch ( event:IOError ) { trace("IOError: " + event); } catch ( event:RangeError ) { trace("RangeError: " + event); } } public function socketDataHandler(event:DatagramSocketDataEvent):void { var data:String = event.data.readUTFBytes(event.data.bytesAvailable); trace( data ); } private function writeStr( port:int, address:String ):void { var str:String = "Hello AIR2.0¥n"; try { var ba:ByteArray = new ByteArray(); ba.writeMultiByte( str, "UTF-8"); socket.send( ba, 0, 0, address, port ); } catch(event:IOError) { trace("IOError:" + event); } }

Ⅲ.flash.filesystem.File.openWithDefaultApplication() によるファイルのオープン

OSで関連付けられているファイルタイプに従い、デフォルトのアプリケーションを起動してファイルを開くことができます。たとえば、「.txt」という拡張子がメモ帳と関連付けされている場合、ファイルへの参照を持つFileオブジェクトでメソッドを実行すると、メモ帳を起動してそのファイルを開くことができます。

airPortアプリケーションの画面イメージに ⑥ 受信したファイルのリスト表示 がありますが、ユーザはこのリストからファイルを選択して、ボタンを押すことにより、デフォルトのアプリケーションでそのファイルを開くことができます。

次の手順により、デフォルトアプリケーションでファイルをオープンできます。

  1. 対象のファイルを参照するFileオブジェクトを生成します
  2. FileオブジェクトでopenWithDefaultApplication()を呼び出します

flash.net.File クラス

AIR1.0より提供されるFileクラスは、ローカルファイルに関するあらゆる処理を可能にしますが、今回追加されたopenWithDefaultApplication() メソッドにより、アプリケーションから直接ファイルを開くことが可能になりました。

次のサンプルコードでは、C: ドライブにある myText.txtファイルをデフォルトのアプリケーションで開きます。Windowsのデフォルトでは、メモ帳が開きます。ファイルが存在しない場合や.txt に関連付けがされていない場合などでアプリケーションを開けない場合、IOErrorが発生します。

try { var f:File = new File( "C:¥¥myText.txt" ); f.openWithDefaultApplication(); } catch( error:IOError ) { trace(" IOError:" + error.message ); } catch( error:IllegalOperationError ) { trace(" IllegalOperationError:" + error.message ); } catch( error:ReferenceError ) { trace(" ReferenceError:" + error.message ); } catch (error:Error) { trace(" Error:", error.message); }

▼最後に

今回はAIR 2.0 で追加された新APIの一部をご紹介しましたが、これら以外にもアプリケーションの可能性を格段に広げるAPIが提供されています。ネットワークインフラの定着により、クラウドのような形態が示唆されていますが、どのような状況になっても主役は利用者であるクライアントです。OSやブラウザの制限を受けることがないAIRはWeb環境のデスクトップアプリケーションインフラとして最適な選択肢であることは間違いありません。その可能性を示す例としてairPortを作成しました。airPortはAIR APIの可能性を示すアプリケーションとして、LCDS3への対応など、今後も機能拡張を続けてゆきます。