史诗级大饼,请叫我黑饼王。
This commit is contained in:
45
src/main/java/me/skymc/taboolib/socket/packet/Packet.java
Normal file
45
src/main/java/me/skymc/taboolib/socket/packet/Packet.java
Normal file
@@ -0,0 +1,45 @@
|
||||
package me.skymc.taboolib.socket.packet;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:01
|
||||
*/
|
||||
public abstract class Packet {
|
||||
|
||||
private final int port;
|
||||
private final String uid;
|
||||
|
||||
public Packet(int port) {
|
||||
this.port = port;
|
||||
this.uid = UUID.randomUUID().toString();
|
||||
}
|
||||
|
||||
public int getPort() {
|
||||
return port;
|
||||
}
|
||||
|
||||
public String getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
public void readOnServer() {
|
||||
|
||||
}
|
||||
|
||||
public void readOnClient() {
|
||||
|
||||
}
|
||||
|
||||
public void serialize(JsonObject json) {
|
||||
|
||||
}
|
||||
|
||||
public void unSerialize(JsonObject json) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package me.skymc.taboolib.socket.packet;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
import me.skymc.taboolib.socket.packet.impl.PacketEmpty;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:32
|
||||
*/
|
||||
public class PacketSerializer {
|
||||
|
||||
private static PacketParser parser = new PacketParser();
|
||||
|
||||
public static String serialize(Packet packet) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("uid", packet.getUid());
|
||||
json.addProperty("port", packet.getPort());
|
||||
json.addProperty("packet", packet.getClass().getAnnotation(PacketType.class).name());
|
||||
packet.serialize(json);
|
||||
return json.toString();
|
||||
}
|
||||
|
||||
public static Packet unSerialize(String origin) {
|
||||
Packet packet = null;
|
||||
try {
|
||||
packet = parser.parser((JsonObject) new JsonParser().parse(origin));
|
||||
} catch (JsonSyntaxException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return packet == null ? new PacketEmpty(0) : packet;
|
||||
}
|
||||
|
||||
// *********************************
|
||||
//
|
||||
// Getter and Setter
|
||||
//
|
||||
// *********************************
|
||||
|
||||
public static PacketParser getParser() {
|
||||
return parser;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package me.skymc.taboolib.socket.packet;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:09
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface PacketType {
|
||||
|
||||
String name();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package me.skymc.taboolib.socket.packet.impl;
|
||||
|
||||
import me.skymc.taboolib.socket.TabooLibServer;
|
||||
import me.skymc.taboolib.socket.packet.Packet;
|
||||
import me.skymc.taboolib.socket.packet.PacketType;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:01
|
||||
*/
|
||||
@PacketType(name = "alive")
|
||||
public class PacketAlive extends Packet {
|
||||
|
||||
public PacketAlive(int port) {
|
||||
super(port);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnServer() {
|
||||
TabooLibServer.getConnection(getPort()).ifPresent(connect -> connect.getValue().setLatestResponse(System.currentTimeMillis()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnClient() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package me.skymc.taboolib.socket.packet.impl;
|
||||
|
||||
import me.skymc.taboolib.socket.packet.Packet;
|
||||
import me.skymc.taboolib.socket.packet.PacketType;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:01
|
||||
*/
|
||||
@PacketType(name = "empty")
|
||||
public class PacketEmpty extends Packet {
|
||||
|
||||
public PacketEmpty(int port) {
|
||||
super(port);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnServer() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnClient() {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package me.skymc.taboolib.socket.packet.impl;
|
||||
|
||||
import me.skymc.taboolib.socket.TabooLibClient;
|
||||
import me.skymc.taboolib.socket.packet.Packet;
|
||||
import me.skymc.taboolib.socket.packet.PacketType;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:01
|
||||
*/
|
||||
@PacketType(name = "heartbeat")
|
||||
public class PacketHeartbeat extends Packet {
|
||||
|
||||
public PacketHeartbeat(int port) {
|
||||
super(port);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnServer() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnClient() {
|
||||
// 更新响应时间
|
||||
TabooLibClient.setLatestResponse(System.currentTimeMillis());
|
||||
// 回应服务端
|
||||
TabooLibClient.sendPacket(new PacketAlive(TabooLibClient.getSocket().getLocalPort()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package me.skymc.taboolib.socket.packet.impl;
|
||||
|
||||
import com.ilummc.tlib.resources.TLocale;
|
||||
import me.skymc.taboolib.socket.TabooLibServer;
|
||||
import me.skymc.taboolib.socket.packet.Packet;
|
||||
import me.skymc.taboolib.socket.packet.PacketType;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:38
|
||||
*/
|
||||
@PacketType(name = "join")
|
||||
public class PacketJoin extends Packet {
|
||||
|
||||
public PacketJoin(int port) {
|
||||
super(port);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnServer() {
|
||||
TabooLibServer.println("Client " + getPort() + " joined Communication Area.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnClient() {
|
||||
TLocale.sendToConsole("COMMUNICATION.CLIENT-JOINED", String.valueOf(getPort()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package me.skymc.taboolib.socket.packet.impl;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.ilummc.tlib.resources.TLocale;
|
||||
import me.skymc.taboolib.socket.TabooLibServer;
|
||||
import me.skymc.taboolib.socket.packet.Packet;
|
||||
import me.skymc.taboolib.socket.packet.PacketType;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:01
|
||||
*/
|
||||
@PacketType(name = "message")
|
||||
public class PacketMessage extends Packet {
|
||||
|
||||
private String message;
|
||||
|
||||
public PacketMessage(int port) {
|
||||
this(port, "none");
|
||||
}
|
||||
|
||||
public PacketMessage(int port, String message) {
|
||||
super(port);
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnServer() {
|
||||
TabooLibServer.println(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnClient() {
|
||||
TLocale.sendToConsole("COMMUNICATION.PACKET-MESSAGE", String.valueOf(getPort()), message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(JsonObject json) {
|
||||
json.addProperty("message", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unSerialize(JsonObject json) {
|
||||
message = json.get("message").getAsString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package me.skymc.taboolib.socket.packet.impl;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.ilummc.tlib.resources.TLocale;
|
||||
import me.skymc.taboolib.socket.TabooLibServer;
|
||||
import me.skymc.taboolib.socket.packet.Packet;
|
||||
import me.skymc.taboolib.socket.packet.PacketType;
|
||||
|
||||
/**
|
||||
* @Author sky
|
||||
* @Since 2018-08-22 23:38
|
||||
*/
|
||||
@PacketType(name = "quit")
|
||||
public class PacketQuit extends Packet {
|
||||
|
||||
private String message;
|
||||
|
||||
public PacketQuit(int port) {
|
||||
this(port, "connect closed.");
|
||||
}
|
||||
|
||||
public PacketQuit(int port, String message) {
|
||||
super(port);
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnServer() {
|
||||
TabooLibServer.getConnection(getPort()).ifPresent(connection -> {
|
||||
// 注销连接
|
||||
TabooLibServer.getClient().remove(connection.getKey());
|
||||
// 关闭连接
|
||||
try {
|
||||
connection.getValue().getSocket().close();
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
// 提示信息
|
||||
TabooLibServer.println("Client " + getPort() + " leaved Communication Area: " + message);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readOnClient() {
|
||||
TLocale.sendToConsole("COMMUNICATION.CLIENT-QUITED", String.valueOf(getPort()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serialize(JsonObject json) {
|
||||
json.addProperty("message", message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unSerialize(JsonObject json) {
|
||||
message = json.get("message").getAsString();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user