Handshake
This commit is contained in:
@@ -34,6 +34,11 @@ public class ByteArrayOutputNetStream extends NetStream {
|
|||||||
baos.write(buffer, 0, buffer.length);
|
baos.write(buffer, 0, buffer.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void skipBytes(int count) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
public byte[] toByteArray() {
|
public byte[] toByteArray() {
|
||||||
return baos.toByteArray();
|
return baos.toByteArray();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,5 +81,5 @@ public abstract class NetStream {
|
|||||||
public abstract void writeByte(int value);
|
public abstract void writeByte(int value);
|
||||||
public abstract void writeBytes(byte[] buffer);
|
public abstract void writeBytes(byte[] buffer);
|
||||||
|
|
||||||
|
public abstract void skipBytes(int count);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,11 @@ public class ByteArrayOutputNetStream extends NetStream {
|
|||||||
baos.write(buffer, 0, buffer.length);
|
baos.write(buffer, 0, buffer.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void skipBytes(int count) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
public byte[] toByteArray() {
|
public byte[] toByteArray() {
|
||||||
return baos.toByteArray();
|
return baos.toByteArray();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import mc.core.CSPacket;
|
import mc.core.CSPacket;
|
||||||
import mc.core.Config;
|
import mc.core.Config;
|
||||||
import mc.core.Main;
|
import mc.core.Main;
|
||||||
|
import mc.core.netty.proto_125.packets.HandshakePacket;
|
||||||
import mc.core.netty.proto_125.packets.KickPacket;
|
import mc.core.netty.proto_125.packets.KickPacket;
|
||||||
import mc.core.netty.proto_125.packets.PingPacket;
|
import mc.core.netty.proto_125.packets.PingPacket;
|
||||||
|
|
||||||
@@ -20,6 +21,8 @@ import java.util.Optional;
|
|||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
|
public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
|
||||||
|
private static Config config = Main.appContext.getBean("config", Config.class); //FIXME
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, CSPacket packet) throws Exception {
|
protected void channelRead0(ChannelHandlerContext ctx, CSPacket packet) throws Exception {
|
||||||
log.debug("{}: {}", packet.getClass().getSimpleName(), packet.toString());
|
log.debug("{}: {}", packet.getClass().getSimpleName(), packet.toString());
|
||||||
@@ -38,9 +41,12 @@ public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onPingPacket(Channel channel, PingPacket packet) {
|
public void onPingPacket(Channel channel, PingPacket packet) {
|
||||||
Config config = Main.appContext.getBean("config", Config.class);
|
|
||||||
KickPacket pkt = new KickPacket();
|
KickPacket pkt = new KickPacket();
|
||||||
pkt.setPongMessage(config.getDescriptionServer(), 0, config.getMaxPlayers());
|
pkt.setPongMessage(config.getDescriptionServer(), 0, config.getMaxPlayers());
|
||||||
channel.writeAndFlush(pkt);
|
channel.writeAndFlush(pkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onHandshakePacket(Channel channel, HandshakePacket packet) {
|
||||||
|
channel.writeAndFlush(packet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ import com.google.common.collect.BiMap;
|
|||||||
import com.google.common.collect.ImmutableBiMap;
|
import com.google.common.collect.ImmutableBiMap;
|
||||||
import mc.core.CSPacket;
|
import mc.core.CSPacket;
|
||||||
import mc.core.SCPacket;
|
import mc.core.SCPacket;
|
||||||
|
import mc.core.netty.proto_125.packets.HandshakePacket;
|
||||||
import mc.core.netty.proto_125.packets.KickPacket;
|
import mc.core.netty.proto_125.packets.KickPacket;
|
||||||
import mc.core.netty.proto_125.packets.PingPacket;
|
import mc.core.netty.proto_125.packets.PingPacket;
|
||||||
|
|
||||||
public class PacketManager {
|
public class PacketManager {
|
||||||
private static final BiMap<Integer, Class<?>> packetMap = ImmutableBiMap.of(
|
private static final BiMap<Integer, Class<?>> packetMap = ImmutableBiMap.of(
|
||||||
|
0x02, HandshakePacket.class,
|
||||||
0xFE, PingPacket.class,
|
0xFE, PingPacket.class,
|
||||||
0xFF, KickPacket.class
|
0xFF, KickPacket.class
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -16,6 +16,14 @@ import java.nio.charset.StandardCharsets;
|
|||||||
public class WrapperNetStream extends NetStream {
|
public class WrapperNetStream extends NetStream {
|
||||||
private final ByteBuf byteBuf;
|
private final ByteBuf byteBuf;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String readString() {
|
||||||
|
int size = byteBuf.readUnsignedByte() * 2;
|
||||||
|
byte[] bytes = new byte[size];
|
||||||
|
byteBuf.readBytes(bytes);
|
||||||
|
return new String(bytes, StandardCharsets.UTF_16BE);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte readByte() {
|
public byte readByte() {
|
||||||
return byteBuf.readByte();
|
return byteBuf.readByte();
|
||||||
@@ -40,4 +48,9 @@ public class WrapperNetStream extends NetStream {
|
|||||||
public void writeBytes(byte[] buffer) {
|
public void writeBytes(byte[] buffer) {
|
||||||
byteBuf.writeBytes(buffer);
|
byteBuf.writeBytes(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void skipBytes(int count) {
|
||||||
|
byteBuf.skipBytes(count);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* DmitriyMX <dimon550@gmail.com>
|
||||||
|
* 2018-04-10
|
||||||
|
*/
|
||||||
|
package mc.core.netty.proto_125.packets;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.ToString;
|
||||||
|
import mc.core.CSPacket;
|
||||||
|
import mc.core.NetStream;
|
||||||
|
import mc.core.SCPacket;
|
||||||
|
import mc.core.netty.proto_125.ByteArrayOutputNetStream;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@ToString
|
||||||
|
public class HandshakePacket implements CSPacket, SCPacket {
|
||||||
|
private String playerName;
|
||||||
|
private String host;
|
||||||
|
private int port;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readSelf(NetStream netStream) {
|
||||||
|
netStream.skipBytes(1);
|
||||||
|
String[] str = netStream.readString().split(";");
|
||||||
|
|
||||||
|
playerName = str[0];
|
||||||
|
if (str[1].contains(":")) {
|
||||||
|
str = str[1].split(":");
|
||||||
|
host = str[0];
|
||||||
|
port = Integer.parseInt(str[1]);
|
||||||
|
} else {
|
||||||
|
host = str[1];
|
||||||
|
port = 25565;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] toByteArray() {
|
||||||
|
ByteArrayOutputNetStream netStream = new ByteArrayOutputNetStream();
|
||||||
|
netStream.writeByte(0);
|
||||||
|
netStream.writeString("-");
|
||||||
|
return netStream.toByteArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user