перенос pool фабрик в модуль utils
This commit is contained in:
@@ -3,7 +3,6 @@ apply from: rootDir.toPath().resolve('logic.gradle').toFile()
|
||||
dependencies {
|
||||
api project(':utils')
|
||||
|
||||
implementation libs.objpool
|
||||
implementation libs.netty.transport
|
||||
implementation libs.netty.codec
|
||||
implementation libs.json
|
||||
|
||||
@@ -3,13 +3,12 @@ package mc.protocol.buffer;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import lombok.experimental.Delegate;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import mc.protocol.model.text.Text;
|
||||
import mc.protocol.model.text.TextSerializer;
|
||||
import mc.protocol.pool.Passivable;
|
||||
import mc.utils.pool.Passivable;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.UUID;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package mc.protocol.packets;
|
||||
|
||||
import mc.protocol.buffer.NetByteBuf;
|
||||
import mc.protocol.pool.Passivable;
|
||||
import mc.utils.pool.Passivable;
|
||||
|
||||
/**
|
||||
* Пакеты отправляемые клиентом.
|
||||
|
||||
@@ -4,7 +4,7 @@ import io.netty.buffer.Unpooled;
|
||||
import lombok.Data;
|
||||
import mc.protocol.buffer.NetByteBuf;
|
||||
import mc.protocol.packets.ServerSidePacket;
|
||||
import mc.protocol.pool.ObjectPool;
|
||||
import mc.utils.pool.ObjectPool;
|
||||
import mc.protocol.pool.ProtocolObjectPool;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
public interface MultiObjectPool<T> {
|
||||
|
||||
<P extends T> P borrowObject(Class<P> clazz);
|
||||
|
||||
<P extends T> void returnObject(P object);
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
public interface ObjectPool<T> {
|
||||
|
||||
T borrowObject();
|
||||
|
||||
void returnObject(T object);
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
public interface Passivable {
|
||||
|
||||
void passivate();
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class PassivableMultiObjectPool<T extends Passivable> implements MultiObjectPool<T> {
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private final Map<Class, ObjectPool> mapPool = new HashMap<>();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <P extends T> P borrowObject(Class<P> clazz) {
|
||||
return (P) pool(clazz).borrowObject();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <P extends T> void returnObject(P object) {
|
||||
pool(object.getClass()).returnObject(object);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked", "RedundantSuppression" })
|
||||
private ObjectPool pool(Class clazz) {
|
||||
return mapPool.computeIfAbsent(clazz, PassivableObjectPool::new);
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import org.apache.commons.pool2.impl.GenericObjectPool;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class PassivableObjectPool<T extends Passivable> implements ObjectPool<T> {
|
||||
|
||||
private final org.apache.commons.pool2.ObjectPool<T> apacheObjectPool;
|
||||
|
||||
public PassivableObjectPool(@Nonnull Class<T> clazz) {
|
||||
apacheObjectPool = new GenericObjectPool<>(new PassivablePooledObjectFactory<>(clazz));
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public T borrowObject() {
|
||||
return apacheObjectPool.borrowObject();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void returnObject(T object) {
|
||||
apacheObjectPool.returnObject(object);
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
import org.apache.commons.pool2.PooledObject;
|
||||
|
||||
class PassivablePooledObjectFactory<T extends Passivable> extends SimplePooledObjectFactory<T> {
|
||||
|
||||
PassivablePooledObjectFactory(Class<T> clazz) {
|
||||
super(clazz);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void passivateObject(PooledObject<T> pooledObject) {
|
||||
pooledObject.getObject().passivate();
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import mc.protocol.buffer.NetByteBuf;
|
||||
import mc.protocol.model.Location;
|
||||
import mc.protocol.model.Look;
|
||||
import mc.protocol.packets.ClientSidePacket;
|
||||
import mc.utils.pool.*;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public final class ProtocolObjectPool {
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import org.apache.commons.pool2.impl.GenericObjectPool;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class SimpleObjectPool<T> implements ObjectPool<T> {
|
||||
|
||||
private final org.apache.commons.pool2.ObjectPool<T> apacheObjectPool;
|
||||
|
||||
public SimpleObjectPool(@Nonnull Class<T> clazz) {
|
||||
apacheObjectPool = new GenericObjectPool<>(new SimplePooledObjectFactory<>(clazz));
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public T borrowObject() {
|
||||
return apacheObjectPool.borrowObject();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public void returnObject(T object) {
|
||||
apacheObjectPool.returnObject(object);
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package mc.protocol.pool;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.pool2.BasePooledObjectFactory;
|
||||
import org.apache.commons.pool2.PooledObject;
|
||||
import org.apache.commons.pool2.impl.DefaultPooledObject;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
class SimplePooledObjectFactory<T> extends BasePooledObjectFactory<T> {
|
||||
|
||||
private final Class<T> clazz;
|
||||
|
||||
@Override
|
||||
public T create() throws Exception {
|
||||
return clazz.getDeclaredConstructor().newInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PooledObject<T> wrap(T obj) {
|
||||
return new DefaultPooledObject<>(obj);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user