facebook twitter hatena line email

Php/zend framework/zend amf

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

バイナリで高速にflashとphpでやりとりを行えるライブラリです。

zendサンプル

controllerを作成

require_once APPLICATION_PATH . '/models/amf/HelloWorldAmf.php';
class AmfController extends Zend_Controller_Action
{
    private $_server;
    public function init()
    {
        // ビュー無効化
        $this->_helper->viewRenderer->setNoRender(true);
        // サーバー初期化
        $this->_server = new Zend_Amf_Server();
    }
    public function helloAction()
    {
        $this->_server->setClass('HelloWorldAmf');
    }
    public function postDispatch()
    {
        // リクエスト処理
        $response = $this->_server->handle();
        // レスポンス返却
        echo $response;
    }
}

モデルを作成

class HelloWorldAmf
{
    public function hello($value)
    {
        return $value . "World!";
    }
}

as2サンプル

import mx.remoting.*;
import mx.rpc.*;
import mx.remoting.debug.NetDebug;
//URL
var gatewayUrl:String = "http://localhost/amf/hello";
//デバッグの初期化
NetDebug.initialize();
//PHPのHelloWorldクラスを呼ぶ
var _service:Service = new Service(gatewayUrl, null, 'HelloWorldAmf', null , null);
var pc:PendingCall = _service.hello("Hello!");
pc.responder = new RelayResponder(this, "handleResult", "handleError");
function handleResult(event:ResultEvent)
{
 trace(event.result);
}
function handleError(event:FaultEvent)
{
 trace("エラー");
}

as3サンプル

import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;
import flash.events.NetStatusEvent;
// AMF3形式でデータを送る
private function send():void {
  //(1-1)結果に応じたコールバック関数を登録したオブジェクト
  var responder:Responder = new Responder(_onSuccess, _onFailure);
  //(1-2)Zend_Amfとの接続のためのオプジェクト
  var nc:NetConnection = new NetConnection();
  nc.addEventListener(NetStatusEvent.NET_STATUS, _onNetStatus);
  //(1-3)Zend_AmfのURLを指定
  nc.connect('http://localhost/amf/hello');
  //(1-4)AMF3 でエンコードするように指定
  nc.objectEncoding = ObjectEncoding.AMF3;
  //(1-5)渡すデータを作成
  var params:DataAS = new DataAS;
  params = "Hello!";
  //(1-6)Zend_AmfにgetHelloStringをリクエスト
  nc.call('HelloWorldAmf.hello', responder, params);
}
private function _onNetStatus(e:NetStatusEvent):void
{
  trace("サーバコネクションに失敗。(" + e.info.code + ")");
}
// 成功時の処理
private function _onSuccess(ret:*):void {
  if (typeof ret == 'string') {
    //テキストエリアに帰って来た文字列を追加
    trace(ret);
  }
}
// サーバ処理時に失敗した時の処理
private function _onFailure(ret:*):void {
  trace('サーバ処理時に失敗');
}

参考

flash/amfphp