配置的方法就不说了
php平台
http://www.amfphp.org/
package tools
{
import flash.utils.Dictionary;
/**
* @author magicianzrh
*/
public class MyDictionary
{
private var _valueDictionary:Dictionary;
public function MyDictionary() {
init();
}
public function add(key:String,value:*):void {
if (key != null) {
if (checkIsExist(key)) {
trace("\nMyDictionary add():: the key is exist\n");
}
_valueDictionary[key] = value;
}else {
trace("\nMyDictionary add():: the key is null\n");
}
}
public function byKey(key:String):* {
if (key == null) return null;
return _valueDictionary[key];
}
public function byValue(value:*):String {
for (var i:* in _valueDictionary) {
if (value == _valueDictionary[i]) {
break;
}
}
return i as String;
}
public function clear():void {
_valueDictionary = new Dictionary();
}
public function removeKey(key:String):void {
_valueDictionary[key] = null;
}
private function init():void {
_valueDictionary = new Dictionary();
}
private function checkIsExist(key:String):Boolean {
if (_valueDictionary[key] != undefined) return true;
return false;
}
}
}
package predef.model {
/**
* @author magicianzrh
* 简单说明下:
* FIRST_PARA是传入AmfphpModel用于表明当前要去链接哪个class
* FIRST_CLASS就是与FIRST_PARA对应的要调用的amfphp实际类地址
* FIRST_RETURN_PARA是返回数据中有returnObj["para"]说明当前返回的是什么,这个String与其对应
*/
public class PredefLinkURL {
public static var AMFPHP_GATE_WAY="http://localhost/amfphp/gateway.php";
public static var FIRST_PARA:String = "callFirst";
public static var FIRST_CLASS:String = "test.first";
public static var SECOND_PARA:String = "callSecond";
public static var SECOND_CLASS:String = "test.second";
public static var FIRST_RETURN_PARA:String = "returnFirst";
public static var SECOND_RETURN_PARA:String = "returnSecond";
}
}
package model
{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import predef.model.PredefLinkURL;
import tools.MyDictionary;
import flash.net.Responder;
/**
* @author magicianzrh
*/
public class AmfphpModel
{
private var _dictionary:MyDictionary;
private var _amfConnection:NetConnection;
public function AmfphpModel(){
init();
}
public function callAmfphp(eventData:Object):void {
_netConnection.call(_paraDictionary.byKey(eD["para"] as String), new Responder(onConnectHandle,onDisconnectHandle),eD["data"]);
}
private function onConnectHandle(rO:Object):void {
_dictionary.byKey(rO["type"]).(rO["data"]);
}
private function onDisconnectHandle(rO:Object):void {
//分析你的rO,会有错误信息
}
private function firstReturnHandle(rO:Object):void {
//firstReturn返回的rO["data"]
}
private function secondReturnHandle(rO:Object):void {
//secondReturn返回的rO["data"]
}
private function init():void {
initDictionary();
initConnection();
}
private function initDictionary():void {
_dictionary = new MyDictionary();
/*
* 参数与调用的amfphp对应
*/
_dictionary.add(PredefLinkURL.FIRST_PARA, PredefLinkURL.FIRST_CLASS);
_dictionary.add(PredefLinkURL.SECOND_PARA, PredefLinkURL.SECOND_CLASS);
/*
*返回参数与相应处理函数对应
*/
_dictionary.add(PredefLinkURL.FIRST_RETURN_PARA,firstReturnHandle);
_dictionary.add(PredefLinkURL.SECOND_RETURN_PARA,secondReturnHandle);
}
private function initConnection():void {
_amfConnection = new NetConnection();
_netConnection.objectEncoding = ObjectEncoding.AMF3;
_netConnection.connect(PredefLinkURL.AMFPHP_GATE_WAY);
}
}
}
后台php只要gateway地址对上、类地址对上以及返回的数据类型满足returnData["para"]说明返回的是什么,returnData["data"]用于表征数据就可以了
其他的直接修改PredefLinkURL以及添加dictionary和处理函数,这样规范就统一定下来,满足这个条件的都可以自动匹配
这样只要有人明白返回数据的结构,可以直接接手接着写下去,结构清晰点
这部分是我抽出来的代码,本来更加智能,智能添加侦听和移除,完善和修改代码变得相当的容易:)
最后说下就是,这个是后台无关性的
如果是.net平台
http://sourceforge.net/projects/amfnet/
道理都是一样的