public class MsgDispatcher
{
private var _cmdHandlerMapictionary;
public function MsgDispatcher()
{
_cmdHandlerMap = new Dictionary();
}
public function register(type:int, code:int, handler:Function):void
{
var codeHandlers:Vector.<CodeHandlerPair> = _cmdHandlerMap[type];
if (codeHandlers == null)
{
codeHandlers = new Vector.<CodeHandlerPair>();
_cmdHandlerMap[type] = codeHandlers;
}
// 忽略一样的code&handler
if (!isHandlerValid(code, handler, codeHandlers))
return;
private function isHandlerValid(code:int, handler:Function, handlers:Vector.<CodeHandlerPair>:Boolean
{
for (var i:int = 0; i < handlers.length; i++)
{
if (handlers._code == code && handlers._handler == handler)
return false;
}
return true;
}
public function dispatch(type:int, code:int, msgBody:MsgBody=null):void
{
var codeHandlers:Vector.<CodeHandlerPair> = _cmdHandlerMap[type];
if (codeHandlers == null)
return;
for (var i:int = 0; i < codeHandlers.length; i++)
{
if (codeHandlers._code == code)
codeHandlers._handler(msgBody);
}
}
}