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')
|
rootProject.name = map.get('project.name')
|
||||||
|
|
||||||
|
include('utils')
|
||||||
include('protocol-new')
|
include('protocol-new')
|
||||||
//include('protocol')
|
//include('protocol')
|
||||||
//include('server')
|
//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 {
|
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