public bool dispatch(AbstractMessage e) { bool result = false; int code = e.getMessageType(); List <ListenerBox> list; if (eventsMap.TryGetValue(code, out list)) { foreach (ListenerBox listenerBox in list.ToArray()) { listenerBox.listener(e); } result = true; } List <Action <AbstractMessage> > onceList; if (onceListenerMaps.TryGetValue(code, out onceList)) { foreach (Action <AbstractMessage> item in onceList.ToArray()) { item(e); } onceListenerMaps.Remove(code); result = true; } return(result); }
/** * 消息头生成 */ public static byte[] encodeHead(AbstractMessage obj, byte[] data) { byte[] head = new byte[Utils.SIZE_OF_INT * 2]; byte[] sizeByte = Utils.intToBytes(head.Length + data.Length); //Array.Reverse(sizeByte); byte[] mainByte = Utils.intToBytes(obj.getMessageType()); //byte [] subByte = Utils.intToBytes(obj.getSub()); Array.Copy(sizeByte, 0, head, 0, sizeByte.Length); Array.Copy(mainByte, 0, head, sizeByte.Length, mainByte.Length); //Array.Copy(subByte,0,head,(sizeByte.Length+mainByte.Length),subByte.Length); return(head); }