package com.cwa.client.message;
import com.cwa.gamecore.message.GameMessage;
import com.cwa.gamecore.message.IMessageFactory;
import java.util.HashMap;
import java.util.Map;
public class ClientMessageFactory implements IMessageFactory {
// 单例
private static final ClientMessageFactory INSTANCE = new ClientMessageFactory();
public static ClientMessageFactory getInstance() {
return INSTANCE;
}
private final Map<Integer, Class<? extends GameMessage>> msgClassMap;
private ClientMessageFactory() {
msgClassMap = new HashMap<Integer, Class<? extends GameMessage>>();
}
public void register(GameMessage msg) {
msgClassMap.put(msg.getCommandId(), msg.getClass());
}
@Override
public GameMessage getMessage(int cmdId) {
Class<? extends GameMessage> msgClass = msgClassMap.get(cmdId);
if (msgClass == null) {
throw new RuntimeException("Unknown command ID: " + cmdId);
}
try {
return msgClass.newInstance();
} catch (Exception e) {
throw new RuntimeException("Can not instantiate " + msgClass, e);
}
}
}