Skip to content

Commit d4f0cee

Browse files
committed
ref[proxy]: refactor read method of TunnelProtocolClient2Server
1 parent e690d3f commit d4f0cee

File tree

2 files changed

+42
-23
lines changed

2 files changed

+42
-23
lines changed

net/src/main/java/com/zfoo/net/core/proxy/TunnelProtocolClient2Server.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,5 @@ public static void writeHeartbeat(ByteBuf out, TunnelHeartbeat heartbeat) {
8080
}
8181

8282
// -----------------------------------------------------------------------------------------------------------------
83-
public static void read(Channel channel, ByteBuf in) {
84-
var flag = in.readByte();
85-
if (flag == FLAG_PACKET) {
86-
var sid = ByteBufUtils.readLong(in);
87-
var uid = ByteBufUtils.readLong(in);
88-
var session = NetContext.getSessionManager().getServerSession(sid);
89-
if (SessionUtils.isActive(session)) {
90-
session.getChannel().writeAndFlush(TunnelProtocolServer2Client.valueOf(sid, uid, in));
91-
} else {
92-
ReferenceCountUtil.release(in);
93-
}
94-
} else if (flag == FLAG_REGISTER) {
95-
TunnelServer.tunnels.add(channel);
96-
ReferenceCountUtil.release(in);
97-
} else if (flag == FLAG_HEARTBEAT) {
98-
ReferenceCountUtil.release(in);
99-
}
100-
}
10183

10284
}

net/src/main/java/com/zfoo/net/core/proxy/handler/TunnelServerCodecHandler.java

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,21 @@
1313

1414
package com.zfoo.net.core.proxy.handler;
1515

16+
import com.zfoo.net.NetContext;
1617
import com.zfoo.net.core.proxy.TunnelProtocolClient2Server;
1718
import com.zfoo.net.core.proxy.TunnelProtocolServer2Client;
19+
import com.zfoo.net.core.proxy.TunnelServer;
1820
import com.zfoo.net.packet.PacketService;
21+
import com.zfoo.net.util.SessionUtils;
22+
import com.zfoo.protocol.buffer.ByteBufUtils;
1923
import com.zfoo.protocol.util.IOUtils;
2024
import com.zfoo.protocol.util.StringUtils;
2125
import io.netty.buffer.ByteBuf;
2226
import io.netty.channel.ChannelHandlerContext;
2327
import io.netty.handler.codec.ByteToMessageCodec;
2428
import io.netty.util.ReferenceCountUtil;
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
2531

2632
import java.util.List;
2733

@@ -30,6 +36,8 @@
3036
*/
3137
public class TunnelServerCodecHandler extends ByteToMessageCodec<TunnelProtocolServer2Client> {
3238

39+
private static final Logger logger = LoggerFactory.getLogger(TunnelServerCodecHandler.class);
40+
3341
@Override
3442
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
3543
// 不够读一个int
@@ -50,12 +58,41 @@ protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
5058
return;
5159
}
5260

53-
var retainedByteBuf = in.readRetainedSlice(length);
54-
try {
55-
TunnelProtocolClient2Server.read(ctx.channel(), retainedByteBuf);
56-
} catch (Throwable t) {
57-
ReferenceCountUtil.release(retainedByteBuf);
61+
var flag = in.readByte();
62+
length -= 1;
63+
64+
if (flag == TunnelProtocolClient2Server.FLAG_REGISTER) {
65+
TunnelServer.tunnels.add(ctx.channel());
66+
in.readSlice(length);
67+
return;
68+
}
69+
70+
if (flag == TunnelProtocolClient2Server.FLAG_HEARTBEAT) {
71+
// in.readSlice(length);
72+
return;
73+
}
74+
75+
var beforeReaderIndex = in.readerIndex();
76+
var sid = ByteBufUtils.readLong(in);
77+
var uid = ByteBufUtils.readLong(in);
78+
79+
length -= in.readerIndex() - beforeReaderIndex;
80+
81+
var session = NetContext.getSessionManager().getServerSession(sid);
82+
if (!SessionUtils.isActive(session)) {
83+
in.readSlice(length);
84+
logger.warn("session:[{}] is not activate", sid);
85+
return;
5886
}
87+
88+
if (!session.getChannel().isWritable()) {
89+
in.readSlice(length);
90+
logger.warn("session:[{}] is not writable", sid);
91+
return;
92+
}
93+
94+
var retainedByteBuf = in.readRetainedSlice(length);
95+
session.getChannel().writeAndFlush(TunnelProtocolServer2Client.valueOf(sid, uid, retainedByteBuf));
5996
}
6097

6198
@Override

0 commit comments

Comments
 (0)