refactoring: add mc.utils.pool
This commit is contained in:
@@ -10,6 +10,7 @@ rootProject.projectDir.toPath().resolve('gradle.properties').readLines().forEach
|
||||
|
||||
rootProject.name = map.get('project.name')
|
||||
|
||||
include('utils')
|
||||
include('protocol-new')
|
||||
//include('protocol')
|
||||
//include('server')
|
||||
5
utils/build.gradle
Normal file
5
utils/build.gradle
Normal file
@@ -0,0 +1,5 @@
|
||||
apply from: rootDir.toPath().resolve('logic.gradle').toFile()
|
||||
|
||||
dependencies {
|
||||
implementation libs.objpool
|
||||
}
|
||||
2
utils/gradle.properties
Normal file
2
utils/gradle.properties
Normal file
@@ -0,0 +1,2 @@
|
||||
# suppress inspection "UnusedProperty" for whole file
|
||||
module.name=utils
|
||||
@@ -1,4 +1,4 @@
|
||||
package mc.protocol.pool;
|
||||
package mc.utils.pool;
|
||||
|
||||
public interface Passivable {
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package mc.utils.pool;
|
||||
|
||||
import org.apache.commons.pool2.BasePooledObjectFactory;
|
||||
import org.apache.commons.pool2.PooledObject;
|
||||
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
||||
|
||||
public abstract class PassivablePooledObjectFactory<T extends Passivable> extends BasePooledObjectFactory<T> {
|
||||
|
||||
@Override
|
||||
public PooledObject<T> wrap(T obj) {
|
||||
return new DefaultPooledObject<>(obj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void passivateObject(PooledObject<T> pooledObject) {
|
||||
pooledObject.getObject().passivate();
|
||||
}
|
||||
}
|
||||
30
utils/src/main/java/mc/utils/pool/WideClassObjectPool.java
Normal file
30
utils/src/main/java/mc/utils/pool/WideClassObjectPool.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package mc.utils.pool;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.pool2.ObjectPool;
|
||||
import org.apache.commons.pool2.impl.GenericObjectPool;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
public class WideClassObjectPool {
|
||||
|
||||
private final Map<Class, ObjectPool> mapPool = new HashMap<>();
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public <R extends Passivable> ObjectPool<R> getPool(Class<R> clazz) {
|
||||
return mapPool.computeIfAbsent(clazz, tClass -> new GenericObjectPool<R>(new WideClassFactory(clazz)));
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor
|
||||
private static class WideClassFactory<R extends Passivable> extends PassivablePooledObjectFactory<R> {
|
||||
|
||||
private final Class<R> clazz;
|
||||
|
||||
@Override
|
||||
public R create() throws Exception {
|
||||
return clazz.getDeclaredConstructor().newInstance();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user