@normanm @trustin This hack appears to fix all my issues with writing ByteBufs directly to channels. new @lazertester.party(). Others, please note this still isn't even a beta quality build. Due to memory laziness this build will only accept one connection.
This commit is contained in:
parent
bc0a076e4b
commit
b0820208e6
@ -15,6 +15,7 @@ import net.md_5.bungee.api.config.ServerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.ChatEvent;
|
||||
import net.md_5.bungee.api.event.PluginMessageEvent;
|
||||
import net.md_5.bungee.netty.Wrapper;
|
||||
import net.md_5.bungee.packet.Packet0KeepAlive;
|
||||
import net.md_5.bungee.packet.Packet3Chat;
|
||||
import net.md_5.bungee.packet.PacketC9PlayerListItem;
|
||||
@ -50,9 +51,9 @@ public class DownstreamBridge extends PacketHandler
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ByteBuf buf) throws Exception
|
||||
public void handle(Wrapper buf) throws Exception
|
||||
{
|
||||
EntityMap.rewrite( buf, con.serverEntityId, con.clientEntityId );
|
||||
EntityMap.rewrite( buf.buf, con.serverEntityId, con.clientEntityId );
|
||||
con.ch.write( buf );
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@ import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.event.ChatEvent;
|
||||
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
|
||||
import net.md_5.bungee.api.event.PluginMessageEvent;
|
||||
import net.md_5.bungee.netty.Wrapper;
|
||||
import net.md_5.bungee.packet.Packet0KeepAlive;
|
||||
import net.md_5.bungee.packet.Packet3Chat;
|
||||
import net.md_5.bungee.packet.PacketFAPluginMessage;
|
||||
@ -44,9 +45,9 @@ public class UpstreamBridge extends PacketHandler
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ByteBuf buf) throws Exception
|
||||
public void handle(Wrapper buf) throws Exception
|
||||
{
|
||||
EntityMap.rewrite( buf, con.clientEntityId, con.serverEntityId );
|
||||
EntityMap.rewrite( buf.buf, con.clientEntityId, con.serverEntityId );
|
||||
if ( con.getServer() != null )
|
||||
{
|
||||
con.getServer().getCh().write( buf );
|
||||
|
17
proxy/src/main/java/net/md_5/bungee/netty/HackEncoder.java
Normal file
17
proxy/src/main/java/net/md_5/bungee/netty/HackEncoder.java
Normal file
@ -0,0 +1,17 @@
|
||||
package net.md_5.bungee.netty;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.MessageToByteEncoder;
|
||||
|
||||
public class HackEncoder extends MessageToByteEncoder<Wrapper>
|
||||
{
|
||||
|
||||
@Override
|
||||
protected void encode(ChannelHandlerContext ctx, Wrapper msg, ByteBuf out) throws Exception
|
||||
{
|
||||
out.capacity( msg.buf.readableBytes() );
|
||||
out.writeBytes( msg.buf );
|
||||
msg.buf.release();
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@ import net.md_5.bungee.packet.PacketHandler;
|
||||
* channels to maintain simple states, and only call the required, adapted
|
||||
* methods when the channel is connected.
|
||||
*/
|
||||
public class HandlerBoss extends ChannelInboundMessageHandlerAdapter<ByteBuf>
|
||||
public class HandlerBoss extends ChannelInboundMessageHandlerAdapter<Wrapper>
|
||||
{
|
||||
|
||||
private PacketHandler handler;
|
||||
@ -48,11 +48,11 @@ public class HandlerBoss extends ChannelInboundMessageHandlerAdapter<ByteBuf>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void messageReceived(ChannelHandlerContext ctx, ByteBuf msg) throws Exception
|
||||
public void messageReceived(ChannelHandlerContext ctx, Wrapper msg) throws Exception
|
||||
{
|
||||
if ( handler != null && ctx.channel().isActive() )
|
||||
{
|
||||
DefinedPacket packet = DefinedPacket.packet( msg );
|
||||
DefinedPacket packet = DefinedPacket.packet( msg.buf );
|
||||
boolean sendPacket = true;
|
||||
if ( packet != null )
|
||||
{
|
||||
|
@ -17,7 +17,7 @@ import net.md_5.bungee.protocol.netty.PacketReader;
|
||||
* when all needed data is present.
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
public class PacketDecoder extends ReplayingDecoder<ByteBuf>
|
||||
public class PacketDecoder extends ReplayingDecoder<Void>
|
||||
{
|
||||
|
||||
@Getter
|
||||
@ -25,10 +25,11 @@ public class PacketDecoder extends ReplayingDecoder<ByteBuf>
|
||||
private int protocol;
|
||||
|
||||
@Override
|
||||
protected ByteBuf decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception
|
||||
protected Wrapper decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception
|
||||
{
|
||||
int startIndex = in.readerIndex();
|
||||
PacketReader.readPacket( in, protocol );
|
||||
return in.copy( startIndex, in.readerIndex() - startIndex );
|
||||
ByteBuf ret = in.copy( startIndex, in.readerIndex() - startIndex );
|
||||
return new Wrapper( ret );
|
||||
}
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ public class PipelineUtils
|
||||
}
|
||||
ch.pipeline().addLast( "timer", new ReadTimeoutHandler( BungeeCord.getInstance().config.getTimeout(), TimeUnit.MILLISECONDS ) );
|
||||
ch.pipeline().addLast( "decoder", new PacketDecoder( PacketDefinitions.VANILLA_PROTOCOL ) );
|
||||
ch.pipeline().addLast( "encoder", new HackEncoder() );
|
||||
ch.pipeline().addLast( "handler", new HandlerBoss() );
|
||||
}
|
||||
};
|
||||
|
14
proxy/src/main/java/net/md_5/bungee/netty/Wrapper.java
Normal file
14
proxy/src/main/java/net/md_5/bungee/netty/Wrapper.java
Normal file
@ -0,0 +1,14 @@
|
||||
package net.md_5.bungee.netty;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* Hack for Netty.
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
public class Wrapper
|
||||
{
|
||||
|
||||
public final ByteBuf buf;
|
||||
}
|
@ -2,6 +2,7 @@ package net.md_5.bungee.packet;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.channel.Channel;
|
||||
import net.md_5.bungee.netty.Wrapper;
|
||||
|
||||
public abstract class PacketHandler
|
||||
{
|
||||
@ -21,7 +22,7 @@ public abstract class PacketHandler
|
||||
{
|
||||
}
|
||||
|
||||
public void handle(ByteBuf buf) throws Exception
|
||||
public void handle(Wrapper buf) throws Exception
|
||||
{
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user