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('サーバ処理時に失敗'); }