diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java index 27d7e385..abd7ac49 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java @@ -17,6 +17,7 @@ import com.zfoo.protocol.registration.EnhanceUtils; import com.zfoo.protocol.registration.field.ArrayField; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.ObjectProtocolField; +import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; import com.zfoo.protocol.util.StringUtils; import java.lang.reflect.Field; @@ -364,7 +365,7 @@ public class CutDownArraySerializer implements ICutDownSerializer { builder.append(StringUtils.format("buffer.writePacketArray({}, {})", objectStr, objectProtocolField.getProtocolId())).append(LS); break; case CSharp: - builder.append(StringUtils.format("buffer.WritePacketArray<{}>({}, {});", getArrayClassSimpleName(arrayField), objectStr, objectProtocolField.getProtocolId())).append(LS); + builder.append(StringUtils.format("buffer.WritePacketArray<{}>({}, {});", EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(objectProtocolField.getProtocolId()), objectStr, objectProtocolField.getProtocolId())).append(LS); break; default: flag = false; @@ -397,6 +398,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readBooleanArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadBooleanArray();", array)).append(LS); + break; default: flag = false; } @@ -412,6 +416,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readBooleanArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadBooleanArray();", array)).append(LS); + break; default: flag = false; } @@ -427,6 +434,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readByteArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadByteArray();", array)).append(LS); + break; default: flag = false; } @@ -442,6 +452,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readByteArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadByteArray();", array)).append(LS); + break; default: flag = false; } @@ -457,6 +470,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readShortArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadShortArray();", array)).append(LS); + break; default: flag = false; } @@ -472,6 +488,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readShortArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadShortArray();", array)).append(LS); + break; default: flag = false; } @@ -487,6 +506,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadIntArray();", array)).append(LS); + break; default: flag = false; } @@ -502,6 +524,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadIntArray();", array)).append(LS); + break; default: flag = false; } @@ -517,6 +542,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadLongArray();", array)).append(LS); + break; default: flag = false; } @@ -532,6 +560,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadLongArray();", array)).append(LS); + break; default: flag = false; } @@ -547,6 +578,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readFloatArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadFloatArray();", array)).append(LS); + break; default: flag = false; } @@ -562,6 +596,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readFloatArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadFloatArray();", array)).append(LS); + break; default: flag = false; } @@ -577,6 +614,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readDoubleArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadDoubleArray();", array)).append(LS); + break; default: flag = false; } @@ -592,6 +632,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readDoubleArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadDoubleArray();", array)).append(LS); + break; default: flag = false; } @@ -607,6 +650,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readStringArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadStringArray();", array)).append(LS); + break; default: flag = false; } @@ -622,6 +668,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readCharArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadCharArray();", array)).append(LS); + break; default: flag = false; } @@ -637,6 +686,9 @@ public class CutDownArraySerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readCharArray()", array)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadCharArray();", array)).append(LS); + break; default: flag = false; } @@ -653,7 +705,7 @@ public class CutDownArraySerializer implements ICutDownSerializer { builder.append(StringUtils.format("var {} = buffer.readPacketArray({})", array, objectProtocolField.getProtocolId())).append(LS); break; case CSharp: - builder.append(StringUtils.format("var {} = buffer.ReadPacketArray<{}>({});", array, getArrayClassSimpleName(arrayField), objectProtocolField.getProtocolId())).append(LS); + builder.append(StringUtils.format("var {} = buffer.ReadPacketArray<{}>({});", array, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(objectProtocolField.getProtocolId()), objectProtocolField.getProtocolId())).append(LS); break; default: flag = false; @@ -676,8 +728,4 @@ public class CutDownArraySerializer implements ICutDownSerializer { return arrayField.getField().getType().getComponentType().getCanonicalName().replaceFirst("java.lang.", StringUtils.EMPTY); } - public String getArrayClassSimpleName(ArrayField arrayField) { - return arrayField.getField().getType().getComponentType().getSimpleName(); - } - } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownListSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownListSerializer.java index d06fbf8e..2110a539 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownListSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownListSerializer.java @@ -17,10 +17,10 @@ import com.zfoo.protocol.registration.EnhanceUtils; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.ListField; import com.zfoo.protocol.registration.field.ObjectProtocolField; +import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; import com.zfoo.protocol.util.StringUtils; import java.lang.reflect.Field; -import java.lang.reflect.ParameterizedType; import static com.zfoo.protocol.util.FileUtils.LS; @@ -204,7 +204,7 @@ public class CutDownListSerializer implements ICutDownSerializer { builder.append(StringUtils.format("buffer.writePacketArray({}, {})", objectStr, objectProtocolField.getProtocolId())).append(LS); break; case CSharp: - builder.append(StringUtils.format("buffer.WritePacketList<{}>({}, {});", getListClassSimpleName(listField), objectStr, objectProtocolField.getProtocolId())).append(LS); + builder.append(StringUtils.format("buffer.WritePacketList<>({}, {});", objectStr, objectProtocolField.getProtocolId())).append(LS); break; default: flag = false; @@ -382,7 +382,7 @@ public class CutDownListSerializer implements ICutDownSerializer { builder.append(StringUtils.format("var {} = buffer.readPacketArray({})", list, objectProtocolField.getProtocolId())).append(LS); break; case CSharp: - builder.append(StringUtils.format("var {} = buffer.ReadPacketList<{}>({});", list, getListClassSimpleName(listField), objectProtocolField.getProtocolId())).append(LS); + builder.append(StringUtils.format("var {} = buffer.ReadPacketList<{}>({});", list, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(objectProtocolField.getProtocolId()), objectProtocolField.getProtocolId())).append(LS); break; default: flag = false; @@ -401,8 +401,4 @@ public class CutDownListSerializer implements ICutDownSerializer { } } - public String getListClassSimpleName(ListField listField) { - return ((Class) ((ParameterizedType) listField.getType()).getActualTypeArguments()[0]).getSimpleName(); - } - } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownMapSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownMapSerializer.java index dee91696..1512fbbb 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownMapSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownMapSerializer.java @@ -18,6 +18,7 @@ import com.zfoo.protocol.registration.field.BaseField; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.MapField; import com.zfoo.protocol.registration.field.ObjectProtocolField; +import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; import com.zfoo.protocol.serializer.reflect.IntSerializer; import com.zfoo.protocol.serializer.reflect.LongSerializer; import com.zfoo.protocol.serializer.reflect.ObjectProtocolSerializer; @@ -62,6 +63,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeIntIntMap({})", objectStr)).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteIntIntMap({});", objectStr)).append(LS); + return true; } } else if (valueSerializer == LongSerializer.INSTANCE) { switch (language) { @@ -74,6 +78,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeIntLongMap({})", objectStr)).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteIntLongMap({});", objectStr)).append(LS); + return true; } } else if (valueSerializer == StringSerializer.INSTANCE) { switch (language) { @@ -86,6 +93,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeIntStringMap({})", objectStr)).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteIntStringMap({});", objectStr)).append(LS); + return true; } } else if (valueSerializer == ObjectProtocolSerializer.INSTANCE) { switch (language) { @@ -98,6 +108,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeIntPacketMap({}, {})", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteIntPacketMap<>({}, {});", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); + return true; } } } else if (keySerializer == LongSerializer.INSTANCE) { @@ -112,6 +125,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeLongIntMap({})", objectStr)).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteLongIntMap({});", objectStr)).append(LS); + return true; } } else if (valueSerializer == LongSerializer.INSTANCE) { switch (language) { @@ -124,6 +140,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeLongLongMap({}, {})", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteLongLongMap({}, {});", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); + return true; } } else if (valueSerializer == StringSerializer.INSTANCE) { switch (language) { @@ -136,6 +155,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeLongStringMap({})", objectStr)).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteLongStringMap({});", objectStr)).append(LS); + return true; } } else if (valueSerializer == ObjectProtocolSerializer.INSTANCE) { switch (language) { @@ -148,6 +170,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeLongPacketMap({}, {})", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteLongPacketMap<>({}, {});", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); + return true; } } } else if (keySerializer == StringSerializer.INSTANCE) { @@ -162,6 +187,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeStringIntMap({})", objectStr)).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteStringIntMap({});", objectStr)).append(LS); + return true; } } else if (valueSerializer == LongSerializer.INSTANCE) { switch (language) { @@ -174,6 +202,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeStringLongMap({})", objectStr)).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteStringLongMap({});", objectStr)).append(LS); + return true; } } else if (valueSerializer == StringSerializer.INSTANCE) { switch (language) { @@ -186,6 +217,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeStringStringMap({})", objectStr)).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteStringStringMap({});", objectStr)).append(LS); + return true; } } else if (valueSerializer == ObjectProtocolSerializer.INSTANCE) { switch (language) { @@ -198,6 +232,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeStringPacketMap({}, {})", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); return true; + case CSharp: + builder.append(StringUtils.format("buffer.WriteStringPacketMap<>({}, {});", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); + return true; } } } @@ -228,6 +265,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntIntMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadIntIntMap();", map)).append(LS); + return map; } } else if (valueSerializer == LongSerializer.INSTANCE) { switch (language) { @@ -240,6 +280,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntLongMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadIntLongMap();", map)).append(LS); + return map; } } else if (valueSerializer == StringSerializer.INSTANCE) { switch (language) { @@ -252,8 +295,12 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntStringMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadIntStringMap();", map)).append(LS); + return map; } } else if (valueSerializer == ObjectProtocolSerializer.INSTANCE) { + var protocolId = ((ObjectProtocolField) valueRegistration).getProtocolId(); switch (language) { case Enhance: builder.append(StringUtils.format("Map {} = {}.readIntPacketMap($1, {});", map, EnhanceUtils.byteBufUtils, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(((ObjectProtocolField) valueRegistration).getProtocolId()))); @@ -264,6 +311,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntPacketMap({})", map, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadIntPacket<{}>Map({});", map, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS); + return map; } } } else if (keySerializer == LongSerializer.INSTANCE) { @@ -278,6 +328,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongIntMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadLongIntMap();", map)).append(LS); + return map; } } else if (valueSerializer == LongSerializer.INSTANCE) { switch (language) { @@ -290,6 +343,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongLongMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadLongLongMap();", map)).append(LS); + return map; } } else if (valueSerializer == StringSerializer.INSTANCE) { switch (language) { @@ -302,8 +358,12 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongStringMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadLongStringMap();", map)).append(LS); + return map; } } else if (valueSerializer == ObjectProtocolSerializer.INSTANCE) { + var protocolId = ((ObjectProtocolField) valueRegistration).getProtocolId(); switch (language) { case Enhance: builder.append(StringUtils.format("Map {} = {}.readLongPacketMap($1, {});", map, EnhanceUtils.byteBufUtils, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(((ObjectProtocolField) valueRegistration).getProtocolId()))); @@ -314,6 +374,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongPacketMap({})", map, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadLongPacketMap<{}>({});", map, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS); + return map; } } } else if (keySerializer == StringSerializer.INSTANCE) { @@ -328,6 +391,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readStringIntMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadStringIntMap();", map)).append(LS); + return map; } } else if (valueSerializer == LongSerializer.INSTANCE) { switch (language) { @@ -340,6 +406,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readStringLongMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadStringLongMap();", map)).append(LS); + return map; } } else if (valueSerializer == StringSerializer.INSTANCE) { switch (language) { @@ -352,8 +421,12 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readStringStringMap()", map)).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadStringStringMap();", map)).append(LS); + return map; } } else if (valueSerializer == ObjectProtocolSerializer.INSTANCE) { + var protocolId = ((ObjectProtocolField) valueRegistration).getProtocolId(); switch (language) { case Enhance: builder.append(StringUtils.format("Map {} = {}.readStringPacketMap($1, {});", map, EnhanceUtils.byteBufUtils, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(((ObjectProtocolField) valueRegistration).getProtocolId()))); @@ -364,6 +437,9 @@ public class CutDownMapSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readStringPacketMap({})", map, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS); return map; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadStringPacketMap<{}>({});", map, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS); + return map; } } } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownSetSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownSetSerializer.java index a90b4d19..a0b70a7c 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownSetSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownSetSerializer.java @@ -17,6 +17,7 @@ import com.zfoo.protocol.registration.EnhanceUtils; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.ObjectProtocolField; import com.zfoo.protocol.registration.field.SetField; +import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; import com.zfoo.protocol.util.StringUtils; import java.lang.reflect.Field; @@ -53,6 +54,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeBooleanArray({})", objectStr)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WriteBooleanSet({});", objectStr)).append(LS); + break; default: flag = false; } @@ -68,6 +72,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeByteArray({})", objectStr)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WriteByteSet({});", objectStr)).append(LS); + break; default: flag = false; } @@ -83,6 +90,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeShortArray({})", objectStr)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WriteShortSet({});", objectStr)).append(LS); + break; default: flag = false; } @@ -98,6 +108,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeIntArray({})", objectStr)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WriteIntSet({});", objectStr)).append(LS); + break; default: flag = false; } @@ -113,6 +126,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeLongArray({})", objectStr)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WriteLongSet({});", objectStr)).append(LS); + break; default: flag = false; } @@ -128,6 +144,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeFloatArray({})", objectStr)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WriteFloatSet({});", objectStr)).append(LS); + break; default: flag = false; } @@ -143,6 +162,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeDoubleArray({})", objectStr)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WriteDoubleSet({});", objectStr)).append(LS); + break; default: flag = false; } @@ -158,6 +180,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writeStringArray({})", objectStr)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WriteStringSet({});", objectStr)).append(LS); + break; default: flag = false; } @@ -176,6 +201,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("buffer.writePacketArray({}, {})", objectStr, objectProtocolField.getProtocolId())).append(LS); break; + case CSharp: + builder.append(StringUtils.format("buffer.WritePacketSet<>({}, {});", objectStr, objectProtocolField.getProtocolId())).append(LS); + break; default: flag = false; } @@ -205,6 +233,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readBooleanArray()", set)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadBooleanSet();", set)).append(LS); + break; default: flag = false; } @@ -220,6 +251,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readByteArray()", set)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadByteSet();", set)).append(LS); + break; default: flag = false; } @@ -235,6 +269,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readShortArray()", set)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadShortSet();", set)).append(LS); + break; default: flag = false; } @@ -250,6 +287,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readIntArray()", set)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadIntSet();", set)).append(LS); + break; default: flag = false; } @@ -265,6 +305,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readLongArray()", set)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadLongSet();", set)).append(LS); + break; default: flag = false; } @@ -280,6 +323,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readFloatArray()", set)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadFloatSet();", set)).append(LS); + break; default: flag = false; } @@ -295,6 +341,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readDoubleArray()", set)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadDoubleSet();", set)).append(LS); + break; default: flag = false; } @@ -310,6 +359,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readStringArray()", set)).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadStringSet();", set)).append(LS); + break; default: flag = false; } @@ -327,6 +379,9 @@ public class CutDownSetSerializer implements ICutDownSerializer { case GdScript: builder.append(StringUtils.format("var {} = buffer.readPacketArray({})", set, objectProtocolField.getProtocolId())).append(LS); break; + case CSharp: + builder.append(StringUtils.format("var {} = buffer.ReadPacketSet<{}>({});", set, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(objectProtocolField.getProtocolId()), objectProtocolField.getProtocolId())).append(LS); + break; default: flag = false; } @@ -343,4 +398,5 @@ public class CutDownSetSerializer implements ICutDownSerializer { return null; } } + } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/cs/CsMapSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/cs/CsMapSerializer.java index 158cf8a9..57c66a81 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/cs/CsMapSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/cs/CsMapSerializer.java @@ -16,6 +16,8 @@ package com.zfoo.protocol.serializer.cs; import com.zfoo.protocol.generate.GenerateProtocolFile; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.MapField; +import com.zfoo.protocol.serializer.CodeLanguage; +import com.zfoo.protocol.serializer.CutDownMapSerializer; import com.zfoo.protocol.util.StringUtils; import java.lang.reflect.Field; @@ -30,9 +32,13 @@ public class CsMapSerializer implements ICsSerializer { @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + if (CutDownMapSerializer.getInstance().writeObject(builder, objectStr, field, fieldRegistration, CodeLanguage.CSharp)) { + return; + } + MapField mapField = (MapField) fieldRegistration; - GenerateProtocolFile.addTab(builder, deep); builder.append(StringUtils.format("if (({} == null) || ({}.Count == 0))", objectStr, objectStr)).append(LS); GenerateProtocolFile.addTab(builder, deep); builder.append("{").append(LS); @@ -80,12 +86,17 @@ public class CsMapSerializer implements ICsSerializer { @Override public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + var cutDown = CutDownMapSerializer.getInstance().readObject(builder, field, fieldRegistration, CodeLanguage.CSharp); + if (cutDown != null) { + return cutDown; + } + MapField mapField = (MapField) fieldRegistration; String result = "result" + GenerateProtocolFile.index.getAndIncrement(); var typeName = GenerateCsUtils.toCsClassName(mapField.getType().toString()); - GenerateProtocolFile.addTab(builder, deep); String size = "size" + GenerateProtocolFile.index.getAndIncrement(); builder.append(StringUtils.format("int {} = buffer.ReadInt();", size)).append(LS); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/cs/CsSetSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/cs/CsSetSerializer.java index cf612e24..ff446066 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/cs/CsSetSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/cs/CsSetSerializer.java @@ -16,6 +16,8 @@ package com.zfoo.protocol.serializer.cs; import com.zfoo.protocol.generate.GenerateProtocolFile; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.SetField; +import com.zfoo.protocol.serializer.CodeLanguage; +import com.zfoo.protocol.serializer.CutDownSetSerializer; import com.zfoo.protocol.util.StringUtils; import java.lang.reflect.Field; @@ -30,9 +32,13 @@ public class CsSetSerializer implements ICsSerializer { @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + if (CutDownSetSerializer.getInstance().writeObject(builder, objectStr, field, fieldRegistration, CodeLanguage.CSharp)) { + return; + } + SetField setField = (SetField) fieldRegistration; - GenerateProtocolFile.addTab(builder, deep); builder.append(StringUtils.format("if ({} == null)", objectStr)).append(LS); GenerateProtocolFile.addTab(builder, deep); builder.append("{").append(LS); @@ -66,6 +72,12 @@ public class CsSetSerializer implements ICsSerializer { @Override public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + var cutDown = CutDownSetSerializer.getInstance().readObject(builder, field, fieldRegistration, CodeLanguage.CSharp); + if (cutDown != null) { + return cutDown; + } + SetField setField = (SetField) fieldRegistration; var result = "result" + GenerateProtocolFile.index.getAndIncrement(); @@ -73,7 +85,6 @@ public class CsSetSerializer implements ICsSerializer { var i = "index" + GenerateProtocolFile.index.getAndIncrement(); var size = "size" + GenerateProtocolFile.index.getAndIncrement(); - GenerateProtocolFile.addTab(builder, deep); builder.append(StringUtils.format("int {} = buffer.ReadInt();", size)).append(LS); GenerateProtocolFile.addTab(builder, deep); // unity里不支持HashSet的初始化大小 diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceObjectProtocolSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceObjectProtocolSerializer.java index 4971ab63..99bc82dc 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceObjectProtocolSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceObjectProtocolSerializer.java @@ -45,7 +45,11 @@ public class EnhanceObjectProtocolSerializer implements IEnhanceSerializer { return result; } - private String getProtocolClassCanonicalName(short protocolId) { + public static String getProtocolClassSimpleName(short protocolId) { + return ProtocolManager.getProtocol(protocolId).protocolConstructor().getDeclaringClass().getSimpleName(); + } + + public static String getProtocolClassCanonicalName(short protocolId) { return ProtocolManager.getProtocol(protocolId).protocolConstructor().getDeclaringClass().getCanonicalName(); } diff --git a/protocol/src/main/resources/cs/Buffer/ByteBuffer.cs b/protocol/src/main/resources/cs/Buffer/ByteBuffer.cs index 40b99921..bc64ea62 100644 --- a/protocol/src/main/resources/cs/Buffer/ByteBuffer.cs +++ b/protocol/src/main/resources/cs/Buffer/ByteBuffer.cs @@ -1188,5 +1188,682 @@ namespace CsProtocol.Buffer } return list; } + + public void WriteBooleanSet(HashSet set) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(set.Count); + foreach (var element in set) + { + WriteBool(element); + } + } + } + + public HashSet ReadBooleanSet() + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + set.Add(ReadBool()); + } + } + return set; + } + + public void WriteShortSet(HashSet set) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(set.Count); + foreach (var element in set) + { + WriteShort(element); + } + } + } + + public HashSet ReadShortSet() + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + set.Add(ReadShort()); + } + } + return set; + } + + public void WriteIntSet(HashSet set) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(set.Count); + foreach (var element in set) + { + WriteInt(element); + } + } + } + + public HashSet ReadIntSet() + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + set.Add(ReadInt()); + } + } + return set; + } + + public void WriteLongSet(HashSet set) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(set.Count); + foreach (var element in set) + { + WriteLong(element); + } + } + } + + public HashSet ReadLongSet() + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + set.Add(ReadLong()); + } + } + return set; + } + + public void WriteFloatSet(HashSet set) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(set.Count); + foreach (var element in set) + { + WriteFloat(element); + } + } + } + + public HashSet ReadFloatSet() + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + set.Add(ReadFloat()); + } + } + return set; + } + + public void WriteDoubleSet(HashSet set) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(set.Count); + foreach (var element in set) + { + WriteDouble(element); + } + } + } + + public HashSet ReadDoubleSet() + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + set.Add(ReadDouble()); + } + } + return set; + } + + public void WriteCharSet(HashSet set) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(set.Count); + foreach (var element in set) + { + WriteChar(element); + } + } + } + + public HashSet ReadCharSet() + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + set.Add(ReadChar()); + } + } + return set; + } + + public void WriteStringSet(HashSet set) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(set.Count); + foreach (var element in set) + { + WriteString(element); + } + } + } + + public HashSet ReadStringSet() + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + set.Add(ReadString()); + } + } + return set; + } + + public void WritePacketSet(HashSet set, short protocolId) + { + if ((set == null) || (set.Count == 0)) + { + WriteInt(0); + } + else + { + IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); + WriteInt(set.Count); + foreach (var element in set) + { + protocolRegistration.Write(this, (IPacket) element); + } + } + } + + public HashSet ReadPacketSet(short protocolId) + { + int size = ReadInt(); + HashSet set = new HashSet(size); + if (size > 0) + { + IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); + for (int index = 0; index < size; index++) + { + set.Add((T) protocolRegistration.Read(this)); + } + } + return set; + } + + public void WriteIntIntMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteInt(element.Key); + WriteInt(element.Value); + } + } + } + + public Dictionary ReadIntIntMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadInt(); + var value = ReadInt(); + map[key] = value; + } + } + return map; + } + + public void WriteIntLongMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteInt(element.Key); + WriteLong(element.Value); + } + } + } + + public Dictionary ReadIntLongMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadInt(); + var value = ReadLong(); + map[key] = value; + } + } + return map; + } + + public void WriteIntStringMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteInt(element.Key); + WriteString(element.Value); + } + } + } + + public Dictionary ReadIntStringMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadInt(); + var value = ReadString(); + map[key] = value; + } + } + return map; + } + + + public void WriteIntPacketMap(Dictionary map, short protocolId) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); + WriteInt(map.Count); + foreach (var element in map) + { + WriteInt(element.Key); + protocolRegistration.Write(this, (IPacket) element.Value); + } + } + } + + public Dictionary ReadIntPacketMap(short protocolId) + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); + for (int index = 0; index < size; index++) + { + var key = ReadInt(); + var value = (T) protocolRegistration.Read(this); + map[key] = value; + } + } + return map; + } + + public void WriteLongIntMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteLong(element.Key); + WriteInt(element.Value); + } + } + } + + public Dictionary ReadLongIntMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadLong(); + var value = ReadInt(); + map[key] = value; + } + } + return map; + } + + public void WriteLongLongMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteLong(element.Key); + WriteLong(element.Value); + } + } + } + + public Dictionary ReadLongLongMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadLong(); + var value = ReadLong(); + map[key] = value; + } + } + return map; + } + + public void WriteLongStringMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteLong(element.Key); + WriteString(element.Value); + } + } + } + + public Dictionary ReadLongStringMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadLong(); + var value = ReadString(); + map[key] = value; + } + } + return map; + } + + + public void WriteLongPacketMap(Dictionary map, short protocolId) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); + WriteInt(map.Count); + foreach (var element in map) + { + WriteLong(element.Key); + protocolRegistration.Write(this, (IPacket) element.Value); + } + } + } + + public Dictionary ReadLongPacketMap(short protocolId) + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); + for (int index = 0; index < size; index++) + { + var key = ReadLong(); + var value = (T) protocolRegistration.Read(this); + map[key] = value; + } + } + return map; + } + + public void WriteStringIntMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteString(element.Key); + WriteInt(element.Value); + } + } + } + + public Dictionary ReadStringIntMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadString(); + var value = ReadInt(); + map[key] = value; + } + } + return map; + } + + public void WriteStringLongMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteString(element.Key); + WriteLong(element.Value); + } + } + } + + public Dictionary ReadStringLongMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadString(); + var value = ReadLong(); + map[key] = value; + } + } + return map; + } + + public void WriteStringStringMap(Dictionary map) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + WriteInt(map.Count); + foreach (var element in map) + { + WriteString(element.Key); + WriteString(element.Value); + } + } + } + + public Dictionary ReadStringStringMap() + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + for (int index = 0; index < size; index++) + { + var key = ReadString(); + var value = ReadString(); + map[key] = value; + } + } + return map; + } + + + public void WriteStringPacketMap(Dictionary map, short protocolId) + { + if ((map == null) || (map.Count == 0)) + { + WriteInt(0); + } + else + { + IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); + WriteInt(map.Count); + foreach (var element in map) + { + WriteString(element.Key); + protocolRegistration.Write(this, (IPacket) element.Value); + } + } + } + + public Dictionary ReadStringPacketMap(short protocolId) + { + int size = ReadInt(); + Dictionary map = new Dictionary(size); + if (size > 0) + { + IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); + for (int index = 0; index < size; index++) + { + var key = ReadString(); + var value = (T) protocolRegistration.Read(this); + map[key] = value; + } + } + return map; + } } }