カテゴリー別アーカイブ: Flex 4

Zend AMF で画像のバイナリ取得

前回のエントリの続きですが、Zend AMF を使用して画像のバイナリデータを取得するときの注意事項は、以下の 2 点です。

  • AMF3 形式で通信
  • Zend_Amf_Value_ByteArray API で、AS3 の ByteArray 型に変換

例 :

service.php

<?php
require_once 'Zend/Amf/Server.php';
require_once 'Zend/Amf/Value/ByteArray.php';
$server = new Zend_Amf_Server();
$server->setClass('PHPService');
$server->setClassMap('TestResultVO', 'TestResult');
$response = $server->handle();
echo $response;
class PHPService {
    public function test($args) {
       $filename      = 'hoge.jpg';
       $file          = fopen($filename,'rb');
       $content       = fread($file, filesize($filename));
       fclose($file);
       $result        = new TestResult();
       $result->bytes = new Zend_Amf_Value_ByteArray($content);
       return $result;
    }
}
class TestResult {
    public $bytes;
}
?>

Test.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx            = "http://ns.adobe.com/mxml/2009"
xmlns:s             = "library://ns.adobe.com/flex/spark"
applicationComplete = "test()"
>
<fx:Script>
<![CDATA[
protected function test():void {
    var responder:Responder  = new Responder(onResult, onFault);
    var connection:NetConnection = new NetConnection();
    connection.objectEncoding = ObjectEncoding.AMF3;
    connection.connect("http://*****/service.php");
    connection.call("PHPService.test", responder, []);
}
protected function onResult(result:Object):void {
    var data:TestResultVO = TestResultVO(result);
    image.source = data.bytes;
}
protected function onFault(fault:Object):void {
}
]]>
</fx:Script>
    
<s:Image id="image" />
</s:Application>

TestResultVO.as

package {
import flash.utils.ByteArray;
[RemoteClass(alias="TestResultVO")]
public class TestResultVO {
    public var bytes :ByteArray;
    public function TestResultVO() {}
}
}

Zend AMF 使用時の NetConnection.call() メソッド諸注意

最近、お仕事で Zend AMF と戯れる機会がありまして、ハマった事柄を備忘録として残しておきます。

ドキュメントに記されている NetConnection.call() メソッドの引数は以下の通り。

public function call(command:String, responder:Responder, ... arguments):void

NetConnection.call() メソッドを使用して、PHP のサービス ( メソッド ) を呼び出すとき、call() メソッドの第 3 引数 (arguments) に渡す値の内容によって、AMF バージョンの解釈が変わることが分かりました。

結果は以下の通りです。

環境 : Flex 4.5, Zend AMF 1.11.7

//AMF0 として解釈
nc.call("PHPService.test", responder);

//AMF0 として解釈
nc.call("PHPService.test", responder, null);

//AMF3 として解釈
nc.call("PHPService.test", responder, []);

//AMF3 として解釈
nc.call("PHPService.test", responder, ["hoge", "fuga"]);

//AMF0 として解釈
nc.call("PHPService.test", responder, "hoge");

//AMF0 として解釈
nc.call("PHPService.test", responder, 111);

//AMF0 として解釈
nc.call("PHPService.test", responder, "hoge", "fuga");

//AMF3 として解釈
nc.call("PHPService.test", responder, [], "hoge", "fuga");

//AMF3 として解釈
nc.call("PHPService.test", responder, "hoge", "fuga", []);

//AMF0 として解釈
nc.call("PHPService.test", responder, 1, 2, 3, 4);

//AMF3 として解釈
nc.call("PHPService.test", responder, {});

//AMF3 として解釈
nc.call("PHPService.test", responder, new XML());

//AMF3 として解釈
nc.call("PHPService.test", responder, new Date());

//AMF0 として解釈
nc.call("PHPService.test", responder, true);

どうやら、arguments パラメータに非プリミティブ値 ( 複合値… Array、Date、Error、Function、RegExp、XML、XMLList など ) のオブジェクトが 1 つでも含まれていれば AMF3 として解釈されるようです。以下のように、NetConnection オブジェクトのエンコードを指定しても、無視されるので注意が必要です。

NetConnection.objectEncoding = ObjectEncoding.AMF3;

画像のバイナリを ByteArray として取得しようとしたときに、どハマりして困りました。

[告知] Flex 4 の書籍を書きました

Flex 4 プログラミングガイド
工学社 : Flex 4 プログラミングガイド

来週 2011 年 2 月 7 日 ( 月 ) に、工学社から Flex 4 の書籍が発売されます。
タイトルは『 Flex 4 プログラミングガイド』で、初の単行本…単著になります。

内容は、Flex 4 SDK についての解説がほとんどで、新機能と Spark コンポーネントについて掘り下げて書きました。( 目次は工学社のサイトから )

Flex 4 マスターシリーズが基になっているような箇所もありますが、元々私が担当していた箇所は加筆し、担当していなかった箇所はほぼゼロから書き下ろしています。 初級~中級者をターゲットにしていますが、日ごろ業務で使いこなしている上級者も退屈しないような内容にしたつもりです。

サンプルプロジェクトの FXP を 70 点強収めた CD-ROM 付きで、価格は ¥2,415 ( 本体 ¥2,300 ) です。

同業者さまはもちろん、教育、学術系の方々も、よろしければ是非。

Adobe AIR 2 マスターシリーズ 第 9 回

公開から少し経ってしまいましたが、寄稿した AIR 2 関連記事が Adobe Developer Connection に掲載されたので紹介します。

  • Adobe AIR 2 マスターシリーズ 第 9 回 ウィンドウサイズとジェスチャーイベント
    http://www.adobe.com/jp/joc/devnet/air/articles/air2master09.html

    AIR 2 にて強化されたウィンドウサイズ機能と、新しく採用されたジェスチャーイベントについての紹介です。興味のある方は是非読んでいただければと思います。

Adobe MAX 2010 RETWEET 発表資料

参加された皆様、お疲れさまでした。
私が担当したセッションの発表資料とサンプルをアップしましたので、下記 URL よりご覧下さい。

Adobe AIR 2 マスターシリーズ 第 8 回

先日のエントリーに引き続き、寄稿した AIR 2 関連記事が Adobe Developer Connection に掲載されたので紹介します。

  • Adobe AIR 2 マスターシリーズ 第 8 回 外部デバイス(マイク)との連携
    http://www.adobe.com/jp/joc/devnet/air/articles/air2master08.html

    AIR 2 の Microphone API に関するチュートリアルです。
    Flash Builder “Burrito” で作成できる Flex モバイルプロジェクト (AIR for Android) のサンプルコードも用意しましたので、興味のある方は是非読んで試していただければと思います。

@IT Flash Builder, Flash Catalyst ラウンドトリップ記事

@IT さんに寄稿した記事が先日公開されました。
http://www.atmarkit.co.jp/fwcr/rensai2/flex4_07/01.html

Adobe MAX 2010 開催と併せて公開された Flash Builder “Burrito” と Flash Catalyst “Panini” のラウンドトリップについて書かせていただきました。

サンプルファイルも用意しましたので、興味のある方は是非読んで試していただければと思います。

[告知] Adobe MAX 2010 RETWEET で喋ります

「Deep Dive into Flex 4.5 (Hero) Preview」 14:50-15:40

Adobe MAX 2010 開催と併せて公開された新しい Flex SDK 4.5 (Hero) のプレビュー版にて、
新規に追加された Spark コンポーネントやクラスについて、デモを交えながら具体的に解説します。

来週 11/25 ( 木 ) に行われる Adobe MAX 2010 RETWEET に登壇します。

このイベントは、基調講演後「 Flash 開発者向けセッション」と「 Flex 開発者向けセッション」と、2 つのセッションに分かれる形式で行われますが、私は Flex 開発者向けセッションで Flex SDK 4.5 (Hero) で新規に採用されたクラスについて喋ります。

なお、Hero のモバイル機能に関しては、私のセッションと同時刻に Flash 開発者向けセッションにて ClockMaker の池田さんが、そして、Flex 開発者向けセッションでは、クラスメソッドの横田さんが担当されるので、私のセッションでは、モバイル機能を除いた Flex 4 SDK の生粋 (?) な箇所に重点を置く予定です。

興味のある方は是非お申し込みください。
http://www.adobe.com/jp/joc/max/retweet/

Flex 4 勉強会 第 124 回@東京 発表資料

参加された皆様、お疲れさまでした。
勉強会で使用した発表資料とサンプルをアップしましたので、下記 URL よりご覧下さい。

スライド
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG12420100921Slide.pdf

Scroller デモ 01 ( 画面とソース )
http://labs.taiga.jp/flex4/ScrollerSample01/
http://labs.taiga.jp/flex4/ScrollerSample01/srcview/

Scroller デモ 02 ( 画面とソース )
http://labs.taiga.jp/flex4/ScrollerSample02/
http://labs.taiga.jp/flex4/ScrollerSample02/srcview/

FxUG 全国ツアー 2010 発表資料

FxUG 全国ツアー 2010 で発表した資料をアップしました。

熊本、沖縄 ( スライドとデモ )
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG11520100703Slide.pdf
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG11520100703Demo.zip

東京 ( スライド )
http://labs.taiga.jp/presentationMaterial/FxUG/FxUG11920100728Slide.pdf

フォントのライセンスや大人の事情により、公開しているデモは Ajax 版のソースのみです。ご了承ください。