PlayerManager
This commit is contained in:
@@ -2,12 +2,16 @@ package mc.protocol;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
import mc.protocol.api.ConnectionContext;
|
||||
import mc.protocol.packets.ServerSidePacket;
|
||||
import mc.protocol.pool.Passivable;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@EqualsAndHashCode
|
||||
public class NettyConnectionContext implements ConnectionContext, Passivable {
|
||||
|
||||
@@ -15,6 +19,14 @@ public class NettyConnectionContext implements ConnectionContext, Passivable {
|
||||
@Setter
|
||||
private ChannelHandlerContext ctx;
|
||||
|
||||
/**
|
||||
* @deprecated костыль
|
||||
*/
|
||||
@Deprecated
|
||||
@Getter
|
||||
@Setter
|
||||
private boolean usedContext;
|
||||
|
||||
@Override
|
||||
public State getState() {
|
||||
return ctx.channel().attr(NetworkAttributes.STATE).get();
|
||||
@@ -25,6 +37,27 @@ public class NettyConnectionContext implements ConnectionContext, Passivable {
|
||||
ctx.channel().attr(NetworkAttributes.STATE).set(state);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated костыль
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public <T> void setCustomProperty(String key, T value) {
|
||||
Map<String, Object> map = ctx.channel().attr(NetworkAttributes.CUSTOM_PROPERTIES).get();
|
||||
map.put(key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated костыль
|
||||
*/
|
||||
@Deprecated
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T> Optional<T> getCustomProperty(String key, Class<T> classResult) {
|
||||
Map<String, Object> map = ctx.channel().attr(NetworkAttributes.CUSTOM_PROPERTIES).get();
|
||||
return (Optional<T>) Optional.ofNullable(map.getOrDefault(key, null));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(ServerSidePacket packet) {
|
||||
ctx.write(packet);
|
||||
|
||||
@@ -3,8 +3,16 @@ package mc.protocol;
|
||||
import io.netty.util.AttributeKey;
|
||||
import lombok.experimental.UtilityClass;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@UtilityClass
|
||||
public class NetworkAttributes {
|
||||
|
||||
public static final AttributeKey<State> STATE = AttributeKey.newInstance("STATE");
|
||||
|
||||
/**
|
||||
* @deprecated костыль
|
||||
*/
|
||||
@Deprecated
|
||||
public static final AttributeKey<Map<String, Object>> CUSTOM_PROPERTIES = AttributeKey.newInstance("CUSTOM_PROPERTIES");
|
||||
}
|
||||
|
||||
@@ -28,7 +28,9 @@ public class PacketInboundHandler extends SimpleChannelInboundHandler<ClientSide
|
||||
NettyConnectionContext context = poolNettyConnectionContext.borrowObject().setCtx(ctx);
|
||||
eventBus.emit(state, context, packet);
|
||||
|
||||
poolNettyConnectionContext.returnObject(context);
|
||||
if (!context.isUsedContext()) {
|
||||
poolNettyConnectionContext.returnObject(context);
|
||||
}
|
||||
poolPackets.returnObject(packet);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,11 +3,37 @@ package mc.protocol.api;
|
||||
import mc.protocol.State;
|
||||
import mc.protocol.packets.ServerSidePacket;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface ConnectionContext {
|
||||
|
||||
/**
|
||||
* @deprecated костыль
|
||||
*/
|
||||
@Deprecated
|
||||
void setUsedContext(boolean value);
|
||||
|
||||
/**
|
||||
* @deprecated костыль
|
||||
*/
|
||||
@Deprecated
|
||||
boolean isUsedContext();
|
||||
|
||||
State getState();
|
||||
void setState(State state);
|
||||
|
||||
/**
|
||||
* @deprecated костыль
|
||||
*/
|
||||
@Deprecated
|
||||
<T> void setCustomProperty(String key, T value);
|
||||
|
||||
/**
|
||||
* @deprecated костыль
|
||||
*/
|
||||
@Deprecated
|
||||
<T> Optional<T> getCustomProperty(String key, Class<T> classResult);
|
||||
|
||||
void send(ServerSidePacket packet);
|
||||
void sendNow(ServerSidePacket packet);
|
||||
void flushSending();
|
||||
|
||||
@@ -17,6 +17,7 @@ import mc.protocol.pool.PacketPool;
|
||||
import org.apache.commons.pool2.ObjectPool;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Consumer;
|
||||
@@ -36,6 +37,8 @@ public class ProtocolDecoder extends ByteToMessageDecoder {
|
||||
|
||||
@Override
|
||||
public void channelActive(@Nonnull ChannelHandlerContext ctx) throws Exception {
|
||||
ctx.channel().attr(NetworkAttributes.CUSTOM_PROPERTIES).set(new HashMap<>());
|
||||
|
||||
NettyConnectionContext context = poolNettyConnectionContext.borrowObject().setCtx(ctx);
|
||||
consumerNewConnection.accept(context);
|
||||
|
||||
@@ -48,6 +51,9 @@ public class ProtocolDecoder extends ByteToMessageDecoder {
|
||||
NettyConnectionContext context = poolNettyConnectionContext.borrowObject().setCtx(ctx);
|
||||
consumerDisconnect.accept(context);
|
||||
|
||||
ctx.channel().attr(NetworkAttributes.CUSTOM_PROPERTIES).get().clear();
|
||||
ctx.channel().attr(NetworkAttributes.CUSTOM_PROPERTIES).set(null);
|
||||
|
||||
poolNettyConnectionContext.returnObject(context);
|
||||
super.channelInactive(ctx);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user