Archived
0

перенос pool фабрик в модуль utils

This commit is contained in:
2021-07-09 12:26:15 +03:00
parent a348689b37
commit 41acf32cb8
14 changed files with 16 additions and 13 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -1,7 +1,7 @@
package mc.protocol.packets;
import mc.protocol.buffer.NetByteBuf;
import mc.protocol.pool.Passivable;
import mc.utils.pool.Passivable;
/**
* Пакеты отправляемые клиентом.

View File

@@ -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;
/**

View File

@@ -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);
}

View File

@@ -1,8 +0,0 @@
package mc.protocol.pool;
public interface ObjectPool<T> {
T borrowObject();
void returnObject(T object);
}

View File

@@ -1,6 +0,0 @@
package mc.protocol.pool;
public interface Passivable {
void passivate();
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -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 {

View File

@@ -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);
}
}

View File

@@ -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);
}
}