diff --git a/src/main/java/mc/core/netty/EventBus.java b/src/main/java/mc/core/netty/EventBus.java deleted file mode 100644 index 1544c15..0000000 --- a/src/main/java/mc/core/netty/EventBus.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * DmitriyMX - * 2018-03-28 - */ -package mc.core.netty; - -import io.netty.channel.Channel; -import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import mc.core.Packet; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.*; - -@Slf4j -public class EventBus { - private static EventBus instance = new EventBus(); - - @RequiredArgsConstructor - @EqualsAndHashCode - private static class PairKey { - private final int stateId; - private final int packetId; - } - - @RequiredArgsConstructor - private static class PairValue { - private final Object object; - private final Method method; - } - - public interface Listener {} - - @Target(ElementType.METHOD) - @Retention(RetentionPolicy.RUNTIME) - public @interface EventHandler { - State value(); - } - - public static EventBus getInstance() { - return instance; - } - - private Map> listenersMap = new HashMap<>(); - - public void listenIncomingPacket(final Listener listener) { - Arrays.stream(listener.getClass().getDeclaredMethods()) - .filter(method -> method.isAnnotationPresent(EventHandler.class) - && method.getParameterCount() == 2 - && Packet.class.isAssignableFrom(method.getParameterTypes()[0]) - && Channel.class.isAssignableFrom(method.getParameterTypes()[1])) - .forEach(method -> { - State state = method.getAnnotation(EventHandler.class).value(); - - Class pktClass = method.getParameterTypes()[0]; - Optional optPacketId = state.getPacketId(pktClass.asSubclass(Packet.class)); - if (optPacketId.isPresent()) { - PairKey key = new PairKey( - state.getId(), - optPacketId.get() - ); - - PairValue value = new PairValue(listener, method); - - List listValues = listenersMap.computeIfAbsent(key, f -> new ArrayList<>()); - listValues.add(value); - } - }); - } - - public void eventIncomingPacket(final int stateId, final Packet packet, final Channel channel) { - List listValues = listenersMap.get(new PairKey(stateId, packet.getId())); - if (listValues != null) { - listValues.forEach(pairValue -> { - try { - pairValue.method.invoke(pairValue.object, packet, channel); - } catch (IllegalAccessException | InvocationTargetException e) { - log.error("Method invoke", e); - } - }); - } - } -} diff --git a/src/main/java/mc/core/netty/WrapperByteBufNetStream.java b/src/main/java/mc/core/netty/WrapperByteBufNetStream.java deleted file mode 100644 index fa1c4a2..0000000 --- a/src/main/java/mc/core/netty/WrapperByteBufNetStream.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * DmitriyMX - * 2018-03-28 - */ -package mc.core.netty; - -import io.netty.buffer.ByteBuf; -import lombok.RequiredArgsConstructor; -import mc.core.NetStream; - -import java.nio.charset.StandardCharsets; - -@RequiredArgsConstructor -public class WrapperByteBufNetStream implements NetStream { - private final ByteBuf byteBuf; - private int length; - - @Override - public byte readByte() { - return byteBuf.readByte(); - } - - @Override - public void writeByte(byte value) { - byteBuf.writeByte(value); - } - - @Override - public int readBytes(byte[] buffer) { - return byteBuf.readBytes(buffer).readableBytes(); - } - - @Override - public void writeBytes(byte[] buffer) { - byteBuf.writeBytes(buffer); - } - - @Override - public int readBytes(byte[] buffer, int offset, int length) { - return byteBuf.writeBytes(buffer, offset, length).readableBytes(); - } - - @Override - public void writeBytes(byte[] buffer, int offset, int length) { - byteBuf.writeBytes(buffer, offset, length); - } - - @Override - public int readVarInt() { - int result = 0; - byte read; - int numRead = 0; - - do { - read = byteBuf.readByte(); - int value = (read & 0b01111111); - result |= (value << (7 * numRead)); - - if (++numRead > 5) { - break; - } - } while ((read & 0b10000000) != 0); - - return result; - } - - @Override - public void writeVarInt(final int value) { - writeVarLong(value); - } - - @Override - public long readVarLong() { - long result = 0; - byte read; - int numRead = 0; - - do { - read = byteBuf.readByte(); - int value = (read & 0b01111111); - result |= (value << (7 * numRead)); - - numRead++; - if (numRead > 10) { - break; - } - } while ((read & 0b10000000) != 0); - - return result; - } - - @Override - public void writeVarLong(final long value) { - long v = value; - do { - byte write = (byte)(v & 0b01111111); - v >>>= 7; - if (v != 0) { - write |= 0b10000000; - } - byteBuf.writeByte(write); - } while (v != 0); - } - - @Override - public String readString() { - int length = readVarInt(); - byte[] buffer = new byte[length]; - int i = 0; - do { - buffer[i++] = byteBuf.readByte(); - } while (i < length); - - return new String(buffer, StandardCharsets.UTF_8); - } - - @Override - public void writeString(String value) { - writeVarInt(value.length()); - byteBuf.writeBytes(value.getBytes()); - } - - @Override - public int readUnsignedShort() { - return byteBuf.readUnsignedShort(); - } - - @Override - public void skipBytes(int count) { - byteBuf.skipBytes(count); - } - - @Override - public void setExpectedLength(int value) { - this.length = value; - } - - @Override - public int getExpectedLength() { - return length; - } -} diff --git a/src/main/java/mc/core/netty/handlers/HandshakeHandler.java b/src/main/java/mc/core/netty/handlers/HandshakeHandler.java deleted file mode 100644 index 8dd4431..0000000 --- a/src/main/java/mc/core/netty/handlers/HandshakeHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * DmitriyMX - * 2018-03-28 - */ -package mc.core.netty.handlers; - -import io.netty.channel.Channel; -import lombok.extern.slf4j.Slf4j; -import mc.core.netty.EventBus; -import mc.core.netty.State; -import mc.core.netty.packets.HandshakeRequestPacket; -import mc.core.netty.packets.HandshakeResponsePacket; -import mc.core.netty.packets.PingPacket; - -@Slf4j -public class HandshakeHandler implements EventBus.Listener { - @EventBus.EventHandler(State.Handshaking) - public void onRequestHandshake(HandshakeRequestPacket packet, Channel channel) { - channel.attr(State.ATTR_STATE).set(packet.getNextState()); - channel.writeAndFlush(new HandshakeResponsePacket()); - } - - @EventBus.EventHandler(State.Handshaking) - public void onPing(PingPacket packet, Channel channel) { - channel.writeAndFlush(packet); - } -} diff --git a/src/main/java/mc/core/netty/packets/HandshakeRequestPacket.java b/src/main/java/mc/core/netty/packets/HandshakeRequestPacket.java deleted file mode 100644 index c842703..0000000 --- a/src/main/java/mc/core/netty/packets/HandshakeRequestPacket.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * DmitriyMX - * 2018-03-25 - */ -package mc.core.netty.packets; - -import lombok.Getter; -import lombok.ToString; -import lombok.extern.slf4j.Slf4j; -import mc.core.NetStream; -import mc.core.NotSupportException; -import mc.core.Packet; -import mc.core.netty.State; -import mc.core.netty.UnknowState; - -import static mc.core.netty.Utils.*; - -@Slf4j -@Getter -@ToString -public class HandshakeRequestPacket implements Packet { - private static final int id = 0; - private int protocolVersion; - private String serverAddress; - private int serverPort; - private State nextState; - private String nickname; - private int size; - - @Override - public int getSize() { - return size; - } - - @Override - public int getId() { - return id; - } - - @Override - public void readSelf(NetStream netStream) { - protocolVersion = netStream.readVarInt(); - serverAddress = netStream.readString(); - serverPort = netStream.readUnsignedShort(); - final int nextStateInt = netStream.readVarInt(); - nextState = State.getById(nextStateInt).orElseGet(() -> { - log.warn("Unknown state: {}", nextStateInt); - return State.Unknown; - }); - nickname = netStream.readString(); - - size = lengthVarInt(id) - + lengthVarInt(protocolVersion) - + lengthString(serverAddress) - + lengthUnsignedShort(serverPort) - + lengthVarInt(nextState.getId()); - } - - @Override - public void writeSelf(NetStream netStream) { - throw new NotSupportException(); - } -} diff --git a/src/main/java/mc/core/netty/packets/HandshakeResponsePacket.java b/src/main/java/mc/core/netty/packets/HandshakeResponsePacket.java deleted file mode 100644 index 387dfd2..0000000 --- a/src/main/java/mc/core/netty/packets/HandshakeResponsePacket.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * DmitriyMX - * 2018-03-25 - */ -package mc.core.netty.packets; - -import com.google.gson.JsonObject; -import lombok.extern.slf4j.Slf4j; -import mc.core.NetStream; -import mc.core.NotSupportException; -import mc.core.Packet; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; - -import java.io.IOException; -import java.util.Base64; - -import static mc.core.netty.Utils.*; - -@Slf4j -public class HandshakeResponsePacket implements Packet { - private static final int id = 0; - private static String json; - private static int size; - - static { - JsonObject versionObj = new JsonObject(); - versionObj.addProperty("name", "1.12.2"); - versionObj.addProperty("protocol", 340); - - JsonObject playersObj = new JsonObject(); - playersObj.addProperty("max", 100); - playersObj.addProperty("online", 15); - - JsonObject descriptionObj = new JsonObject(); - descriptionObj.addProperty("text", "MC Core"); - - JsonObject rootObj = new JsonObject(); - rootObj.add("version", versionObj); - rootObj.add("players", playersObj); - rootObj.add("description", descriptionObj); - - try { - rootObj.addProperty("favicon", - "data:image/png;base64," + - new String(Base64.getEncoder().encode( - IOUtils.resourceToByteArray("/icon.png"))) - ); - } catch (IOException e) { - log.warn("error read icon server", e); - } - - json = rootObj.toString(); - - size = lengthVarInt(id) - + lengthString(json); - } - - @Override - public int getSize() { - return size; - } - - @Override - public int getId() { - return id; - } - - @Override - public void readSelf(NetStream netStream) { - throw new NotSupportException(); - } - - @Override - public void writeSelf(NetStream netStream) { - netStream.writeVarInt(getSize()); - netStream.writeVarInt(getId()); - netStream.writeString(json); - } -}