Archived
0

PlayerManager

This commit is contained in:
2021-05-09 20:07:08 +03:00
parent c4767bd240
commit b049352fe3
13 changed files with 167 additions and 13 deletions

View File

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

View File

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

View File

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

View File

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

View File

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