diff --git a/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java b/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java index 12b1c08c..580d91ad 100644 --- a/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java @@ -470,48 +470,6 @@ public abstract class ByteBufUtils { return map; } - public static void writeLongIntMap(ByteBuf byteBuf, Map map) { - if (map == null) { - byteBuf.writeByte(0); - return; - } - writeInt(byteBuf, map.size()); - for (var entry : map.entrySet()) { - writeLongBox(byteBuf, entry.getKey()); - writeIntBox(byteBuf, entry.getValue()); - } - } - - public static Map readLongIntMap(ByteBuf byteBuf) { - var length = readInt(byteBuf); - var map = (Map) CollectionUtils.newFixedMap(length); - for (var i = 0; i < length; i++) { - map.put(readLongBox(byteBuf), readIntBox(byteBuf)); - } - return map; - } - - public static void writeLongLongMap(ByteBuf byteBuf, Map map) { - if (map == null) { - byteBuf.writeByte(0); - return; - } - writeInt(byteBuf, map.size()); - for (var entry : map.entrySet()) { - writeLongBox(byteBuf, entry.getKey()); - writeLongBox(byteBuf, entry.getValue()); - } - } - - public static Map readLongLongMap(ByteBuf byteBuf) { - var length = readInt(byteBuf); - var map = (Map) CollectionUtils.newFixedMap(length); - for (var i = 0; i < length; i++) { - map.put(readLongBox(byteBuf), readLongBox(byteBuf)); - } - return map; - } - public static void writeIntStringMap(ByteBuf byteBuf, Map map) { if (map == null) { byteBuf.writeByte(0); @@ -554,6 +512,69 @@ public abstract class ByteBufUtils { return map; } + public static void writeLongIntMap(ByteBuf byteBuf, Map map) { + if (map == null) { + byteBuf.writeByte(0); + return; + } + writeInt(byteBuf, map.size()); + for (var entry : map.entrySet()) { + writeLongBox(byteBuf, entry.getKey()); + writeIntBox(byteBuf, entry.getValue()); + } + } + + public static Map readLongIntMap(ByteBuf byteBuf) { + var length = readInt(byteBuf); + var map = (Map) CollectionUtils.newFixedMap(length); + for (var i = 0; i < length; i++) { + map.put(readLongBox(byteBuf), readIntBox(byteBuf)); + } + return map; + } + + public static void writeLongLongMap(ByteBuf byteBuf, Map map) { + if (map == null) { + byteBuf.writeByte(0); + return; + } + writeInt(byteBuf, map.size()); + for (var entry : map.entrySet()) { + writeLongBox(byteBuf, entry.getKey()); + writeLongBox(byteBuf, entry.getValue()); + } + } + + public static Map readLongLongMap(ByteBuf byteBuf) { + var length = readInt(byteBuf); + var map = (Map) CollectionUtils.newFixedMap(length); + for (var i = 0; i < length; i++) { + map.put(readLongBox(byteBuf), readLongBox(byteBuf)); + } + return map; + } + + public static void writeLongStringMap(ByteBuf byteBuf, Map map) { + if (map == null) { + byteBuf.writeByte(0); + return; + } + writeInt(byteBuf, map.size()); + for (var entry : map.entrySet()) { + writeLongBox(byteBuf, entry.getKey()); + writeString(byteBuf, entry.getValue()); + } + } + + public static Map readLongStringMap(ByteBuf byteBuf) { + var length = readInt(byteBuf); + var map = (Map) CollectionUtils.newFixedMap(length); + for (var i = 0; i < length; i++) { + map.put(readLongBox(byteBuf), readString(byteBuf)); + } + return map; + } + public static void writeLongPacketMap(ByteBuf byteBuf, Map map, IProtocolRegistration protocolRegistration) { if (map == null) { byteBuf.writeByte(0); @@ -575,6 +596,89 @@ public abstract class ByteBufUtils { return map; } + public static void writeStringIntMap(ByteBuf byteBuf, Map map) { + if (map == null) { + byteBuf.writeByte(0); + return; + } + writeInt(byteBuf, map.size()); + for (var entry : map.entrySet()) { + writeString(byteBuf, entry.getKey()); + writeIntBox(byteBuf, entry.getValue()); + } + } + + public static Map readStringIntMap(ByteBuf byteBuf) { + var length = readInt(byteBuf); + var map = (Map) CollectionUtils.newFixedMap(length); + for (var i = 0; i < length; i++) { + map.put(readString(byteBuf), readIntBox(byteBuf)); + } + return map; + } + + public static void writeStringLongMap(ByteBuf byteBuf, Map map) { + if (map == null) { + byteBuf.writeByte(0); + return; + } + writeInt(byteBuf, map.size()); + for (var entry : map.entrySet()) { + writeString(byteBuf, entry.getKey()); + writeLongBox(byteBuf, entry.getValue()); + } + } + + public static Map readStringLongMap(ByteBuf byteBuf) { + var length = readInt(byteBuf); + var map = (Map) CollectionUtils.newFixedMap(length); + for (var i = 0; i < length; i++) { + map.put(readString(byteBuf), readLongBox(byteBuf)); + } + return map; + } + + public static void writeStringStringMap(ByteBuf byteBuf, Map map) { + if (map == null) { + byteBuf.writeByte(0); + return; + } + writeInt(byteBuf, map.size()); + for (var entry : map.entrySet()) { + writeString(byteBuf, entry.getKey()); + writeString(byteBuf, entry.getValue()); + } + } + + public static Map readStringStringMap(ByteBuf byteBuf) { + var length = readInt(byteBuf); + var map = (Map) CollectionUtils.newFixedMap(length); + for (var i = 0; i < length; i++) { + map.put(readString(byteBuf), readString(byteBuf)); + } + return map; + } + + public static void writeStringPacketMap(ByteBuf byteBuf, Map map, IProtocolRegistration protocolRegistration) { + if (map == null) { + byteBuf.writeByte(0); + return; + } + writeInt(byteBuf, map.size()); + for (var entry : map.entrySet()) { + writeString(byteBuf, entry.getKey()); + protocolRegistration.write(byteBuf, entry.getValue()); + } + } + + public static Map readStringPacketMap(ByteBuf byteBuf, IProtocolRegistration protocolRegistration) { + var length = readInt(byteBuf); + var map = (Map) CollectionUtils.newFixedMap(length); + for (var i = 0; i < length; i++) { + map.put(readString(byteBuf), (IPacket) protocolRegistration.read(byteBuf)); + } + return map; + } //---------------------------------boolean-------------------------------------- public static void writeBooleanArray(ByteBuf byteBuf, boolean[] array) { diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceMapSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceMapSerializer.java index f48432f8..29a284d3 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceMapSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceMapSerializer.java @@ -39,37 +39,51 @@ public class EnhanceMapSerializer implements IEnhanceSerializer { var mapField = (MapField) fieldRegistration; var keyRegistration = mapField.getMapKeyRegistration(); var valueRegistration = mapField.getMapValueRegistration(); + var keySerializer = keyRegistration.serializer(); + var valueSerializer = valueRegistration.serializer(); // 直接在字节码里调用方法是为了减小生成字节码的体积,下面的代码去掉也不会有任何影响 if (keyRegistration instanceof BaseField) { if (valueRegistration instanceof BaseField) { - var keyBaseRegistration = (BaseField) keyRegistration; - var valueBaseRegistration = (BaseField) valueRegistration; - if (keyBaseRegistration.serializer() == IntSerializer.getInstance() && valueBaseRegistration.serializer() == IntSerializer.getInstance()) { + if (keySerializer == IntSerializer.getInstance() && valueSerializer == IntSerializer.getInstance()) { builder.append(StringUtils.format("{}.writeIntIntMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); return; - } else if (keyBaseRegistration.serializer() == IntSerializer.getInstance() && valueBaseRegistration.serializer() == LongSerializer.getInstance()) { + } else if (keySerializer == IntSerializer.getInstance() && valueSerializer == LongSerializer.getInstance()) { builder.append(StringUtils.format("{}.writeIntLongMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); return; - } else if (keyBaseRegistration.serializer() == LongSerializer.getInstance() && valueBaseRegistration.serializer() == IntSerializer.getInstance()) { + } else if (keySerializer == IntSerializer.getInstance() && valueSerializer == StringSerializer.getInstance()) { + builder.append(StringUtils.format("{}.writeIntStringMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); + return; + } else if (keySerializer == LongSerializer.getInstance() && valueSerializer == IntSerializer.getInstance()) { builder.append(StringUtils.format("{}.writeLongIntMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); return; - } else if (keyBaseRegistration.serializer() == LongSerializer.getInstance() && valueBaseRegistration.serializer() == LongSerializer.getInstance()) { + } else if (keySerializer == LongSerializer.getInstance() && valueSerializer == LongSerializer.getInstance()) { builder.append(StringUtils.format("{}.writeLongLongMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); return; - } else if (keyBaseRegistration.serializer() == IntSerializer.getInstance() && valueBaseRegistration.serializer() == StringSerializer.getInstance()) { - builder.append(StringUtils.format("{}.writeIntStringMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); + } else if (keySerializer == LongSerializer.getInstance() && valueSerializer == StringSerializer.getInstance()) { + builder.append(StringUtils.format("{}.writeLongStringMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); + return; + } else if (keySerializer == StringSerializer.getInstance() && valueSerializer == IntSerializer.getInstance()) { + builder.append(StringUtils.format("{}.writeStringIntMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); + return; + } else if (keySerializer == StringSerializer.getInstance() && valueSerializer == LongSerializer.getInstance()) { + builder.append(StringUtils.format("{}.writeStringLongMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); + return; + } else if (keySerializer == StringSerializer.getInstance() && valueSerializer == StringSerializer.getInstance()) { + builder.append(StringUtils.format("{}.writeStringStringMap($1, (Map){});", EnhanceUtils.byteBufUtils, objectStr)); return; } } else if (valueRegistration instanceof ObjectProtocolField) { - var keyBaseRegistration = (BaseField) keyRegistration; var valueProtocolRegistration = (ObjectProtocolField) valueRegistration; - if (keyBaseRegistration.serializer() == IntSerializer.getInstance() && valueProtocolRegistration.serializer() == ObjectProtocolSerializer.getInstance()) { + if (keySerializer == IntSerializer.getInstance() && valueSerializer == ObjectProtocolSerializer.getInstance()) { builder.append(StringUtils.format("{}.writeIntPacketMap($1, (Map){}, {});", EnhanceUtils.byteBufUtils, objectStr, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(valueProtocolRegistration.getProtocolId()))); return; - } else if (keyBaseRegistration.serializer() == LongSerializer.getInstance() && valueProtocolRegistration.serializer() == ObjectProtocolSerializer.getInstance()) { + } else if (keySerializer == LongSerializer.getInstance() && valueSerializer == ObjectProtocolSerializer.getInstance()) { builder.append(StringUtils.format("{}.writeLongPacketMap($1, (Map){}, {});", EnhanceUtils.byteBufUtils, objectStr, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(valueProtocolRegistration.getProtocolId()))); return; + } else if (keySerializer == StringSerializer.getInstance() && valueSerializer == ObjectProtocolSerializer.getInstance()) { + builder.append(StringUtils.format("{}.writeStringPacketMap($1, (Map){}, {});", EnhanceUtils.byteBufUtils, objectStr, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(valueProtocolRegistration.getProtocolId()))); + return; } } } @@ -102,38 +116,52 @@ public class EnhanceMapSerializer implements IEnhanceSerializer { var mapField = (MapField) fieldRegistration; var keyRegistration = mapField.getMapKeyRegistration(); var valueRegistration = mapField.getMapValueRegistration(); + var keySerializer = keyRegistration.serializer(); + var valueSerializer = valueRegistration.serializer(); var map = "map" + GenerateProtocolFile.index.getAndIncrement(); if (keyRegistration instanceof BaseField) { if (valueRegistration instanceof BaseField) { - var keyBaseRegistration = (BaseField) keyRegistration; - var valueBaseRegistration = (BaseField) valueRegistration; - if (keyBaseRegistration.serializer() == IntSerializer.getInstance() && valueBaseRegistration.serializer() == IntSerializer.getInstance()) { + if (keySerializer == IntSerializer.getInstance() && valueSerializer == IntSerializer.getInstance()) { builder.append(StringUtils.format("Map {} = {}.readIntIntMap($1);", map, EnhanceUtils.byteBufUtils)); return map; - } else if (keyBaseRegistration.serializer() == IntSerializer.getInstance() && valueBaseRegistration.serializer() == LongSerializer.getInstance()) { + } else if (keySerializer == IntSerializer.getInstance() && valueSerializer == LongSerializer.getInstance()) { builder.append(StringUtils.format("Map {} = {}.readIntLongMap($1);", map, EnhanceUtils.byteBufUtils)); return map; - } else if (keyBaseRegistration.serializer() == LongSerializer.getInstance() && valueBaseRegistration.serializer() == IntSerializer.getInstance()) { + } else if (keySerializer == IntSerializer.getInstance() && valueSerializer == StringSerializer.getInstance()) { + builder.append(StringUtils.format("Map {} = {}.readIntStringMap($1);", map, EnhanceUtils.byteBufUtils)); + return map; + } else if (keySerializer == LongSerializer.getInstance() && valueSerializer == IntSerializer.getInstance()) { builder.append(StringUtils.format("Map {} = {}.readLongIntMap($1);", map, EnhanceUtils.byteBufUtils)); return map; - } else if (keyBaseRegistration.serializer() == LongSerializer.getInstance() && valueBaseRegistration.serializer() == LongSerializer.getInstance()) { + } else if (keySerializer == LongSerializer.getInstance() && valueSerializer == LongSerializer.getInstance()) { builder.append(StringUtils.format("Map {} = {}.readLongLongMap($1);", map, EnhanceUtils.byteBufUtils)); return map; - } else if (keyBaseRegistration.serializer() == IntSerializer.getInstance() && valueBaseRegistration.serializer() == StringSerializer.getInstance()) { - builder.append(StringUtils.format("Map {} = {}.readIntStringMap($1);", map, EnhanceUtils.byteBufUtils)); + } else if (keySerializer == LongSerializer.getInstance() && valueSerializer == StringSerializer.getInstance()) { + builder.append(StringUtils.format("Map {} = {}.readLongStringMap($1);", map, EnhanceUtils.byteBufUtils)); + return map; + } else if (keySerializer == StringSerializer.getInstance() && valueSerializer == IntSerializer.getInstance()) { + builder.append(StringUtils.format("Map {} = {}.readStringIntMap($1);", map, EnhanceUtils.byteBufUtils)); + return map; + } else if (keySerializer == StringSerializer.getInstance() && valueSerializer == LongSerializer.getInstance()) { + builder.append(StringUtils.format("Map {} = {}.readStringLongMap($1);", map, EnhanceUtils.byteBufUtils)); + return map; + } else if (keySerializer == StringSerializer.getInstance() && valueSerializer == StringSerializer.getInstance()) { + builder.append(StringUtils.format("Map {} = {}.readStringStringMap($1);", map, EnhanceUtils.byteBufUtils)); return map; } } else if (valueRegistration instanceof ObjectProtocolField) { - var keyBaseRegistration = (BaseField) keyRegistration; var valueProtocolRegistration = (ObjectProtocolField) valueRegistration; - if (keyBaseRegistration.serializer() == IntSerializer.getInstance() && valueProtocolRegistration.serializer() == ObjectProtocolSerializer.getInstance()) { + if (keySerializer == IntSerializer.getInstance() && valueSerializer == ObjectProtocolSerializer.getInstance()) { builder.append(StringUtils.format("Map {} = {}.readIntPacketMap($1, {});", map, EnhanceUtils.byteBufUtils, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(valueProtocolRegistration.getProtocolId()))); return map; - } else if (keyBaseRegistration.serializer() == LongSerializer.getInstance() && valueProtocolRegistration.serializer() == ObjectProtocolSerializer.getInstance()) { + } else if (keySerializer == LongSerializer.getInstance() && valueSerializer == ObjectProtocolSerializer.getInstance()) { builder.append(StringUtils.format("Map {} = {}.readLongPacketMap($1, {});", map, EnhanceUtils.byteBufUtils, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(valueProtocolRegistration.getProtocolId()))); return map; + } else if (keySerializer == StringSerializer.getInstance() && valueSerializer == ObjectProtocolSerializer.getInstance()) { + builder.append(StringUtils.format("Map {} = {}.readStringPacketMap($1, {});", map, EnhanceUtils.byteBufUtils, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(valueProtocolRegistration.getProtocolId()))); + return map; } } } diff --git a/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyObjectA.java b/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyObjectA.java new file mode 100644 index 00000000..ac8937e6 --- /dev/null +++ b/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyObjectA.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.buffer.model; + +import com.zfoo.protocol.IPacket; + +import java.util.Map; +import java.util.Objects; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class MyObjectA implements IPacket { + + public static final transient short PROTOCOL_ID = 2; + + public int a; + + public Map b; + + public MyObjectB c; + + @Override + public short protocolId() { + return PROTOCOL_ID; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MyObjectA myObjectA = (MyObjectA) o; + return a == myObjectA.a && Objects.equals(b, myObjectA.b) && Objects.equals(c, myObjectA.c); + } + + @Override + public int hashCode() { + return Objects.hash(a, b, c); + } +} diff --git a/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyObjectB.java b/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyObjectB.java new file mode 100644 index 00000000..ab8bc30f --- /dev/null +++ b/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyObjectB.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.buffer.model; + +import com.zfoo.protocol.IPacket; + +import java.util.Objects; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class MyObjectB implements IPacket { + + public static final transient short PROTOCOL_ID = 3; + + public boolean a; + + @Override + public short protocolId() { + return PROTOCOL_ID; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MyObjectB myObjectB = (MyObjectB) o; + return a == myObjectB.a; + } + + @Override + public int hashCode() { + return Objects.hash(a); + } +} + diff --git a/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyPacket.java b/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyPacket.java new file mode 100644 index 00000000..9779c9c7 --- /dev/null +++ b/protocol/src/test/java/com/zfoo/protocol/buffer/model/MyPacket.java @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.buffer.model; + +import com.zfoo.protocol.IPacket; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class MyPacket implements IPacket { + + public static final transient short PROTOCOL_ID = 1; + + // 基础类型 + public byte base1; + public short base2; + public int base3; + public long base4; + public float base5; + public double base6; + public boolean base7; + public char base8; + + // 包装类型 + public Byte box1; + public Short box2; + public Integer box3; + public Long box4; + public Float box5; + public Double box6; + public Boolean box7; + public Character box8; + + // string + public String str; + public MyObjectA objectA; + + // 数组 + public byte[] array1; + public Byte[] array2; + public short[] array3; + public Short[] array4; + public int[] array5; + public Integer[] array6; + public long[] array7; + public Long[] array8; + public float[] array9; + public Float[] array10; + public double[] array11; + public Double[] array12; + public boolean[] array13; + public Boolean[] array14; + public char[] array15; + public Character[] array16; + public String[] array17; + public MyObjectA[] array18; + + // list + public List list1; + public List list2; + public List list3; + public List list4; + public List list5; + public List list6; + public List list7; + public List list8; + public List list9; + public List list10; + + + // set + public Set set1; + public Set set2; + public Set set3; + public Set set4; + public Set set5; + public Set set6; + public Set set7; + public Set set8; + public Set set9; + public Set set10; + + + // map + public Map map1; + public Map map2; + public Map map3; + public Map map4; + public Map map5; + public Map map6; + public Map map7; + public Map map8; + public Map map9; + public Map map10; + public Map map11; + public Map map12; + public Map map15; + public Map map16; + public Map map17; + public Map map18; + public Map map19; + public Map map20; + public Map map21; + public Map> map22; + + // mix + public List> listList1; + public List> listList2; + public List> listSet1; + public List> listSet2; + public List> listMap1; + public List> listMap2; + public List>> listListSet; + public List>> listListMap; + + public Set> setList1; + public Set> setList2; + public Set> setSet1; + public Set> setSet2; + public Set> setMap1; + public Set> setMap2; + public Set>> setListSet; + public Set>> setListMap; + + public Map> mapList1; + public Map> mapList2; + public Map, Integer> mapSet1; + public Map, MyObjectA> mapSet2; + public Map> mapMap1; + public Map> mapMap2; + public Map>> mapListSet; + public Map>> mapListMap; + + @Override + public short protocolId() { + return PROTOCOL_ID; + } + + +}