class ProtocolServerEngineBase extends PluginBase implements ProtocolServerEngine {

    protected ProtocolServer protocolServer;

    public ProtocolServerEngineBase(String name) {
        super(name);
    }

    protected abstract ProtocolServer createProtocolServer();

    @Override
    public ProtocolServer getProtocolServer() {<FILL_FUNCTION_BODY>}

    @Override
    public void init(Map<String, String> config) {
        super.init(config);
        getProtocolServer().init(config);
    }

    @Override
    public void close() {
        stop();
        super.close();
    }

    @Override
    public void start() {
        getProtocolServer().start();
        super.start();
    }

    @Override
    public void stop() {
        getProtocolServer().stop();
        super.stop();
    }

    @Override
    public Class<? extends Plugin> getPluginClass() {
        return ProtocolServerEngine.class;
    }
}

        if (protocolServer == null)
            protocolServer = createProtocolServer();
        return protocolServer;
    
<methods>public void <init>() ,public void <init>(java.lang.String) ,public synchronized void close() ,public Map<java.lang.String,java.lang.String> getConfig() ,public java.lang.String getName() ,public Class<? extends com.lealone.db.Plugin> getPluginClass() ,public com.lealone.db.Plugin.State getState() ,public synchronized void init(Map<java.lang.String,java.lang.String>) ,public boolean isInited() ,public boolean isStarted() ,public boolean isStopped() ,public void setName(java.lang.String) ,public void start() ,public void stop() <variables>protected Map<java.lang.String,java.lang.String> config,protected java.lang.String name,protected com.lealone.db.Plugin.State state