package com.cwa.util.automsg.codec; import com.cwa.gamecore.io.GameInput; import com.cwa.gamecore.io.GameOutput; import java.util.ArrayList; import java.util.List; /** * 利用Java反射实现对象编码、解码。 */ public class ReflectiveCodec { private final List<ReflectiveField> requestFields; private final List<ReflectiveField> responseFields; public ReflectiveCodec() { requestFields = new ArrayList<ReflectiveField>(); responseFields = new ArrayList<ReflectiveField>(); } public void addRequestField(ReflectiveField field) { requestFields.add(field); } public void addResponseField(ReflectiveField field) { responseFields.add(field); } // 解码对象 public void decodeBody(GameInput in, Object msg) { for (ReflectiveField field : requestFields) { if (field.getDependency() != null) { if (field.getDependency().getBoolean(msg) == false) { continue; } } field.get(in, msg); } } // 编码对象 public void encodeBody(GameOutput out, Object msg) { for (ReflectiveField field : responseFields) { if (field.getDependency() != null) { if (field.getDependency().getBoolean(msg) == false) { continue; } } field.put(out, msg); } } }