AS3 服务端、客户端协议路由简单写法 ---- AS3 Server、Client Router Demo
来源:互联网 发布:c 获取mac物理地址 编辑:程序博客网 时间:2024/05/21 14:07
/**
* @author Jave.Lin(afeng) * 指定bytes数据,执行解码 * @param bytes 指定bytes数据 */public function decode(bytes:ByteArray):Object{bytes.position=0;bytes.endian=_endian;var decoderID:uint=bytes.readUnsignedShort();//decoderIDvar decoder:Function=_decoderDic[decoderID];//find decoder from cachestry{if(decoder!=null)return decoder(bytes);var key:String = decoderID.toString(16).toLowerCase();var decoderName:String=DECODER_PREFIX+"0x"+key;//decoderNamedecoder=this[decoderName];//find decoderif(decoder!=null){_decoderDic[decoderID]=decoder;//caches decoderreturn decoder(bytes);}return null;}catch(er:Error){var msg:String="s2c 协议号:0x"+decoderID.toString(16).toLowerCase()+"解码异常,原因:\n";msg+=er.toString()+"\n";msg+=er.getStackTrace();Alert.show(msg);throw er;return null;}return null;}
上面是我目前里用着的方法,不过唯一不好的是:这些解码方法(路由功能方法)没有再分一些模块再去处理;
网上还有一种叫:依赖注入方式,将解码方法都分别写在,不同的模块类下,处理,然后,再客户端注册一下依赖模块即可。
如:
class Player
{
public function start():void{}
}
//@author Jave.Lin(afeng);
//简单的Router功能;
//自动注册路由;
class Router
{
//注册depander:Dictionary
//这里的"player"不用字符串也行,使用数字最佳了;
//因为数据占用少,而且,与服务端的通讯中的协议一般都用一个数字,就不用另外再写数字与字符串的对应表了
depander["player"]=new Player();
//调用
depander["player"]["start"]();
//on router handler
var router:Dictionary;//
function router(bytes:ByteArray):Object
{
var decoderModuleId:uint=bytes.readUnsignedShort();
var decoderId:uint=bytes.readUnsignedShort();
var module:Dictionary=router[decoderModuleId];
if(!module)
{
module=router[decoderModuleId]=new Dictionary();
}
var handler:Function=module[decoderId];
if(!handler)handler=module[decoderId]=depander[decoderModuleId][decoderId];//这里就不使用字符串了,上面使用字符串因为这样大家比较好理解
if(!handler) throw new Error("oh no,no,no,decoderModuleId"+decoderModuleId+",decoderId:"+decoderId+" decoder is not found.");
return handler(bytes);
}
}
当然上面都是硬编码方式,还有比较高级的做法:IoC做法,这个大家可以百度一下即可知道;
就是把上面的硬编方式改成了,XML方式来管理依赖项之间的注册配置(注册关系);
PS:这种方式,俺以前写C#服务端也用过;
国外朋友喜欢把这功能,叫:路由
- AS3 服务端、客户端协议路由简单写法 ---- AS3 Server、Client Router Demo
- as3与服务端通信
- C++ as3 socket服务端
- 用as3 serverSocket 做服务端,实现web客户端
- AS3 Worker DEMO
- CXF开发服务端(Server)和客户端(Client)
- AS3
- As3
- as3 与 服务端ASP 通信
- java 实现简单http服务端,客户端DEMO
- AS3 简单右键菜单
- AS3老虎机简单原型
- Python 实现的简单server-client demo
- dycom之Flash AS3客户端
- 客户端和服务端程序 server.c and client.c
- netbeans创建webservice服务端server|webservice客户端client示例
- Mina客户端Client和Server对象传输demo
- tcp客户端服务端demo
- C#里的周计算,第几周,一周的开始......
- 使用仿真器调试自己编译的framework和打包的system.img
- 工厂模式
- GB2312编码表
- Linux rpm 命令参数使用详解
- AS3 服务端、客户端协议路由简单写法 ---- AS3 Server、Client Router Demo
- 哈希表
- #import说明
- ArcGIS API for Silverlight 调用GP服务加载等值线图层
- JS 时间走动
- 浮华落寂
- 程序员在上海(9)
- 《信息存储与管理:数字信息的存储、管理和保护》摘录
- OS应用程序的启动过程和进程的创建