Archived
0

del trash files

This commit is contained in:
2018-04-09 07:54:55 +03:00
parent 81caaa9d08
commit de654742f8
5 changed files with 0 additions and 401 deletions

View File

@@ -1,89 +0,0 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 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<PairKey, List<PairValue>> 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<Integer> 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<PairValue> listValues = listenersMap.computeIfAbsent(key, f -> new ArrayList<>());
listValues.add(value);
}
});
}
public void eventIncomingPacket(final int stateId, final Packet packet, final Channel channel) {
List<PairValue> 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);
}
});
}
}
}

View File

@@ -1,142 +0,0 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 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;
}
}

View File

@@ -1,27 +0,0 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 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);
}
}

View File

@@ -1,63 +0,0 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 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();
}
}

View File

@@ -1,80 +0,0 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 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);
}
}