package ${packageName}; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.google.protobuf.CodedInputStream; import com.google.protobuf.GeneratedMessageV3; import com.google.protobuf.Message; public class MsgIds { <#list messageInfos as message> public static final int ${message.name} = ${message.id?c}; //消息CLASS与消息ID的对应关系<消息class, 消息ID> private static final Map, Integer> classToId = new HashMap<>(); //消息ID与消息CLASS的对应关系<消息ID, 消息class> private static final Map> idToClass = new HashMap<>(); static { //初始化消息CLASS与消息ID的对应关系 initClassToId(); //初始化消息ID与消息CLASS的对应关系 initIdToClass(); } /** * 获取消息ID * @param clazz * @return */ public static int getIdByClass(Class clazz) { return classToId.get(clazz); } /** * 获取消息CLASS * @param clazz * @return */ @SuppressWarnings("unchecked") public static T getClassById(int msgId) { return (T) idToClass.get(msgId); } /** * 初始化消息CLASS与消息ID的对应关系 */ private static void initClassToId() { <#list messageInfos as message> classToId.put(${message.className}.${message.name}.class, ${message.name}); } /** * 初始化消息ID与消息CLASS的对应关系 */ private static void initIdToClass() { <#list messageInfos as message> idToClass.put(${message.name},${message.className}.${message.name}.class); } /** * 根据消息id解析消息 */ public static GeneratedMessageV3 parseFrom(int msgId, CodedInputStream s) throws IOException{ switch(msgId){ <#list messageInfos as message> case ${message.name}: return ${message.className}.${message.name}.parseFrom(s); } return null; } }